wKioL1exuNmiKkXVAABeCxuwGtA518.png

应用需求说明

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