这可能非常简单,但我会为实时服务器执行此操作,并且不想搞砸它。
有人可以告诉我除了mysql和performance_schema数据库之外我怎么能处理所有数据库,程序,触发器等的mysqldump?
答案 0 :(得分:3)
是的,你可以同时转储几个模式:
mysqldump --user=[USER] --password=[PASS] --host=[HOST] --databases mydb1 mydb2 mydb3 [...] --routines > dumpfile.sql
OR
mysqldump --user=[USER] --password=[p --host=[HOST] --all-databases --routines > dumpfile.sql
关于最后一个命令,如果你不想转储performance_schema(编辑:正如@Barranka所提到的,默认情况下mysqldump不会转储它),mysql,phpMyAdmin架构等,你只需要确保[ USER]无法访问它们。
答案 1 :(得分:2)
mysqldump
中没有可用于过滤数据库列表的选项,但您可以运行两个命令:
# DATABASES=$(mysql -N -B -e "SHOW DATABASES" | grep -Ev '(mysql|performance_schema)')
# mysqldump -B $DATABASES
答案 2 :(得分:2)
As stated in the reference manual:
默认情况下,
mysqldump
不会转储INFORMATION_SCHEMA
或performance_schema
数据库。要转储其中任何一个,请在命令行中明确命名,并使用--skip-lock-tables
选项。您也可以使用--databases
选项命名它们。
这样就可以解决您对转储这些数据库的担忧。
现在,要转储所有数据库,我认为您应该这样做:
mysqldump -h Host -u User -pPassword -A -R > very_big_dump.sql
要在不转储所有数据的情况下对其进行测试,可以添加-d
标志以仅转储没有数据的数据库,表(和例程)定义。
正如Basile在他的回答中所提到的,省略转储mysql
数据库的最简单方法是使用无法访问它的用户调用mysqldump
。因此,重点是:使用或创建只能访问您要转储的数据库的用户。