mysql通过xbk备份快速进行大数据量搭建gtid主从

mysql通过xbk备份进行搭建gtid主从

注意点:新的从配置要跟主基本上相同,除了server_id,

master:192.128.232.130
slave:192.128.232.127

1:master操作,操作复制用户,如果存在,就无需创建。
(root@localhostostname) [(none)] CREATE USER 'repls'@'192.128.232.%' IDENTIFIED BY 'repl123456';
Query OK, 0 rows affected (1.82 sec)

(root@localhostostname) [(none)] GRANT REPLICATION SLAVE ON *.* TO 'repls'@'192.128.232.%';
Query OK, 0 rows affected (0.06 sec)

2.master使用xbk全量备份,如果用增量,那就先全部合并后,再使用,这里不详细了,以最新的全量备份为准。--no-timestamp 自定义备份名称。

[root@mysql-130 full]# innobackupex --user=root --password=1111aaA_ -S /tmp/mysql.sock  --no-timestamp /tmp/full
210818 15:30:35 [00]        ...done
xtrabackup: Transaction log of lsn (4051579) to (4051588) was copied.
210818 15:30:35 completed OK!    #表示备份ok


3.master把备份文件拷贝到slave上
[root@mysql-130 tmp]# tar -zcf full.tar.gz full
[root@mysql-130 backup]# scp full.tar.gz 192.128.232.127:/tmp/

4.slave进行解压,
[root@keepalived-127 tmp]# mkdir /backup
[root@keepalived-127 tmp]# cp full.tar.gz /backup/
[root@keepalived-127 tmp]# cd /backup/
[root@keepalived-127 backup]# tar -zxf full.tar.gz
[root@keepalived-127 backup]# cd full
[root@keepalived-127 full]# ll
总用量 12340
-rw-r----- 1 root root      426 8月  18 15:30 backup-my.cnf
drwxr-x--- 2 root root       48 8月  18 15:30 haha
-rw-r----- 1 root root      321 8月  18 15:30 ib_buffer_pool
-rw-r----- 1 root root 12582912 8月  18 15:30 ibdata1
drwxr-x--- 2 root root       20 8月  18 15:30 jiji
drwxr-x--- 2 root root     4096 8月  18 15:30 mysql
drwxr-x--- 2 root root     8192 8月  18 15:30 performance_schema
drwxr-x--- 2 root root     8192 8月  18 15:30 sys
drwxr-x--- 2 root root       48 8月  18 15:30 world
-rw-r----- 1 root root      114 8月  18 15:30 xtrabackup_binlog_info
-rw-r----- 1 root root      113 8月  18 15:30 xtrabackup_checkpoints
-rw-r----- 1 root root      606 8月  18 15:30 xtrabackup_info
-rw-r----- 1 root root     2560 8月  18 15:30 xtrabackup_logfile

#上面文件进行简单详解
xtrabackup_binlog_info      # 能帮助我们确认binlog的起点
xtrabackup_checkpoints      # 通过lsn号确认操作是否正常
xtrabackup_info          #所有备份信息,一般不怎么关注这个
xtrabackup_logfile        # 记录备份过程中的redo和undo文件,不用关注,也看不懂
xtrabackup_binlog_pos_innodb      # 记录内容相比第1个少了gtid号


解析:
xtrabackup_binlog_info :(备份时刻的binlog位置)
[root@keepalived-127 mysql_data]# cat xtrabackup_binlog_info
mysql-binlog.000001     858     d3244a79-f8c1-11eb-b1d2-000c29f53b87:1-2
记录的是备份时刻,binlog的文件名字和当时的结束的position,可以用来作为截取binlog时的起点。

[root@keepalived-127 mysql_data]# cat xtrabackup_checkpoints
backup_type = full-backuped
from_lsn = 0            上次所到达的LSN号(对于全备就是从0开始,对于增量备份显示的是上次结束的last_lsn号减去9)
to_lsn = 160683027      备份开始时间(ckpt)点数据页的LSN    
last_lsn = 160683036    备份结束后,redo日志最终的LSN, 如果to和last数值差9个,可认为是一致的,这9个在5.7中是预留的,当做增量备份时会接27来进行
compact = 0
recover_binlog_info = 0
(1)备份时刻,立即将已经commit过的,内存中的数据页刷新到磁盘(CKPT).开始备份数据,数据文件的LSN会停留在to_lsn位置。
(2)备份时刻有可能会有其他的数据写入,已备走的数据文件就不会再发生变化了。
(3)在备份过程中,备份软件会一直监控着redo的undo,如果一旦有变化会将日志也一并备走,并记录LSN到last_lsn。
从to_lsn  ----》last_lsn 就是,备份过程中产生的数据变化.


5.slave准备备份(Prepared)
将redo进行重做,已提交的写到数据文件,未提交的使用undo回滚掉。模拟了CSR的过程
[root@keepalived-127 backup]# innobackupex --apply-log /backup/full
InnoDB: Shutdown completed; log sequence number 4052008
210818 15:56:33 completed OK!

6.slave恢复备份
前提:
1、被恢复的目录是空
2、被恢复的数据库的实例是关闭

#停止mysql服务
[root@keepalived-127 backup]# /etc/init.d/mysqld stop
Shutting down MySQL.... SUCCESS!

#移除mysql的数据目录
[root@keepalived-127 data]# mv /data/mysql_data /tmp/

#把xbk备份准备好的文件拷贝到/data/mysql_data 这个目录下。
[root@keepalived-127 data]# mv /backup/full /data/mysql_data
[root@keepalived-127 data]# chown -R mysql.mysql /data/mysql_data

#启动slave的mysql服务
[root@keepalived-127 data]# /etc/init.d/mysqld start
Starting MySQL.Logging to '/data/mysql_data/error.log'.
......................... SUCCESS!

#配置gtid主从复制,在从库上将上一步获取到的这些gtid purge掉,因为这些实际上已经执行过了事务id。
[root@keepalived-127 mysql_data]# cat /data/mysql_data/xtrabackup_binlog_info
mysql-binlog.000001     858     d3244a79-f8c1-11eb-b1d2-000c29f53b87:1-2

#重新配置slave
(root@localhostostname) [(none)] stop slave;
Query OK, 0 rows affected (0.00 sec)

(root@localhostostname) [(none)] reset slave;
Query OK, 0 rows affected (0.01 sec)

(root@localhostostname) [(none)] stop slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)

#重新连接master,这里需要注意的是,上面的/data/mysql_data/xtrabackup_binlog_info里面执行过了gtid是1-2这个事务id,因此要slave需要从事务id为3开始拉去master数据,
(root@localhostostname) [(none)] change master to master_host='192.128.232.130',master_user='repls',master_password='repl123456',master_port=3306,master_auto_position=3;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

(root@localhostostname) [(none)] start slave;
Query OK, 0 rows affected (0.05 sec)

(root@localhostostname) [(none)] show slave status\G;

7.重新测试主从复制
#master在haha库里创建一个表

(root@localhostostname) [haha] create table h2 (id int);
Query OK, 0 rows affected (0.20 sec)

#slave查看是否有同步
(root@localhostostname) [(none)] use haha;
Database changed
(root@localhostostname) [haha] show tables;
+----------------+
| Tables_in_haha |
+----------------+
| h1             |
| h2             |
+----------------+
2 rows in set (0.00 sec)