简单讲解MySQL中的多源复制

 更新时间:2015年04月22日 09:32:57   投稿:goldensun  
这篇文章主要介绍了简单讲解MySQL中的多源复制,多源复制功能自从5.7.2版本以后被加入MySQL,需要的朋友可以参考下

 近日ORACLE发布几个新的功能在最新的Mysql5.7.2的版本上,由此有了此篇文章。大多数的改善是在数据库性能和复制相关的功能上,这个新版本会带给我们不可思议的效果。

在这篇文章里,我将要用一些简单的步奏来尝试了解这新的多源复制工作原理以及我们怎样进行自己的测试。需要说明的是,这还是一个开发版本,不是给生产环境准备的。因此这篇文章是打算给那些想了解此新功能的人,看看它是如何在应用中工作的,都是在临时环境中进行相关操作。

什么是多源复制?

首先,我们需要清楚 multi-master 与multi-source 复制不是一样的. Multi-Master 复制通常是环形复制,你可以在任意主机上将数据复制给其他主机。

201542292551130.jpg (285×300)

Multi-source 是不同的. MySQL在这个新版本中修复了一个复制限制 , 这限制是一个从站只能有一个主站. 这是一个在我们设计复制环境中的限制因素,也有一些极客使它正常工作了。但是现在有一个官方的解决办法了。所以。简单的说, Multi-Source 意味着一个从站能有一个以上主站. 现在, 像下图一样的复制环境是可能的: 

201542292620489.jpg (300×253)

 这将帮助我们创建一些复制的层次结构,这在过去是不可能的。 举个例子,你可以 将一个从站放在你的办公室里。在办公室里从所有主站中复制数据传播到世界各地。
 
它是怎么工作的呢?

现在我们有了通信渠道的概念,每一个通信渠道都是一个从服务器从主服务器获得2进制日志的链接。这意味着每个通信渠道都得有一个IO_THREAD .我们需要运行不同的 “CHANGE MASTER” 命令, 对于每一个主服务器。我们需要用到 “FOR CHANNEL”这个参数来提供通信链接的名字。
 

CHANGE MASTER MASTER_HOST='something', MASTER_USER=... FOR CHANNEL="name_of_channel";

很容易. 有一个单一的先决条件。从服务器需要在mysql5.6上配置安全功能,这意味着信息通常包含在主服务器上。信息或日志应该在一个表中,让我们开始配置吧

来个例子!

首先你需要下载测试版的mysql。点这个链接:下载.

我们需要有一个从服务器和两个主服务器的沙箱环境. 我不会细节的说明怎样配置server_id, binary logs 和 replication users.我假设已经配置好了。 如果你不知道怎么做。你可以看这个链接

首先,我们在从服务器上实现事故安全功能。

 

master_info_repository=TABLE;
relay_log_info_repository=TABLE;

让后重启从服务器。我们可以开始创建通信渠道,用 “master1″ 和 “master2″这两个名字:
 

slave > change master to master_host="127.0.0.1", master_port=12047, master_user="msandbox",master_password="msandbox" for channel="master1";
slave > change master to master_host="127.0.0.1", master_port=12048, master_user="msandbox",master_password="msandbox" for channel="master2";

按照所设定的通信名字启动从服务器。
 

slave > start slave for channel="master1";
slave > start slave for channel="master2";

现在我们检查一下从服务器状态:
 

slave > show slave status\G
Empty set (0.00 sec)

啊。是空的。我们需要写上通信名字。重新检查下从服务器状态:
 

slave > SHOW SLAVE STATUS FOR CHANNEL="master1"\G
*************************** 1. row ***************************
        Slave_IO_State: Waiting for master to send event
         Master_Host: 127.0.0.1
         Master_User: msandbox
         Master_Port: 12047
        Connect_Retry: 60
       Master_Log_File: mysql-bin.000002
     Read_Master_Log_Pos: 232
        Relay_Log_File: squeeze-relay-bin-master1.000003
        Relay_Log_Pos: 395
    Relay_Master_Log_File: mysql-bin.000002
       Slave_IO_Running: Yes
      Slave_SQL_Running: Yes
[...]

我们也可以检查正在运行的  IO_THREAD 和 SQL_THREADS :
 

slave > SHOW PROCESSLIST;
+----+-------------+-----------------------------------------------------------------------------+
| Id | User    | State                                    |
+----+-------------+-----------------------------------------------------------------------------+
| 2 | system user | Waiting for master to send event                      |
| 3 | system user | Slave has read all relay log; waiting for the slave I/O thread to update it |
| 4 | system user | Waiting for master to send event                      |
| 5 | system user | Slave has read all relay log; waiting for the slave I/O thread to update it |
+----+-------------+-----------------------------------------------------------------------------+

测试看一下:
 

master1 > create database master1;
master2 > create database master2;
slave > show databases like 'master%';
+--------------------+
| Database (master%) |
+--------------------+
| master1      |
| master2      |
+--------------------+

正常工作了。看起来很简单!

结论

这个新的multi-source功能使在过去需要一些复杂操作创建的复制环境变得简单了。当然,你应用程序可以考虑这个新的特性设计和开发,使用  multi-master, multi-source都需要特别注意,不要把你的数据都弄乱了。

在每一个新的版本中,mysql的复制功能给我们更多的配置,性能和设计的可能性。所有这些新功能都可以结合起来。在你新(老)的功能中增加复制功能,你的复制环境会更加出色。举个例子:你可以配置 GTID 可以用 multi-threaded slave per schemaintra-database.

相关文章

  • 如何实现MySQL的索引

    如何实现MySQL的索引

    这篇文章主要介绍了如何实现MySQL的索引,MySQL中索引分三类,有B+树索引、Hash索引和全文索引,下面我们一起来看看MySQL索引的具体实现,需要的小伙伴可以参考一下
    2022-01-01
  • mysql 8.0.18 安装配置方法图文教程(linux)

    mysql 8.0.18 安装配置方法图文教程(linux)

    这篇文章主要介绍了linux下mysql 8.0.18 安装配置方法图文教程,文中安装步骤介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • MySQL优化insert性能的方法示例

    MySQL优化insert性能的方法示例

    对于一些数据量较大的系统,数据库面临的问题除了查询效率低下,还有就是数据入库时间长。下面这篇文章主要给大家介绍了关于MySQL优化insert性能的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2018-06-06
  • Windows10下mysql 5.7.21 Installer版安装图文教程

    Windows10下mysql 5.7.21 Installer版安装图文教程

    这篇文章主要为大家详细介绍了Windows10下mysql 5.7.21 Installer版安装图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09
  • mysql本地登录无法使用端口号登录的解决方法

    mysql本地登录无法使用端口号登录的解决方法

    这篇文章主要介绍了mysql本地登录无法使用端口号登录的解决方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-06-06
  • mysql limit分页优化方法分享

    mysql limit分页优化方法分享

    MySQL的优化是非常重要的。其他最常用也最需要优化的就是limit。MySQL的limit给分页带来了极大的方便,但数据量一大的时候,limit的性能就急剧下降。
    2011-04-04
  • sql查询语句之平均分、最高最低分及排序语句

    sql查询语句之平均分、最高最低分及排序语句

    最近工作中遇到个需求,需要查询每门课程的平均成绩,结果按平均成绩降序排列,平均成绩相同时,按课程编号升序排列,这篇文章主要给大家介绍了关于sql查询语句之平均分、最高最低分及排序语句的相关资料,需要的朋友可以参考下
    2022-05-05
  • SQL中日期与字符串互相转换操作实例

    SQL中日期与字符串互相转换操作实例

    我们经常出于某种目的需要使用各种各样的日期格式,当然我们可以使用字符串操作来构造各种日期格式,下面这篇文章主要给大家介绍了关于SQL中日期与字符串互相转换操作的相关资料,需要的朋友可以参考下
    2022-10-10
  • MySQL中使用group by 是总是出现1055的错误(推荐)

    MySQL中使用group by 是总是出现1055的错误(推荐)

    这篇文章主要介绍了MySQL中使用group by 是总是出现1055的错误,小编通过查阅相关资料才把问题解决,今天小编记录下分享到脚本之家平台,需要的朋友可以参考下
    2020-02-02
  • Mysql 聚合函数嵌套使用操作

    Mysql 聚合函数嵌套使用操作

    这篇文章主要介绍了Mysql 聚合函数嵌套使用操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10

最新评论