【发布时间】:2015-12-22 15:06:59
【问题描述】:
这可能非常简单,但是我将为实时服务器执行此操作,并且不想搞砸。
有人可以告诉我如何对除 mysql 和 performance_schema 数据库之外的所有数据库、过程、触发器等进行 mysqldump 吗?
【问题讨论】:
标签: mysql
这可能非常简单,但是我将为实时服务器执行此操作,并且不想搞砸。
有人可以告诉我如何对除 mysql 和 performance_schema 数据库之外的所有数据库、过程、触发器等进行 mysqldump 吗?
【问题讨论】:
标签: mysql
mysqldump 中没有可用于过滤数据库列表的选项,但您可以运行两个命令:
# DATABASES=$(mysql -N -B -e "SHOW DATABASES" | grep -Ev '(mysql|performance_schema)')
# mysqldump -B $DATABASES
【讨论】:
-R 标志以将存储过程包含在转储中(我学到了很难:S)
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。所以妙语是:使用或创建一个只能访问您要转储的数据库的用户。
【讨论】:
mysql 会。
是的,您可以同时转储多个模式:
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] 无法访问它们。
【讨论】: