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_FILE
和MASTER_LOG_POS
选项一起使用,以指示副本从该点重新读取二进制日志。这要求二进制日志在源服务器上仍然存在。
如果您的副本正在复制LOAD DATA语句,则还应该备份该副本用于此目的的目录中存在的任何SQL_LOAD-*
文件。副本需要这些文件来恢复任何中断的LOAD DATA操作的复制。该目录的位置是slave_load_tmpdir系统变量的值。如果未使用该变量集启动服务器,则目录位置是tmpdir系统变量的值。