备份和恢复“mysql”数据库

Eag*_*gle 6 mysql mysqldump backup

我使用以下命令备份一些普通数据库:

mysqldump --host=host --user=user --password=passwd --result-file=result.sql -R --single-transaction database_name
Run Code Online (Sandbox Code Playgroud)

我的问题是:我还需要转储“mysql”数据库吗?请注意,在“恢复”它们之后,我将为每个数据库创建新用户。所以我不需要用户信息的“mysql”数据库。

谢谢

Rol*_*DBA 7

大多数执行 mysqldumps 的人只使用该--all-databases选项。这将包括mysql数据库。关于是否应该包括mysql数据库有两种思想流派。

为什么不包括mysql???

当你 mysqldump mysql 模式时,你应该让自己意识到 MySQL 版本的差异,特别是 mysql.user 表。

  • 在 MySQL 5.0 中,mysql.user 有 37 列
  • 在 MySQL 5.1 中,mysql.user 有 39 列
  • 在 MySQL 5.5 中,mysql.user 有 42 列

从一个版本恢复 mysqldump 可能会导致某些权限在恢复时消失:

确保将转储用户授权作为特殊脚本处理。为此,有两种方法:

方法#1:使用pt-show-grants

这个 Percona Toolkit 程序移动打印出纯 SQL 中的用户权限。您可以将结果输出运行到文本文件中。然后,在 MySQL 5.5.24 中执行文本文件。故事结局。

pt-show-grants ... > MySQLUserGrants.sql
Run Code Online (Sandbox Code Playgroud)

方法#2:模拟pt-show-grants

我为 pt-show-grants 制作了自己的技术

mysql -hhostaddr -umyuserid -pmypassword --skip-column-names -A -e"SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host,''';') FROM mysql.user WHERE user<>''" | mysql -hhostaddr -umyuserid -pmypassword --skip-column-names -A | sed 's/$/;/g' > MySQLUserGrants.sql
Run Code Online (Sandbox Code Playgroud)

我以前讨论过这个

为什么包括mysql???

您可以 mysqldumpmysql模式的唯一情况是将其恢复到相同版本的mysql

更新 2014-12-30 17:42 美国东部时间

我的原始答案仅涵盖 MySQL Grants,因为 mysql 模式的这一特定方面最容易被破坏和忽视。

除非有必要,否则还有其他原因不要只备份 mysql 模式

  • 如果您想保留所有存储过程的时间戳,您可以自行 mysqldump mysql.proc 表并加载它。您也可以只复制proc.frm, proc.MYDproc.MYI然后通过将其复制回 mysql 子文件夹和 runninf 来重新加载它FLUSH TABLES;
  • 如果您对常规日志 (mysql.general_log) 和慢速日志 (mysql.slow_log) 使用基于表的日志记录,您不希望备份这些日志并将它们移动到日志在语义上不适用的另一台服务器。如果您想恢复它们,这是您的选择。
  • 如果您在 mysql 中设置任何时区信息,如果您不想在另一个时区的数据中心恢复 mysql 架构,请务必小心。

如果您想小心在 mysql 模式中要备份和恢复的内容,您应该将 mysql 模式 mysqldump 在一个单独的文件中。

mysql 模式中的表数以及列数会因版本而异。所以,你应该登录到mysql并运行

SHOW TABLES FROM mysql;
Run Code Online (Sandbox Code Playgroud)

表列表可能不包括事件(如 MySQL 5.0),可能没有 InnoDB 系统表(如 MySQL 5.6),可能不包括表空间授权(如 MySQL 5.6),等等。Sp,如果您觉得必须备份 mysql 模式,那么对于真正需要从 mysql 模式备份哪些表,您会非常保守(好吧,非常挑剔和小心)。


Loc*_*ock 0

如果您在新系统上创建新用户等,则无需备份MySQL数据库。

希望我有一些文档可以向您展示,但是 Google MySQL 数据库相当困难,因为所有结果都纯粹与 MySQL 系统有关,而不是本身创建的数据库。