这可能非常简单,但是我将在一个实时服务器上执行此操作,不想搞砸它。
请问有人能告诉我如何对所有数据库、程序、触发器等进行mysqldump,但排除mysql和performance_schema数据库吗?
这可能非常简单,但是我将在一个实时服务器上执行此操作,不想搞砸它。
请问有人能告诉我如何对所有数据库、程序、触发器等进行mysqldump,但排除mysql和performance_schema数据库吗?
是的,您可以同时转储多个模式:
mysqldump --user=[USER] --password=[PASS] --host=[HOST] --databases mydb1 mydb2 mydb3 [...] --routines > dumpfile.sql
或者
mysqldump --user=[USER] --password=[p --host=[HOST] --all-databases --routines > dumpfile.sql
关于最后一个命令,如果您不想转储performance_schema(编辑:如@Barranka所述,默认情况下mysqldump不会转储它),mysql、phpMyAdmin模式等,则只需确保[USER]无法访问它们。
mysqldump
默认不会转储INFORMATION_SCHEMA
或performance_schema
数据库。要转储其中任何一个,请在命令行中明确指定其名称,并使用--skip-lock-tables
选项。您还可以使用--databases
选项来指定它们的名称。
这样就解决了您关于转储这些数据库的问题。
现在,要转储所有数据库,我认为您应该这样做:
mysqldump -h Host -u User -pPassword -A -R > very_big_dump.sql
-d
标志,仅转储数据库、表(和例程)定义而没有数据。mysql
数据库的最简单方法是使用没有访问权限的用户调用mysqldump
。因此,要点是:使用或创建仅对您打算转储的数据库具有访问权限的用户。mysql
会被转储。 - Basilemysqldump
没有过滤数据库列表的选项,但你可以运行两个命令:
# DATABASES=$(mysql -N -B -e "SHOW DATABASES" | grep -Ev '(mysql|performance_schema)')
# mysqldump -B $DATABASES
-R
标志来包含转储中的存储过程(我是吃了亏才学到的:S) - Barranka