为了保证复制文件的完整性,备份 MySQL 副本上的原始数据文件应在副本服务器关闭时进行。如果 MySQL 服务器仍在运行,后台任务可能仍在更新数据库文件,特别是涉及具有后台进程的存储引擎的那些,例如 InnoDB
。使用 InnoDB
,这些问题应在崩溃恢复期间解决,但由于副本服务器可以在备份过程中关闭而不会影响源的执行,因此利用此功能是有意义的。
要关闭服务器并备份文件
关闭副本 MySQL 服务器
$> mysqladmin shutdown
复制数据文件。您可以使用任何合适的复制或存档实用程序,包括 cp、tar 或 WinZip。例如,假设数据目录位于当前目录下,您可以将整个目录归档如下
$> tar cf /tmp/dbbackup.tar ./data
再次启动 MySQL 服务器。在 Unix 下
$> mysqld_safe &
在 Windows 下
C:\> "C:\Program Files\MySQL\MySQL Server 8.4\bin\mysqld"
通常,您应该备份副本 MySQL 服务器的整个数据目录。如果您希望能够恢复数据并作为副本运行(例如,在副本发生故障的情况下),除了数据之外,您还需要有副本的连接元数据存储库和应用程序元数据存储库,以及中继日志文件。这些项目是恢复副本数据后继续复制所必需的。假设表已用于副本的连接元数据存储库和应用程序元数据存储库(参见 第 19.2.4 节,“中继日志和复制元数据存储库”),这是 MySQL 8.4 中的默认设置,这些表将与数据目录一起备份。如果文件已用于存储库(已弃用),您必须单独备份它们。如果将中继日志文件放置在与数据目录不同的位置,则必须单独备份它们。
如果您丢失了中继日志,但仍然拥有 relay-log.info
文件,您可以检查它以确定复制 SQL 线程在源的二进制日志中执行了多远。然后,您可以使用 CHANGE REPLICATION SOURCE TO
与 SOURCE_LOG_FILE
和 SOURCE_LOG_POS
选项一起告诉副本从该点重新读取二进制日志。这要求源服务器上仍然存在二进制日志。
如果您的副本正在复制 LOAD DATA
语句,您还应该备份任何位于副本用于此目的的目录中的 SQL_LOAD-*
文件。副本需要这些文件来继续复制任何中断的 LOAD DATA
操作。此目录的位置是系统变量 replica_load_tmpdir
的值。如果服务器不是使用设置了该变量启动的,则目录位置是 tmpdir
系统变量的值。