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主从复制简单案例实现
- Mysql中主从复制的原理、配置过程以及实际案例
- mysql主从复制案例
- Mysql主从复制(master-slave)实际操作案例
- 一个mysql主从复制的配置案例
- mysql做主从复制,成功配置案例
- Mysql中主从复制的原理、配置过程以及实际案例
- Mysql主从复制(master-slave)实际操作案例
- MySQL主从复制出错案例一则
- 使用多实例进行主从复制实践案例(一主一从)
- 小贝_mysql主从复制作用以及案例
- 小贝_mysql主从复制作用以及案例
- Mysql主从复制排错案例一
- MySQL主从复制故障案例一
- 实现MySQL主从复制、双主模型的简单案例
- MySQL主从延迟复制实践及生产故障案例恢复实践
- mysql做主从复制配置案例
- 【案例】主从替换之后的复制风暴
- redis主从复制+2种原理图+主从复制通信过程+主从复制案例+设置主从复制通信密码
- Redis研究(十二)—主从复制