# MySQL双主模式

# 准备工作

备份需要安装 Percona-XtraBackup,如果没有安装需要下载并安装

# 下载Percona-XtraBackup

mysql 5.7版本

wget https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.11/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.11-1.el7.x86_64.rpm
1

mysql 8.0版本

wget https://downloads.percona.com/downloads/Percona-XtraBackup-LATEST/Percona-XtraBackup-8.0.27-19/binary/redhat/7/x86_64/percona-xtrabackup-80-8.0.27-19.1.el7.x86_64.rpm
1

# 安装 Percona-XtraBackup

mysql 5.7版本

rpm -ivh percona-xtrabackup-24-2.4.24-1.el7.x86_64.rpm
1

mysql 8.0版本

rpm -ivh percona-xtrabackup-80-8.0.27-19.1.el7.x86_64.rpm
1

# 添加从库

  1. 创建从库备份专用用户,提高安全性
mysql> CREATE USER rpl@'10.2.67.48' IDENTIFIED BY '******';
mysql> GRANT REPLICATION SLAVE ON *.* TO rpl@'10.2.67.48';
mysql> flush privileges;
1
2
3
  1. 创建备份文件夹--主库执行
mkdir /data/dbbackup
1
  1. 开始备份数据库--主库执行

mysql 5.7版本

innobackupex --defaults-file=/etc/my.cnf --use-memory=400M --parallel=10 --safe-slave-backup --host=10.81.106.92 --user=root --password=****** --port=3306 --socket=/var/lib/mysql/mysql.sock  /data/dbbackup
1

mysql 8.0版本

xtrabackup --defaults-file=/etc/my.cnf --backup --use-memory=400M --parallel=10 --safe-slave-backup --host=10.83.228.63 --user=root --password='******' --port=3306 --socket=/var/lib/mysql/mysql.sock  --target-dir=/data/dbbackup/`date +%Y-%m-%d_%H-%M-%S`
1

4.记录备份文件中的偏移量,做主从同步时会用到--主库执行

more /data/dbbackup/2022-02-24_16-50-27/xtrabackup_info
1
uuid = 60b339a4-954f-11ec-b5b3-0cda411d8004
name = 
tool_name = innobackupex
tool_command = --defaults-file=/etc/my.cnf mysql --use-memory=400M --parallel=10 --safe-slave-backup --host=10.81.106.92 --user=root --password=... --port=3306 --socket=/
var/lib/mysql/mysql.sock /data/dbbackup/
tool_version = 2.4.11
ibbackup_version = 2.4.11
server_version = 5.7.37-log
start_time = 2022-02-24 16:50:27
end_time = 2022-02-24 16:54:29
lock_time = 0
binlog_pos = filename 'bin-log.001428', position '7718862'
innodb_from_lsn = 0
innodb_to_lsn = 854176197035
partial = N
incremental = N
format = file
compact = N
compressed = N
encrypted = N
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

5.传送到备份服务器--主库执行

scp -r -P 60022 2022-02-24_16-50-27/ admin.hq@10.2.67.48:/data/
1

6.准备备份恢复数据--从库执行 mysql 5.7版本

innobackupex --apply-log 2022-02-24_16-50-27/
1

mysql 8.0版本

xtrabackup --prepare --target-dir=2022-02-24_16-50-27/
1

7.从库数据恢复,确保 mysql 的数据目录为空,然后再执行--从库执行

mysql 5.7版本

innobackupex --defaults-file=/etc/my.cnf --copy-back 2022-02-24_16-50-27/
1

mysql 8.0版本

xtrabackup --defaults-file=/etc/my.cnf --copy-back --target-dir=2022-02-24_16-50-27/
1

8.登陆 mysql,配置主从同步--从库执行

CHANGE MASTER TO MASTER_HOST='10.81.106.92', MASTER_PORT=3306, MASTER_USER='root', MASTER_PASSWORD='******', MASTER_LOG_FILE='bin-log.001428',master_log_pos=7718862;

# 注意:MASTER_LOG_FILE 和 master_log_pos 为第3步的偏移量
1
2
3

9.开启同步

start slave;
1

10.查看同步状态

   show slave status\G
1