利用Xtrabackup工具在线部署MySQL 8.0主从复制

1.基本信息:
主库:
master主机IP:10.16.2.17
master主机名:mvxl0782
binlog目录:/data/mysql/logs
数据文件目录:/data/mysql/data
版本:8.0.22

从库:
master主机IP:10.16.2.18
master主机名:mvxl0783
binlog目录:/data/mysql/logs
数据文件目录:/data/mysql/data
版本:8.0.22

2.Xtrabackup工具准备
下载并解压到/usr/local下

https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.22-linux-glibc2.12-x86_64.tar.xz
tar -zxvf mysql-8.0.22-linux-glibc2.12-x86_64.tar.xz -C /usr/local/
mv /usr/local/mysql-8.0.22-linux-glibc2.12-x86_64 /usr/local/mysql
groupadd mysql && useradd -r -g -s /bin/nologin mysql mysql
mkdir -p /data/mysql/{logs,data,tmp}
chown -R mysql:mysql /usr/local/mysql

chown -R mysql:mysql /data/mysql/

修改环境变量:
cat >> /etc/profile <<EOF
export PATH=$PATH:/usr/local/mysql/bin

EOF

source /etc/profile

3.slave主机上的准备
slave主机:
groupadd mysql && useradd -r -g -s /bin/nologin mysql mysql
mkdir -p /data/mysql/{logs,data,tmp}

master主机:
scp -r /usr/local/mysql 10.16.2.18:/usr/local
scp -p /data/mysql/my.cnf /data/mysql/

slave主机:
chown -R mysql:mysql /usr/local/mysql
chown -R mysql:mysql /data/mysql/

4.master在线用xtrabackup工具完全备份
主库先建立备份帐号
mysql> create user xbackup@'localhost' identified by 'mysql';
mysql> grant reload,lock tables,replication client,replication slave,super on *.* xbackup@'localhost';

master主机上执行:
mkdir -p /data/backup
chown -R mysql:mysql /data/backup
innobackupex --user=xbackup --password='mysql' --defaults-file=/data/mysql/my.cnf /data/backup/
备份在/data/backup/目录下,用日期命名的目录。

5.将备份集打包传到slave主机上
cd /data/backup/
tar -cxvf 2016-05-17_16-23-34.tar 2016-05-17_16-23-34
gzip 2016-05-17_16-23-34.tar
scp 2016-05-17_16-23-34.tar.gz root@10.16.2.18:/data/backup
cd /data/backup
gzip -d 2016-05-17_16-23-34.tar.gz
tar -zxvf 2016-05-17_16-23-34.tar

tar -zxvif 2016-05-17_16-23-34.tar.gz -C /data/backup/
chown -R mysql:mysql /data/backup

6.全量恢复
准备备份集:
innobackupex --defaults-file=/data/mysql/my.cnf --apply-log /data/backup/2016-05-17_16-23-34
执行恢复:
innobackupex --defaults-file=/data/mysql/my.cnf --copy-back /data/backup/2016-05-17_16-23-34

7.创建复制专用的账号
master上执行:
grant replication slave,replication client on *.* to 'repl'@'10.16.2.%' identified by "mysql";

8.配置slave节点初始化参数文件
配置slave端选项文件
vim /data/mysql/my.cnf
[mysqld]
server_id=183306

9.主库测试数据变化
mysql> create table test.user2 as select * from mysql.user;
mysql> show master statusG
*************************** 1. row ***************************
File: mysql-bin.000069
Position: 5553
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)

在上面做完全量备份时的日志信息如下:
[mysql@mvxl0782 2016-05-17_16-23-34]$ cat xtrabackup_binlog_info
mysql-bin.000069 1819

手工刷新log后,日志信息如下:
mysql> flush logs;
mysql> show master statusG
*************************** 1. row ***************************
File: mysql-bin.000070
Position: 120
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)

10.启动slave MySQL服务
[mysql@mvxl0783 data]$ mysqld --defaults-file=/data/mysql/my.cnf &

11.配置slave复制环境
mysql> change master to master_host='10.16.2.17',master_port=3306,master_user='repl',master_password='mysql',master_log_file='mysql-bin.000069',master_log_pos=1819;
mysql> start slave;

若在slave上在线clone slave:
增加--slave-info和--safe-slave-backup
--slave-info:将master的binary log文件名和偏移位置保存到xtrabackup_slave_info文件中
--safe-slave-backup会暂停slave的sql线程,直到没有打开的临时表的时候开始备份,等备份结束后sql线程会自动启动,目的是保持一致性的复制状态。
innobackupex命令支持--slave-info的参数,指定该参数备份,会产生一个xtrabackup_slave_info文件,文件中就有change master to的语句。

12.验证是否同步
master库:
mysql> show tables;
+--------------------+
| Tables_in_test   |
+--------------------+
| user2        |
+-------------------+
mysql> create test.table zengxuewen as select * from mysql.user;

slave库:
mysql> use test;
mysql> show tables;
+-------------------+
| Tables_in_test  |
+-------------------+
| user2        |
+-------------------+
至止,完成Xtrabackup工具在线部署MySQL 8.0主从复制。

原文地址:https://www.cnblogs.com/OrcinusOrca/p/14765765.html