您的位置:首页 > 数据库 > MySQL

mysql replication 三级串行多、单库主从复制案例

2016-08-16 11:01 267 查看



应用需求说明
read量较大、分散
write为预制或集中

方案场景说明

Master Server:有三个库,分别为a、b、c
二级slave_all:全量slave(剔除mysql,information_schema,performance_schema,test)
三级slave_all : 全量slave(剔除mysql、information_schema、performance_schema、test)
三级slave_a:仅同步a库
三级slave_b:仅同步b库

OS及mysql版本说明
centos 6.5 x64
mysql-5.6.25

开始部署
Master Server
1、修改my.cnf
[mysqld]
log-bin=mysql-bin //启用二进制日志
server-id=1 //服务器ID,需在replication集群中保持唯一性

2、创建用于复制的账号 (用户需要对所有库表有权限,不然创建不了,即*.*)
GRANT REPLICATION SLAVE ON *.* to 'repl_all'@'%' identified by 'q123456';
3、导出master库快照(可以根据全量主从和选库主从进行分别导出,此导出方式不用锁库)
如果有MYISAM或又有MYISAM又有INNODB的话就在服务使用如下命令导出快照
mysqldump -uroot -p --lock-tables --events --triggers --routines --flush-logs --master-data=2 --all-databases > db.sql
如果只用INNODB用如下命令导出快照
mysqldump -uroot -p --single-transaction --events --triggers --routines --flush-logs --master-data=2 --database a b c > abc.sql
*这里需要注意几个参数的使用:
--single-transaction 这个参数只对innodb适用。
--databases 后面跟除mysql以后的其他所有数据库的库名,我这里只有一个test库。
--master-data 参数会记录导出快照时候的mysql二进制日志位置(不用锁库可以)。

二级slave_all(192.168.0.134)

1、修改my.cnf

[mysqld]
log-bin=mysql-bin //启用二进制日志
server-id=21 //服务器ID,需在replication集群中保持唯一性

replicate-wild-ignore-table = mysql,information_schema,performance_schema,test //不去复制指定库
log_slave_updates = 1 //将来自relay日志在binlog重新记录,以便三级从库replication
2、导入从主库导出的的快照
mysql>source abc.sql;
3、查看主库快照binlog文件名称及pos偏移量
#grep -i "change master" abc.sql
[root@localhost source]# grep -i "change master" all.sql
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000011', MASTER_LOG_POS=120;
4、与主库建立连接关系
mysql> stop slave;
mysql>CHANGE MASTER TO MASTER_HOST='192.168.0.133',MASTER_USER='repl_all',MASTER_PASSWORD='a123456',MASTER_LOG_FILE='mysql-bin.000011', MASTER_LOG_POS=120;
mysql>start slave;
mysql>show slave status\G
5、为各slave三级从库创建slave账号
GRANT REPLICATION SLAVE ON *.* to 'repl_three_all'@'%' identified by 'q123456';
6、分别导出abc三库快照、a库快照、b库快照,发送至各三级slave服务器
mysqldump
-uroot -p --single-transaction --events --triggers --routines
--flush-logs --master-data=2 --database a b c > abc.sql
mysqldump
-uroot -p --single-transaction --events --triggers --routines
--flush-logs --master-data=2 --database a > a.sql
mysqldump
-uroot -p --single-transaction --events --triggers --routines
--flush-logs --master-data=2 --database b > a.sql

三级slave_all配置(192.168.0.136)
1、修改my.cnf

[mysqld]
log-bin=mysql-bin //启用二进制日志
server-id=31 //服务器ID,需在replication集群中保持唯一性

replicate-wild-ignore-table = mysql,information_schema,performance_schema,test //不去复制指定库
2、导入从主库导出的的快照
mysql>source abc.sql;
3、查看主库快照binlog文件名称及pos偏移量
#grep -i "change master" abc.sql
[root@localhost source]# grep -i "change master" abc.sql
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000011', MASTER_LOG_POS=120;
4、与主库建立连接关系
mysql> stop slave;
mysql>CHANGE MASTER TO MASTER_HOST='192.168.0.134',MASTER_USER='repl_three_all',MASTER_PASSWORD='a123456',MASTER_LOG_FILE='mysql-bin.000011', MASTER_LOG_POS=120;
mysql>start slave;
mysql>show slave status\G

三级slave_a 配置(192.168.0.137)(只复制a库)

1、修改my.cnf

[mysqld]
log-bin=mysql-bin //启用二进制日志
server-id=32 //服务器ID,需在replication集群中保持唯一性

replicate-wild-do-table = a.% //只复制指定库,如复制指定多库,逗号隔开即可,如:a.%,b.%
2、导入从主库导出的的快照
mysql>source abc.sql;
3、查看主库快照binlog文件名称及pos偏移量
#grep -i "change master" a.sql
[root@localhost source]# grep -i "change master" a.sql
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000011', MASTER_LOG_POS=120;
4、与主库建立连接关系
mysql> stop slave;
mysql>CHANGE MASTER TO MASTER_HOST='192.168.0.134',MASTER_USER='repl_three_all',MASTER_PASSWORD='a123456',MASTER_LOG_FILE='mysql-bin.000011', MASTER_LOG_POS=120;
mysql>start slave;
mysql>show slave status\G

三级slave_b 配置(192.168.0.138)(只复制b库)

1、修改my.cnf

[mysqld]
log-bin=mysql-bin //启用二进制日志
server-id=32 //服务器ID,需在replication集群中保持唯一性

replicate-wild-do-table = b.% //只复制指定库,如复制指定多库,逗号隔开即可,如:a.%,b.%
2、导入从主库导出的的快照
mysql>source ab.sql;
3、查看主库快照binlog文件名称及pos偏移量
#grep -i "change master" b.sql
[root@localhost source]# grep -i "change master" b.sql
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000011', MASTER_LOG_POS=120;
4、与主库建立连接关系
mysql> stop slave;
mysql>CHANGE MASTER TO MASTER_HOST='192.168.0.134',MASTER_USER='repl_three_all',MASTER_PASSWORD='a123456',MASTER_LOG_FILE='mysql-bin.000011', MASTER_LOG_POS=120;
mysql>start slave;
mysql>show slave status\G

里面有些关键点请注意:
1、replicate-wild-do-table 和replicate-wild-ignore-table ,具体因素可以自己百度和google一下,在此不再转帖
2、快照导出,mysqldump
-uroot -p --single-transaction --events --triggers --routines
--flush-logs --master-data=2 --database b > a.sql,可以查一下 ‘--master-data=2 ’这个参数,目前观测在导出时是不用锁库锁表的,如有新进展发现,请帮我纠错,谢谢!

联系方式:
QQ/微信:346558044
转载无需注明出处,如有错误及时联系我纠正就好!!!

王洪岩 2016/8/16
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  三级 mysql replication