前言

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

主库操作

开启binlog

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

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

创建用于同步的用户账号

登陆数据库

1
mysql -hlocalhost -uroot -ppassword

创建用户并授权

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

授权

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

导出数据库sql

1
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文件中,如果将master-data设置为2,则会以注释写入到sql文件中。
–single-transaction 在dump过程中保证数据的一致性,这个选项对InnoDB的数据表很有用,且不会锁表。但是这个不能保证MyISAM表和MEMORY表的数据一致性。

从库操作

导入数据库sql

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

配置从库

1
2
3
4
5
6
7
8
9
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;

启动从库

1
2
start slave;
show slave status \G;