MySQL · 在线配置主从

场景

常见有以下两种场景:

  • 主从复制中断,主 binlog 缺失,需要重新搭建从库
  • 单主模式,升级为主从模式

方案

主从同版本场景,使用 Percona XtraBackup 工具不停机不锁表在线搭建从库

操作步骤

1
$ innobackupex --defaults-file=/etc/my.cnf --user='xx' --password='xx' --no-timestamp /data/backup

Tips:备份目录要依据服务器磁盘分配,否则会占满磁盘,影响业务。

  • 将备份传输至从库
1
$ scp -r /data/backup/* root@x.x.x.x:/data/backup
  • 恢复备份至从库数据目录
1
2
3
4
5
$ mysqladmin -uroot -p'xx' shutdown
$ innobackupex --defaults-file=/etc/my.cnf --apply-log /data/backup
$ mv mysql mysql_bak
$ mkdir mysql
$ innobackupex --defaults-file=/etc/my.cnf --copy-back /data/backup
  • 启动 mysqld
1
2
$ chown -R mysql:mysql mysql
$ /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql >/dev/null &
  • 配置主从复制关系
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 获取Master binlog位置
$ cat xtrabackup_binlog_info
mysql-binlog.000297 900834433

# 配置复制
CHANGE MASTER TO
MASTER_HOST='x.x.x.x',
MASTER_USER='repl',
MASTER_PASSWORD='Changeme_123',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000297',
MASTER_LOG_POS=900834433,
MASTER_CONNECT_RETRY=10;

# 启动同步
mysql> start slave;
  • 检查是否配置成功
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.133.7.5
Master_User: repl
Master_Port: 3306
Connect_Retry: 10
Master_Log_File: mysql-bin.000271
Read_Master_Log_Pos: 945378251
Relay_Log_File: mysqld-relay-bin.000002
Relay_Log_Pos: 230109
Relay_Master_Log_File: mysql-bin.000271
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
.....

实践案例

信息 说明
项目 COSMOHCE
数据库版本 MySQL 5.7.23
数据量 62 GB
传输速度 100 M/s
操作 耗时
安装 Xtrabackup 10 min
备份 15 min
传输 10 min
恢复 8 min
其他 30 min