为保证所复制文件的完整性,应在副本服务器关闭时备份 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.0\bin\mysqld"
通常,您应该备份副本 MySQL 服务器的整个数据目录。如果你希望能够恢复数据并作为副本进行操作(例如,在副本发生故障时),除了数据之外,你还需要拥有副本的连接元数据存储库和应用程序元数据存储库,以及中继日志文件。在恢复副本的数据后,需要这些项目来恢复复制。假设表已用于副本的连接元数据存储库和应用程序元数据存储库(请参阅 第 17.2.4 节,“中继日志和复制元数据存储库”),这是 MySQL 8.0 中的默认设置,这些表与数据目录一起备份。如果文件已用于已弃用的存储库,则必须单独备份这些文件。如果中继日志文件放置在与数据目录不同的位置,则必须单独备份它们。
如果您丢失了中继日志但仍然有该
relay-log.info
文件,您可以检查它以确定复制 SQL 线程在源的二进制日志中执行了多远。然后你可以使用
CHANGE REPLICATION SOURCE TO
语句(来自 MySQL 8.0.23)或CHANGE
MASTER TO
语句(MySQL 8.0.23 之前)与
SOURCE_LOG_FILE
|
MASTER_LOG_FILE
和
SOURCE_LOG_POS
|
MASTER_LOG_POS
告诉副本从那个点重新读取二进制日志的选项。这要求二进制日志仍然存在于源服务器上。
如果您的副本正在复制LOAD
DATA
语句,您还应该备份
SQL_LOAD-*
存在于副本用于此目的的目录中的所有文件。副本需要这些文件来恢复任何中断
LOAD DATA
操作的复制。该目录的位置是系统变量的值
replica_load_tmpdir
(从 MySQL 8.0.26 开始)或slave_load_tmpdir
(在 MySQL 8.0.26 之前)。如果服务器不是使用该变量集启动的,则目录位置是
tmpdir
系统变量的值。