开发者社区> 技术小阿哥> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Mysql多源复制

简介:
+关注继续查看

1、概述

以下是多源复制的架构图(来自2015 OOW的ppt)

wKioL1Y5WLizwiFFAAD-8DsZbgQ616.jpg


本文档实验的架构图:

wKiom1Y5WI3x6hf0AABy9fTQ3OU747.jpg

2、所需软件

wKioL1Y5WNzTM3CQAAFf615QnMQ691.jpg

3、MySQL软件的安装(在四台服务器上都装上MySQL5.7.9数据库软件)

3.1、查询服务器上是否已经安装mysql

[root@master ~]#rpm -aq | grep mysql

              mysql-server-5.1.66-2.el6_3.x86_64

              mysql-libs-5.1.66-2.el6_3.x86_64

              mysql-devel-5.1.66-2.el6_3.x86_64

              qt-mysql-4.6.2-25.el6.x86_64

              mysql-5.1.66-2.el6_3.x86_64

3.2、先卸载旧的版本

rpm -e mysql --nodeps --allmatches (不理会依赖关系,删除所有上一步查出来的mysql)

[root@master ~]#rpm -e mysql-server-5.1.66-2.el6_3.x86_64 --nodeps --allmatches

[root@master ~]#rpm -e mysql-libs-5.1.66-2.el6_3.x86_64 --nodeps --allmatches

[root@master ~]#rpm -e mysql-devel-5.1.66-2.el6_3.x86_64 --nodeps --allmatches

[root@master ~]#rpm -e qt-mysql-4.6.2-25.el6.x86_64 --nodeps --allmatches

[root@master ~]#rpm -e mysql --nodeps --allmatches

[root@master ~]#rpm -aq | grep mysql

3.3、安装软件

rpm -ivfmysql-community-libs-compat-5.7.9-1.el6.x86_64.rpm

rpm -ivfmysql-community-libs-5.7.9-1.el6.x86_64.rpm 

rpm -ivfmysql-community-common-5.7.9-1.el6.x86_64.rpm 

rpm -ivfmysql-community-client-5.7.9-1.el6.x86_64.rpm

rpm -ivfmysql-community-embedded-5.7.9-1.el6.x86_64.rpm       

rpm -ivfmysql-community-embedded-devel-5.7.9-1.el6.x86_64.rpm 

rpm -ivfmysql-community-server-5.7.9-1.el6.x86_64.rpm

rpm -ivfmysql-community-devel-5.7.9-1.el6.x86_64.rpm  

rpm -ivfmysql-community-libs-5.7.9-1.el6.x86_64.rpm           

rpm -ivfmysql-community-test-5.7.9-1.el6.x86_64.rpm

3.4、MySQL 5.7.9修改密码

service mysqldstart

查看密码

sudo grep'temporary password' /var/log/mysqld.log

进入mysql,修改密码

setpassword=password(‘Apexapex@123’);

3.5、开启mysql的3306端口号,给root用户授权,用于远程访问

3.5.1、开启mysql端口号及关闭Selinux

/sbin/iptables-I INPUT -p tcp --dport 3306 -j ACCEPT

/sbin/iptables-I INPUT -p udp --dport 3306 -j ACCEPT 

/etc/rc.d/init.d/iptablessave 

/etc/rc.d/init.d/iptablesrestart

关闭Selinux

sed -i'/SELINUX/s/enforcing/disabled/' /etc/selinux/config

3.5.2、给root用户授权,使远程客户端才能够连接过来

GRANT ALLPRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Apexapex@123' WITH GRANT OPTION;

4、主备复制配置步骤如下(master与slave配置)

4.1、修改主服务器的配置文件

vi /etc/my.cnf

在[mysqld]下添加以下内容

log_bin=/var/lib/mysql/mysql-bin

server-id = 67

gtid_mode=ON

enforce_gtid_consistency=ON

4.2、修改备服务器slave

vi /etc/my.cnf

在[mysqld]下添加以下内容

log_bin=/var/lib/mysql/mysql-bin

server-id = 68

master_info_repository=TABLE

relay_log_info_repository=TABLE

gtid_mode=ON

enforce_gtid_consistency=ON

4.3、重启两台服务器的mysql

/etc/init.d/mysqlrestart

4.4、在主服务器上建立帐户并授权slave

# mysql -u root-p

Enter password: 

GRANTREPLICATION SLAVE ON *.* TO apexsoft@'%' IDENTIFIED BY 'Apexapex@123';

GRANT REPLICATIONSLAVE ON *.* TO rep@'%' IDENTIFIED BY 'Apexapex@123';

flushprivileges;

4.5、配置备服务器slave

CHANGE MASTER TOMASTER_HOST = '192.168.1.67', MASTER_PORT = 3306,MASTER_USER = 'apexsoft',MASTER_PASSWORD = 'Apexapex@123',MASTER_AUTO_POSITION = 1 FOR CHANNEL 'master1';

启动备服务器复制功能

mysql>start slave;   

4.6、检查备服务器复制功能状态

mysql> show slavestatus\G;

注:Standby_IO及Standby_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。
以上操作过程,主备服务器配置完成。

4.7、主备服务器测试

主服务器Mysql,建立数据库,并在这个库中建表插入一条数据:
mysql> create database apex_db;

Query OK, 1 rowaffected (0.00 sec)

mysql> useapex_db;

Database changed

mysql> create table apex_tb(id int(3),name char(10));

Query OK, 0 rowsaffected (0.00 sec)

mysql> insertinto apex_tb values(001,' apex ');

Query OK, 1 rowaffected (0.00 sec)

mysql> showdatabases;

  +--------------------+

   |Database           |

  +--------------------+

   |information_schema |

   |apex_db            |

   | mysql             |

   |test              |

  +--------------------+

   4rows in set (0.00 sec)

备服务器Mysql查询:

 mysql> show databases;

  +--------------------+

   |Database           |

  +--------------------+

   |information_schema |

   | apex_db             |         

|mysql             |

   |test              |

  +--------------------+

   4rows in set (0.00 sec)

mysql> use apex_db

Database changed

mysql> select* from apex_tb;    //可以看到在主服务器上新增的具体数据

  +------+------+

   |id   | name |

   +------+------+

  |    1 | apex |

  +------+------+

   1row in set (0.00 sec)

5、节点master1配置

5.1修改主服务器master1

vi /etc/my.cnf

在[mysqld]下添加以下内容

log_bin=/var/lib/mysql/mysql-bin

server-id = 66

port=3306

gtid_mode=ON

enforce_gtid_consistency=ON

5.2在主服务器上建立帐户并授权给multiple

# mysql -u root-p

Enter password: 

mysql> GRANTREPLICATION STANDBY ON *.* TO apexsoft1@'%' IDENTIFIED BY '123456';

mysql>flushprivileges;

6、节点multiple(多源复制到的节点)配置

6.1修改multiple的配置文件

vi /etc/my.cnf

在[mysqld]下添加以下内容

log_bin=/var/lib/mysql/mysql-bin

server-id = 69

master_info_repository=TABLE

relay_log_info_repository=TABLE

gtid_mode=ON

enforce_gtid_consistency=ON

6.2配置multiple服务器

CHANGE MASTER TOMASTER_HOST = '192.168.1.66', MASTER_PORT = 3306,MASTER_USER = 'apexsoft1',MASTER_PASSWORD = 'Apexapex@123',MASTER_AUTO_POSITION = 1 FOR CHANNEL'master1';

 

CHANGE MASTER TOMASTER_HOST = '192.168.1.67', MASTER_PORT = 3306,MASTER_USER = 'rep',MASTER_PASSWORD = 'Apexapex@123',MASTER_AUTO_POSITION = 1 FOR CHANNEL'master2';

 

start slave forchannel ‘master1’;

start slave forchannel ‘master2’;

show slavestatus\G;

7、关于多源复制常见问题

7.1、主键冲突解决方法

7.1.1、方法一:在multiple上取消唯一性约束、主键约束

可能产生的后果是,在multiple上进行查询时,不走主键的索引,查询效率变慢。

7.1.2、方法二:在master与master1上对同一库或同一表上分别取不同的名字

7.2、增加标志位来显示属于哪个库同步过来的

方法一:在建表时,直接增加一列来标识属于哪台数据库。

方法二:在master与master1上对同一库或同一表上分别取不同的名字,同步到multiple后,通过建立视图增加一列来标识属于哪一个库。如 t2表与t3表:

create viewTview as select id,name, 't2' as 'SIGN' from t2 union select id,name, 't3' as'SIGN' from t3;

7.3、过滤功能

在单台的情况(没有主从的情况),可以在该台数据库上使用过滤条件;

在主从架构的情况,如果在主库使用过滤条件,也会把备库进行过滤的,所以不能在主库使用过滤。可以考虑以下两种方法:

方法一:

可以在备库上使用过滤条件,然后让备库把数据同步到multiple上。整个架构就变成这样了。

wKiom1Y5WLnDK6CHAABzqVIaVIA906.jpg


方法二:

在mutilple数据库上使用过滤条件,这种情况的过滤实质是这样的。每个源库都有把数据传到mutiple数据库,存储为中继日志,只是在mutiple端没有使用sql thread去解析,执行这些语句而已,还是占用了网络带宽,影响源库的性能。

7.4、多源到底能支持多少个源呢




本文转自 corasql 51CTO博客,原文链接:http://blog.51cto.com/corasql/1709483,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
mysql支持哪些复制
mysql支持哪些复制
7 0
【MySQL】组复制背景
原文:https://dev.mysql.com/doc/refman/8.0/en/group-replication-background.html 译者:kun 最近在翻译MySQL8.0官方文档 第18章组复制部分,分享出来大家读读,有想加入翻译小队的同学可以联系我哦。
19 0
MySQL并行复制
一、MySQL的主从复制 1.1 主从复制基本原理   MySQL的主从架构依赖于MySQL Binlog功能,Master节点上产生Binlog并且写入到文件中。  Master节点上启动一个DUMP线程:当Slave节点I/O线程连接Master时,Master创建这个线程,DUMP线程负责从Master的binlog文件读取记录,然后发送给Slave。
723 0
MySQL复制
MySQL复制 MySQL传统的主从复制 master节点的配置 server_id=1 sync_binlog=1 log_bin=master-bin mysql> create user 'repl'@'192.
820 0
mysql并行复制
并行复制 社区版5.6中新增 并行是指从库多线程apply binlog 库级别并行应用binlog,同一个库数据更改还是串行的(5.7版并行复制基于事务组) 设置 set global slave_parallel_workers=10;设置sq...
1037 0
Mysql13 复制2
<div class="markdown_views"> <h2 id="复制管理">复制管理</h2> <h3 id="监控">监控</h3> <p>SHOW MASTER LOGS; <br> 查看主库当前有哪些二级制日志,其logname是其他命令的入参, file_size是偏移量也是入参。</p> <p>假设我们知道日志的偏移量(来源于上面的命令)使用: <
1375 0
13688
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载