PXB初始化从库,需要跳过多个事务如何解决(使用GTID搭建从库)?

本文介绍了如何在PXB环境中,通过GTID来初始化从库并跳过多个事务。首先记录主库在全备前的GTID,然后在从库上进行初始化并跳过指定范围的事务。通过编写脚本批量处理跳过事务,最后启动从库的SQL线程,确保从库与主库同步。

问题:PXB初始化从库,需要跳过多个事务如何解决(使用GTID搭建从库)?

解决方案:

可以批量来跳过事务,关键在于找到最后需要的跳过的事务.
主库使用PXB全备前,记录主库GTID,从库使用PXB恢复后跳过事务到前面记录的GTID

主库
记录PXB全备前GTID

mysql[(none)]> show master status\G;
*************************** 1. row ***************************
             File: lissen-mha-master-bin.000002
         Position: 3534
     Binlog_Do_DB: 
 Binlog_Ignore_DB: mysql,information_schema,performance_schema,sys
Executed_Gtid_Set: e48b6f50-44e3-11ec-910d-0242ac110002:1-15
1 row in set (0.00 sec)

ERROR: 
No query specified

主库全备

xtrabackup -uroot -proot -H192.168.59.3 -P33131 --backup --target-dir=/pxb_bak/full
scp -r * root@192.168.68.132:/pxb_bak/full/

创建相关对象

create database db3 charset utf8mb4;
use db3;
create table t1(id int,name varchar(20)); 
insert into t1 values(1,'a'),(2,'b'),(3,'c');

配置从库并进行初始化

xtrabackup --prepare --target-dir=/pxb_bak/full
systemctl stop systemctl
mv /usr/local/mysql/data /usr/local/mysql/data_bak
xtrabackup --copy-back --target-dir=/pxb_bak/full --datadir=/usr/local/mysql/data
chown -R mysql.mysql /usr/local/mysql/data
systemctl start mysqld

change master to 
master_host = '192.168.68.131',
master_port = 3306,
master_user = 'repl',
master_password = 'repl',
master_auto_position = 1;

计算跳过的GTID

根据前面记录的主库PXB全备前GTID为15
所以要跳过的事务为2-15

批量跳过事务脚本

cat skip_gtid.sh

#!/bin/bash

for i in $(seq 2 15)
do
	mysql -uroot -proot -h192.168.68.132 -P3306 -e "set gtid_next = 'e48b6f50-44e3-11ec-910d-0242ac110002:$i';begin;commit;"
done
mysql -uroot -proot -h192.168.68.132 -P3306 -e "set gtid_next = 'automatic';"

-- mysql -e 中执行多条命令以;分开
mysql -e ";;;"

跳过事务后启动slave sql_thread

               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 573333131
                  Master_UUID: e48b6f50-44e3-11ec-910d-0242ac110002
             Master_Info_File: /usr/local/mysql/data/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: e48b6f50-44e3-11ec-910d-0242ac110002:1-62
            Executed_Gtid_Set: e48b6f50-44e3-11ec-910d-0242ac110002:1-62
                Auto_Position: 1
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Master_TLS_Version: 
1 row in set (0.00 sec)
MySQL 错误代码 8037 通常与 Percona XtraBackup(PXB)相关,尤其是在执行备份或恢复操作时。此错误可能由多种原因引起,包括文件权限问题、不兼容的版本、配置错误或文件损坏等。 ### 常见原因与解决方案 1. **版本不兼容性** Percona XtraBackup 2.4 不支持 MySQL 8.0 或 Percona Server for MySQL 8.0。如果尝试使用旧版本的 PXBMySQL 8.0 进行备份,则可能会遇到错误 8037。请确保使用MySQL 版本兼容的 PXB 版本,例如 Percona XtraBackup 8.0 用于 MySQL 8.0 [^2]。 2. **文件权限问题** PXB 需要对数据目录、日志文件和目标备份目录具有适当的读写权限。如果权限不足,可能会导致备份失败并返回错误 8037。检查运行 PXB 的用户是否具有对 `/var/lib/mysql`、`/var/log/mysql` 和备份目录的访问权限,并确保文件系统权限正确设置 [^4]。 3. **磁盘空间不足** 如果目标备份目录所在的磁盘空间不足,PXB 可能无法完成备份过程,并抛出错误 8037。确保目标目录有足够的可用空间,尤其是在执行全量备份时。 4. **配置文件问题** PXB 依赖 MySQL 的配置文件(如 `my.cnf`)来获取数据目录、日志路径等信息。如果配置文件中指定的路径错误或不存在(例如 `datadir` 或 `log_bin` 路径),PXB 可能会失败。请检查 `my.cnf` 中的关键配置项,如 `datadir`、`innodb_data_home_dir` 和 `innodb_log_group_home_dir` 是否正确 [^4]。 5. **备份目录结构不正确** 如果使用 `--target-dir` 指定的备份目录已经存在并且结构不正确,PXB 可能会报错。确保目标目录为空或不存在,PXB 会在备份过程中自动创建它。 6. **Redo Log 文件问题** 在 MySQL 8.0 中,Redo Log 文件的管理方式发生了变化,PXB 8.0 对其进行了适配。如果使用 PXB 2.4 对 MySQL 8.0 进行操作,可能会因 Redo Log 文件处理不当而引发错误 8037。升级到 PXB 8.0 是解决此问题的关键 [^2]。 ### 示例命令 以下是一个使用 PXB 8.0 对 MySQL 5.7 实例进行备份的示例命令: ```bash xtrabackup --backup --user=root --password='123456' --host=127.0.0.1 --port=3306 --parallel=3 --target-dir=/data/mysqlbackups/ ``` 此命令假设 MySQL 的数据目录和日志文件路径与 `my.cnf` 中的配置一致,并且 PXB 有权限访问这些路径 [^4]。 ### 日志分析建议 在排查错误 8037 时,建议查看 PXB 的输出日志以及 MySQL 的错误日志(如 `log_error` 所指定的文件),以获取更详细的错误信息。日志中通常会包含具体的失败原因,例如文件打开失败、权限拒绝或路径不存在等。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值