如果 MySQL 服务器关闭,可以在 InnoDB 数据库上使用 rsync 吗?

lep*_*pix 6 mysql innodb migration

如果 MySQL 服务器关闭,可以在 InnoDB 数据库上使用 rsync 吗?

例如 :

/etc/init.d/mysql stop
rsync -av /home/mysql/mydb/ root@newserver.com:/home/mysql
Run Code Online (Sandbox Code Playgroud)

Nat*_*lly 7

这实际上取决于 /home/mysql/mydb 下的目录结构 - 如果这只是一个数据库的数据文件,则需要扩展您的范围。

如果您打算使用 rsync(或一般采用基于文件的备份),您需要确保您的备份至少包括:

  • 您的 innodb 日志文件 ( ib_logfile* )
  • 您的主要 innodb 数据文件(ibdata*
  • 所有额外的 innodb 数据文件 ( *.ibd ) (如果使用innodb_file_per_table = 1)
  • InnoDB 表的所有表定义文件 ( *.frm )

显然,这仅涵盖 InnoDB - 大概您还想获取所有其他数据库文件(MyISAM、Archive、CSV 等)。

MySQL 关于该主题的文档还建议set global innodb_fast_shutdown = 0在关闭服务器之前发布- 这应该不是必需的,但它是有道理的。该设置将强制服务器将您的日志文件刷新到您的数据文件,如果您需要从备份中恢复,它将显着加快恢复时间。

(严格来说,缓慢关闭意味着您应该能够在不备份日志文件的情况下逃脱,但这仍然是一个好主意,以防万一有一天服务器由于某种原因没有完全关闭)

我是Percona Xtrabackup备份的忠实粉丝,因为它通常确保它复制所有必要的文件,并且可以在线备份,但在某些情况下 rsync 可能更适合您的要求。

更新:如果您使用 MySQL 5.6,您可能需要查看InnoDB 可传输表空间。此功能可能对您没有用处,如果您有很多表,则需要编写一些脚本,但如果您使用innodb_file_per_table并试图避免在所有其他 InnoDB 之间进行复制,它可能会非常有用行李。