【问题标题】:How to make dump of all MySQL databases besides two如何转储除两个之外的所有 MySQL 数据库
【发布时间】:2015-12-22 15:06:59
【问题描述】:

这可能非常简单,但是我将为实时服务器执行此操作,并且不想搞砸。

有人可以告诉我如何对除 mysql 和 performance_schema 数据库之外的所有数据库、过程、触发器等进行 mysqldump 吗?

【问题讨论】:

标签: mysql


【解决方案1】:

mysqldump 中没有可用于过滤数据库列表的选项,但您可以运行两个命令:

# DATABASES=$(mysql -N -B -e "SHOW DATABASES" | grep -Ev '(mysql|performance_schema)')
# mysqldump -B $DATABASES

【讨论】:

  • 您需要添加-R 标志以将存储过程包含在转储中(我学到了很难:S)
  • @Barranka 您可以添加更多内容,但 OP 似乎在询问是否要跳过某些数据库。
【解决方案2】:

As stated in the reference manual:

mysqldump 默认不转储INFORMATION_SCHEMAperformance_schema 数据库。要转储其中任何一个,请在命令行上明确命名并使用--skip-lock-tables 选项。您也可以使用 --databases 选项命名它们。

这样就可以解决您对转储这些数据库的担忧。

现在,要转储所有个数据库,我认为你应该这样做:

mysqldump -h Host -u User -pPassword -A -R > very_big_dump.sql

要在不转储所有数据的情况下对其进行测试,您可以添加-d 标志以仅转储没有数据的数据库、表(和例程)定义。

正如 Basile 在他的回答中提到的,省略转储 mysql 数据库的最简单方法是使用无权访问它的用户调用 mysqldump。所以妙语是:使用或创建一个只能访问您要转储的数据库的用户。

【讨论】:

  • 正如你提到的 INFORMATION_SCHEMA 或 performance_schema 默认不会被转储,但mysql 会。
【解决方案3】:

是的,您可以同时转储多个模式:

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] 无法访问它们。

【讨论】:

  • 我喜欢不同用户的回答相互丰富
  • 没错!这就是stackoverflow的用途:-)
猜你喜欢
  • 2011-02-15
  • 2014-08-24
  • 2013-01-10
  • 1970-01-01
  • 1970-01-01
  • 2018-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多