MySQL 5.7多源复制单slave 多master

MySQL 5.7版本之前的最常见的复制方式,一主一从或者一主多从的架构MySQL 5.7之后就可以实现多主一从的复制:
  • MySQL 5.7版本之前的最常见的复制方式,一主一从或者一主多从的架构

    attachments-2017-04-Yng8X6ve58f820b02a79


    • MySQL 5.7之后就可以实现多主一从的复制:

    attachments-2017-04-8stP46sb58f820b8b3aa


    多主单从架构好处:


    一、在从服务器进行数据汇总,如果我们的主服务器进行了分库分表的操作,为了实现后期的一些数据统计功能,往往需要把数据汇总在一起再统计。


    二、如果我们想在从服务器时时对主服务器的数据进行备份,在MySQL 5.7之前每一个主服务器都需要一个从服务器,这样很容易造成资源浪费,同时也加大了DBA的维护成本,但MySQL 5.7引入多源复制,可以把多个主服务器的数据同步到一个从服务器进行备份。


    需要注意的地方:


    master复制到slave上不能有同名的库,比如master1上面有test库如果test2上也有test库那么复制到slave那么将会出错。


  • 规划:


    hostname 依据你自己的规划,IP 也已经你的规划,OS 是6.7 我这里因为用的是公司剩余的老机器所以IP 和 hostname 都未做变更,但是网络是互相打通的。

    Hostname

    OS

    IP

    Zabbixdb(master1)

    Centos 6.7 64

    10.86.86.72

    EvunMonitor(master2)

    Centos 6.7 64

    10.86.93.191

    oracle12c(slave)

    Centos 6.7 64

    10.86.87.161

    DB 安装目录

    mysql程序

    /usr/local/mysql

    Mydql 数据文件

    /data/mysqldb


    其他配置:

    • 关闭iptables


    【命令】


    主机zabbixdb:

    [root@ Zabbixdb] /etc/init.d/iptables stop

    [root@ Zabbixdb]chkconfig iptables off

    [root@ Zabbixdb]chkconfig --list|grepiptables

    iptables  0:off1:off2:off3:off4:off5:off6:off

     

    主机EvunMonitor:

    [root@ EvunMonitor] /etc/init.d/iptablesstop

    [root@ EvunMonitor]chkconfig iptables off

    [root@ EvunMonitor]chkconfig --list|grepiptables

    iptables  0:off1:off2:off3:off4:off5:off6:off

     

    主机oracle12c:

    [root@ oracle12c] /etc/init.d/iptables stop

    [root@ oracle12c]chkconfig iptables off

    [root@ oracle12c]chkconfig --list|grepiptables

    iptables  0:off1:off2:off3:off4:off5:off6:off

     

    • 关闭selinux

    修改/etc/selinux/config


    【命令】

    主机zabbixdb、EvunMonitor、oracle12c

    [root@ Zabbixdb] sed -i "s/SELINUX=enforcing/SELINUX=disabled/g"/etc/selinux/config

    [root@ EvunMonitor] sed -i"s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

    [root@ oracle12c] sed -i"s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

     

    重启服务器:


    【命令】

    主机zabbixdb、EvunMonitor、oracle12c

    [root@ Zabbixdb] reboot

    [root@ EvunMonitor]reboot

    [root@ oracle12c] reboot


    安装MySQL:


    安装文档详细见:mysql 5.7.17源码安装.pdf

    三台机器全部安装好mysql


    修改my.cnf


    【命令】

    [zabbixdb] more /etc/my.cnf

    max_connections=3000

    lower_case_table_names=1

    innodb_buffer_pool_size=24576M

    log-bin=binlog

    server_id=1

    binlog_format=ROW

    sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

    general_log=on

    gtid_mode=ON

    enforce_gtid_consistency = ON

    [EvunMonitor] more /etc/my.cnf

    innodb_buffer_pool_size=8589934592

    max_connections=3000

    sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

    log-bin=binlog

    server_id=2

    binlog_format=ROW

    general_log=on

    gtid_mode=on

    enforce_gtid_consistency = ON

    [oracle12c] more /etc/my.cnf

    sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

    log-bin=binlog

    server_id=3

    binlog_format=ROW

    general_log=on

    gtid_mode=on

    enforce_gtid_consistency= ON

     

    重启mysql server


    【命令】

    [zabbixdb] /etc/init.d/mysqld restart

    [EvunMonitor] /etc/init.d/mysqld restart

    [oracle12c] /etc/init.d/mysqld restart

     

    初始化准备:

    在Zabbixdb(master1) 和EvunMonitor(master2) 上创建数据库模拟生产环境原有数据


    【命令】

    [zabbixdb]mysql -uroot -p

    mysql>create database zabbixdb;

    mysql>use zabbixdb;

    mysql>create table zab(age int);

    mysql>insert into zab values(1);

    [EvunMonitor]mysql -uroot -p

    mysql>create database evunmonitor;

    mysql>use evunmonitor;

    mysql>create table evun(age int);

    mysql>insert into evun values(2);


    在Zabbixdb(master1)和EvunMonitor(master2)上导出我们刚才创建的数据库要拿发送到slave上去初始化数据。(这里使用mysqldump 是因为数据量少如果是几十G 几百G的化那么使用xtrabackup 或者mysqlEB 更可行)


    【命令】

    [zabbixdb] mysqldump -uroot -ppassword --master-data=2 --single-transaction--databases  --add-drop-database  zabbixdb >zabbixdb.sql

    [zabbixdb] scp zabbixdb.sql root@10.86.87.161:/opt

    [EvunMonitor] mysqldump -uroot -ppassword --master-data=2 --single-transaction--databases  --add-drop-database  evunmonitor >evunmonitor.sql

    [EvunMonitor] scp evunmonitor.sql root@10.86.87.161:/opt


    搭建主从结构:


    创建复制账号:


    【命令】

    [zabbixdb] grant replicationslave on *.* to 'repl'@'10.86.87.161' identified by 'repl';

    [EvunMonitor] grant replicationslave on *.* to 'repl'@'10.86.87.161' identified by 'repl';


    导入刚才备份数据入slave库:


    在导入前先修改MySQL存储master-info和relay-info的方式,即从文件存储改为表存储,在my.cnf里添加以下选项:


    master_info_repository=TABLE

    relay_log_info_repository=TABLE

    [oracle12c] more /etc/my.cnf

    sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

    log-bin=binlog

    server_id=3

    binlog_format=ROW

    general_log=on

    gtid_mode=on

    enforce_gtid_consistency= ON

    master_info_repository=TABLE

    relay_log_info_repository=TABLE


    【命令】

    [oracle12c] mysql -uroot-ppassword <zabbixdb.sql;

    [oracle12c]mysql -uroot -ppassword

    mysql>reset master #没有这一步后面再导入会出错因为启用了GTID 模式。

    [oracle12c] mysql -uroot-ppassword <evunmonitor.sql

     

    分别找出zabbixdb和EvunMonitor的binlog位置和Pos位置:


    【命令】

    [root@oracle12c 15:51:24]$catzabbixdb.sql |grep " CHANGE MASTER"

    -- CHANGE MASTER TOMASTER_LOG_FILE='binlog.000003', MASTER_LOG_POS=759;

    [root@oracle12c 15:51:32]$catevunmonitor.sql |grep " CHANGE MASTER"

    -- CHANGE MASTER TOMASTER_LOG_FILE='binlog.000003', MASTER_LOG_POS=782;

     

    同步操作:


    登录Slave进行同步操作,分别change master到两台Master服务器,后面以FOR CHANNEL 'CHANNEL_NAME'区分。


    【命令】

    [root@oracle12c 15:51:32]mysql -uroot -ppassword

    mysql> CHANGE MASTER TOMASTER_HOST='10.86.86.72', MASTER_USER='repl',MASTER_PASSWORD='repl',MASTER_LOG_FILE='binlog.000003',MASTER_LOG_POS=759  FOR CHANNEL 'zabbixdb';


    Query OK, 0 rows affected, 2 warnings(0.05 sec)

    mysql> CHANGE MASTER TOMASTER_HOST='10.86.93.191',MASTER_USER='repl',MASTER_PASSWORD='repl',MASTER_LOG_FILE='binlog.000003',MASTER_LOG_POS=782  FOR CHANNEL 'EvunMonitor';

    QueryOK, 0 rows affected, 2 warnings (0.06 sec)


    启动复制进程有两种方式:直接startslave 和启动单个复制源的方式


    【命令】

    [root@oracle12c 16:01:20]mysql -uroot -ppassword

    mysql>start slave;


    单个启动

    mysql>start slave forchannel  'zabbixdb';

    mysql>start slave forchannel  'EvunMonitor';

     

    查看状态:


    正常启动后,可以查看同步的状态:

    执行SHOW SLAVE STATUS FORCHANNEL 'zabbixdb'\G

    attachments-2017-04-fc3x1oku58f8213340ee


    执行SHOW SLAVE STATUS FORCHANNEL 'EvunMonitor'\G

    attachments-2017-04-nS1huTR658f82189ab7b

    验证:


    【命令】

    [zabbixdb@root]#mysql -uroot -ppassword

    mysql> use zabbixdb;

    mysql> insert into zab values(3); 

    Query OK, 1 row affected (0.07 sec)

    mysql> commit;

    Query OK, 0 rows affected (0.00 sec)

     

    [root@EvunMonitor ~]# mysql -uroot -ppassword

    mysql> use evunmonitor;

    mysql> insert into evun values(4);

    Query OK, 1 row affected (0.02 sec)

    mysql> commit;

    Query OK, 0 rows affected (0.00 sec)

     

    到slave 上去验证:


    Database changed

    mysql> select * from zabbixdb.zab;

    +------+

    | age  |

    +------+

    |    1 |

    |    3 |

    +------+

    2 rows in set (0.00 sec)

    mysql> select * from evunmonitor.evun;

    +------+

    | age  |

    +------+

    |    2 |

    |    4 |

    +------+

    2 rows in set (0.00 sec)



  • 发表于 2017-04-20 10:45
  • 阅读 ( 49 )

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
石天
石天

437 篇文章

作家榜 »

  1. shitian 662 文章
  2. 石天 437 文章
  3. 每天惠23 33 文章
  4. 小A 29 文章