前言
之前写过一篇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', MASTER_LOG_POS=22950585, MASTER_HEARTBEAT_PERIOD=180, MASTER_CONNECT_RETRY=10;
|
启动从库
1 2
| start slave; show slave status \G;
|