MySQL8.0利用XtraBackup 搭建从库详细过程

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG数据库运维(如安装迁移,性能优化、故障应急处理等)
公众号:老苏畅谈运维

一、背景

如何基于 XtraBackup 搭建从库?

整个过程其实比较简单,无非是备份还原。唯一需要注意的是建立复制时位置点的选择,包括:

在基于位置点的复制中,CHANGE MASTER TO 语句中 MASTER_LOG_FILE 和 MASTER_LOG_POS 的选择。

在GTID 复制中,在执行CHANGE MASTER TO 命令之前,必须首先设置 GTID_PURGED。

在 MySQL 8.0 中,得益于performance_schema.log_status 的引入( 注意,不是备份锁 ),XtraBackup 8.0 在备份的过程中不再加全局读锁。

而备份集对应的位置点信息,是 XtraBackup 8.0 在备份结束时查询performance_schema.log_status 获取的,包括 GTID 和 Binlog 的位置点。

理论上,备份集里保存的 GTID 和 Binlog 位置点,指向的应该是同一个事务。

但在 XtraBackup 8.0 中,却并非如此。

由此带来的问题是,在 GTID 复制中,如果我们还是按照 MySQL 5.6,5.7( 对应 XtraBackup 2.4 )中的方法来搭建从库,大概率会导致主从数据不一致,甚至主从复制中断。

那么,在 XtraBackup 8.0 中,我们又该如何搭建从库呢,下面将为您详细介绍。

二、XtraBackup搭建从库

以下是测试环境信息。

在这里插入图片描述

下面我们看看具体的搭建步骤。

2.1主库上创建复制账号

mysql>create user ‘repl’@‘%’ identified by ‘repl123’;

QueryOK, 0 rows affected (0.01 sec)

mysql>grant replication slave on . TO ‘repl’@‘%’;

QueryOK, 0 rows affected (0.00 sec)

2.2对主库进行备份

在 10.0.0.118 上执行备份命令。

#xtrabackup --user=backup_user --password=backup_pass --socket=/data/mysql/3306/data/mysql.sock --backup --parallel=10 --slave-info --target-dir=/data/backup/full

2.3将备份文件传输到从库上

#scp -r /data/backup/full/* root@10.0.0.195:/data/backup/full

2.4从库上准备好 MySQL 安装包及参数文件

#tar xvf mysql-8.0.27-linux-glibc2.12-x86_64.tar.xz -C /usr/local/

#cd /usr/local/

#ln -s mysql-8.0.27-linux-glibc2.12-x86_64 mysql

2.5在从库上进行 Prepare 和恢复

#xtrabackup --prepare --target-dir=/data/backup/full

#xtrabackup --defaults-file=/etc/my.cnf --copy-back --parallel=10 --target-dir=/data/backup/full

###恢复命令中的 /etc/my.cnf 是从库的配置文件。
其中,第 2,3,5 步可以简化为下面这两条命令。

#xtrabackup \

–user=backup_user–password=backup_pass --socket=/data/mysql/3306/data/mysql.sock \

–backup–stream=xbstream --slave-info --parallel=10 | lz4 | \

sshmysql@10.0.0.195 ‘cat - | lz4 -d | xbstream -p10 -x -C /data/mysql/3306/data/’

#xtrabackup --prepare --target-dir=/data/mysql/3306/data/
第一条命令是线上搭建从库时的一条常用命令,它将流式备份、管道结合在一起,具有以下优点:

边备份,边解压。相对于备份、传输、再解压,花费的时间更短。

备份集是直接解压到从库服务器,并不会保存到本地。这样,对于主库服务器,一可减少磁盘空间,二可减小磁盘 IO 压力。

/data/mysql/3306/data/ 是从库的数据目录,在恢复时,无需 --copy-back,直接 Prepare 即可。

2.6启动实例

#chown -R mysql.mysql /data/mysql/3306/data/

#/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &
很多人有个误区,认为搭建从库,需要提前创建个空白实例。对于逻辑备份确实如此,但对于物理备份,则无此必要,直接使用 mysqld_safe 启动还原后的备份文件即可。

2.7建立复制

这里需要区分两种场景:GTID 复制和基于位置点的复制。

首先查看备份集中的xtrabackup_binlog_info 文件的内容。

#cat xtrabackup_binlog_info

mysql-bin.000002882880068 2cbdc21a-db11-11ec-83bf-020017003dc4:1-223148

如果 xtrabackup_binlog_info 中存在 GTID 信息,则代表备份实例开启了 GTID,这个时候就需要建立 GTID 复制。

2.7.1GTID 复制

对于 GTID 复制,在建立复制前,必须首先设置 GTID_PURGED。

设置 GTID_PURGED 时,注意备份实例的版本。

在 MySQL 8.0 中,无需设置 GTID_PURGED。
至于为什么不用设置,后面会有详细介绍。这里,大家记住这个结论就可以了。

设置完 GTID_PURGED,接下来执行 CHANGE MASTER TO 命令。
CHANGE MASTER TO
MASTER_HOST=‘10.0.0.118’,
MASTER_USER=‘repl’,
MASTER_PASSWORD=‘repl123’,
MASTER_PORT=3306,
MASTER_AUTO_POSITION = 1;
对于 GTID 复制,需将 MASTER_AUTO_POSITION 设置为 1。
在 MySQL 8.0 中,CHANGE MASTER TO 语句中还需添加 GET_MASTER_PUBLIC_KEY = 1。

2.7.2基于位置点的复制

如果 xtrabackup_binlog_info 没有 GTID 信息,则代表备份实例没有开启 GTID,这个时候就无需设置 GTID_PURGED,直接执行 CHANGE MASTER TO 命令即可。
CHANGE MASTER TO
MASTER_HOST=‘10.0.0.118’,
MASTER_USER=‘repl’,
MASTER_PASSWORD=‘repl123’,
MASTER_PORT=3306,
MASTER_LOG_FILE=‘mysql-bin.000002’,
MASTER_LOG_POS=882880068;
CHANGE MASTER TO 语句中的 MASTER_LOG_FILE 和 MASTER_LOG_POS 的值分别取自 xtrabackup_binlog_info 中的 filename 和 position。

2.8开启复制

mysql>start slave;

2.9检查主从复制是否正常

mysql>show slave status\G

Slave_IO_Running 和Slave_SQL_Running 均为 Yes 代表复制正常。

以上就是使用 XtraBackup 搭建从库的基本步骤。

请添加图片描述

  • 15
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老苏畅谈运维

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值