16.3.1.2 从副本备份原始数据

为了保证所复制文件的完整性,应在关闭副本服务器时备份 MySQL 副本上的原始数据文件。如果 MySQL 服务器仍在运行,则后台任务可能仍在更新数据库文件,尤其是那些涉及具有后台进程(例如InnoDB)的存储引擎的任务。使用InnoDB可以在崩溃恢复期间解决这些问题,但是由于可以在备份过程中关闭副本服务器而不会影响源的执行,因此可以利用此功能。

要关闭服务器并备份文件:

  • 关闭副本 MySQL 服务器:
shell> mysqladmin shutdown
  • 复制数据文件。您可以使用任何合适的复制或归档 Util,包括 cp ,tar 或 WinZip。例如,假设数据目录位于当前目录下,则可以按以下方式归档整个目录:
shell> tar cf /tmp/dbbackup.tar ./data
  • 再次启动 MySQL 服务器。在 Unix 下:
shell> mysqld_safe &

Under Windows:

C:\> "C:\Program Files\MySQL\MySQL Server 5.7\bin\mysqld"

通常,您应该备份副本 MySQL 服务器的整个数据目录。如果您希望能够还原数据并用作副本(例如,在副本发生故障的情况下),那么除了副本的数据外,还应该备份副本状态文件,复制元数据存储库和中继日志文件。恢复副本的数据后,需要这些文件才能恢复复制。

如果丢失了中继日志,但是仍然具有relay-log.info文件,则可以检查该文件以确定复制 SQL 线程在源二进制日志中执行的距离。然后,您可以将更改为主MASTER_LOG_FILEMASTER_LOG_POS选项一起使用,以指示副本从该点重新读取二进制日志。这要求二进制日志在源服务器上仍然存在。

如果您的副本正在复制LOAD DATA语句,则还应该备份该副本用于此目的的目录中存在的任何SQL_LOAD-*文件。副本需要这些文件来恢复任何中断的LOAD DATA操作的复制。该目录的位置是slave_load_tmpdir系统变量的值。如果未使用该变量集启动服务器,则目录位置是tmpdir系统变量的值。