Percona XtraBackup 备份还原 MySQL Gr
使用 Percona XtraBackup 备份 MySQL Group Replication(组复制) 需要确保备份过程与组复制架构兼容,同时保持数据的一致性。以下是使用 XtraBackup 备份 MySQL 组复制的具体步骤
准备工作:
确保组复制状态稳定
在开始备份之前,确认组复制集群的状态是稳定的,没有节点处于恢复或引导状态。
使用以下 SQL 查询检查组复制状态:
SHOW STATUS LIKE 'group_replication%';
备份步骤:
- 执行备份
在选定的节点上运行以下命令开始备份:
xtrabackup --backup --target-dir=/path/to/backup/ --user=backup_user --password=backup_password
参数说明:
--backup:表示执行备份操作。
--target-dir:指定备份文件存储目录。
--user 和 --password:用于备份的 MySQL 用户及密码。
- 准备备份文件
备份完成后,需对备份文件进行预处理,以确保备份数据的一致性。运行以下命令:
xtrabackup --prepare --target-dir=/path/to/backup/
此步骤会将未完成的事务应用到备份数据中,确保其与数据库一致。
-
验证备份
在备份完成后,检查备份目录是否包含完整的数据文件(如 .ibd 文件和 .cnf 文件),并确认无报错。 -
备份文件存储
将备份文件安全存储到远程存储设备、云存储或其他备份目标位置,以确保备份的可靠性。
还原步骤
- 选择一个备份文件作为基准
使用之前通过 XtraBackup 创建的完整备份(从一个节点上获得),作为恢复集群数据的基准。这份备份应包括所有需要的数据库文件,并经过预处理(--prepare 步骤)。
- 停止所有节点的 MySQL 服务
在恢复操作之前,停止集群中所有节点上的 MySQL 服务,以确保没有节点对数据库执行写操作。
在每个节点上运行以下命令:
sudo systemctl stop mysql
- 恢复备份到第一个节点
从备份中恢复数据到第一个节点(通常是主节点或一个预定的节点):
(1) 清空数据目录
清空目标节点的 MySQL 数据目录(通常位于 /var/lib/mysql/),以确保没有遗留的数据:
sudo rm -rf /var/lib/mysql/*
(2) 恢复备份文件
将备份文件复制到目标节点的 MySQL 数据目录:
sudo cp -r /path/to/backup/* /var/lib/mysql/
(3) 修复权限
确保 MySQL 数据目录和文件的权限正确:
sudo chown -R mysql:mysql /var/lib/mysql/
(4) 启动 MySQL 服务
启动 MySQL 服务以使第一个节点恢复运行:
sudo systemctl start mysql
(5) 验证恢复
登录到 MySQL,检查数据是否已经正确恢复:
mysql -u root -p
SHOW DATABASES;
- 配置第一个节点为单独运行模式
为了确保后续节点恢复时的集群数据一致性,暂时配置第一个节点为单独运行模式:
(1) 禁用组复制
登录到第一个节点的 MySQL,执行以下 SQL 命令以禁用组复制:
STOP GROUP_REPLICATION;
(2) 确保节点可以单独启动
编辑第一个节点的 MySQL 配置文件(如 /etc/mysql/my.cnf 或 /etc/my.cnf),确保没有自动启动组复制的配置。注释或移除以下配置项:
group_replication_start_on_boot = ON
- 恢复其他节点
为集群的每个从节点依次执行以下步骤:
(1) 停止 MySQL 服务并清空数据目录
sudo systemctl stop mysql
sudo rm -rf /var/lib/mysql/*
(2) 恢复备份文件
将备份文件复制到目标节点的 MySQL 数据目录:
sudo cp -r /path/to/backup/* /var/lib/mysql/
(3) 修复权限
sudo chown -R mysql:mysql /var/lib/mysql/
(4) 启动 MySQL 服务
sudo systemctl start mysql
(5) 验证数据一致性
登录到 MySQL 检查数据是否正确恢复:
mysql -u root -p
SHOW DATABASES;
- 重新配置并启动组复制
在所有节点完成恢复后,重新启动组复制以恢复集群的完整功能:
(1) 启用第一个节点的组复制
在第一个节点执行以下命令:
SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group=OFF;
(2) 启用其他节点的组复制
在其他节点执行以下命令,让它们加入集群:
START GROUP_REPLICATION;
- 验证集群状态
在任意一个节点上执行以下命令,检查所有节点的状态是否正常:
SELECT * FROM performance_schema.replication_group_members;
您应该看到所有节点都处于 ONLINE 状态,且 MEMBER_ROLE 为 PRIMARY 或 SECONDARY。
注意事项:
组复制恢复中的一致性
确保备份的节点与整个集群的数据一致。
如果集群使用了 GTID(全局事务 ID),所有节点的 GTID 必须保持一致。
避免自动启动组复制
在恢复过程中,防止节点在数据恢复时自动启动组复制,以避免引发不一致或冲突。
测试备份和恢复流程
在非生产环境中测试备份和恢复过程,确保操作流程无误。
负载分配
恢复后,根据业务需求分配主节点和从节点的角色,确保高可用性。