什么是多源复制?



multi-mastermulti-source 复制不是一样的. Multi-Master 复制通常是环形复制,你可以在任意主机上将数据复制给其他主机。




mysql 多源复制 多个channl mysql多源复制 限制_从站




Multi-Source 意味着一个从站能有一个以上主站. 现在, 像下图一样的复制环境是可能的:


mysql 多源复制 多个channl mysql多源复制 限制_mysql 多源复制 多个channl_02



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


它是怎么工作的呢?

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

FOR CHANNEL ”这个参数来提供通信链接的名字。


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


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


来个例子!

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


master_info_repository=TABLE; 
  
   

    relay_log_info_repository=TABLE; 
  
   
“master1″ 和 “master2″这两个名字:   
to master_host="127.0.0.1", master_port=12047, master_user="msandbox",master_password="msandbox" for channel="master1";   
   
to master_host="127.0.0.1", master_port=12048, master_user="msandbox",master_password="msandbox" for channel="master2";


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

for channel="master1";   
   
for channel="master2";   
   
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; 
  
   

    +----+-------------+-----------------------------------------------------------------------------+ 
  
   
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 | 
  
   

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

结论

这个新的

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

GTID 可以用 multi-threaded slave per schema或 intra-database.