目录

优雅地给正在运行的MySQL添加从库

前言

之前写过一篇MySQL主从同步配置给MySQL配置从库,在主库在使用的情况下,需要将主库进行禁止写入操作,然后再导出导入,如果库比较大的话, 会对业务造成一定的影响。这篇文章主要介绍如何不停机进行添加从库。

主库操作

开启binlog

[mysqld]
log_bin=mysql-bin
server-id=1

这里注意server-id主从不能一样, 配置完成重启mysql

创建用于同步的用户账号

登陆数据库

mysql -hlocalhost -uroot -ppassword

创建用户并授权

CREATE USER 'repl'@'%' IDENTIFIED BY '123456';

授权

GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
flush privileges;

导出数据库sql

mysqldump -uroot -ppassword -hlocalhost -P3306 --master-data=2 --single-transaction --skip-tz-utc --all-databases > /tmp/db.sql

–master-data 默认值为1,不会将CHANGE MASTER TO 语句写入到sql文件中,如果想要将CHANGE MASTER TO 语句写入到sql文件中,需要将master-data设置为2, 这个选项要求 RELOAD 权限,并且二进制文件必须打开。 –single-transaction 在dump过程中保证数据的一致性,这个选项对InnoDB的数据表很有用,且不会锁表。但是这个不能保证MyISAM表和MEMORY表的数据一致性。

从库操作

导入数据库sql

mysql -uroot -ppassword -hlocalhost -P3306 < /tmp/db.sql

配置从库

CHANGE MASTER TO
  MASTER_HOST='10.91.15.131',
  MASTER_USER='repl',
  MASTER_PASSWORD='123456',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='binlog.000008',              -- 这两个选项在 head -n 20 db.sql 就能看到
  MASTER_LOG_POS=22950585,                      -- 这两个选项在 head -n 20 db.sql 就能看到
  MASTER_HEARTBEAT_PERIOD=180,
  MASTER_CONNECT_RETRY=10;

启动从库

start slave;
show slave status \G;