[toc]
## 概述
多主一從,也稱為多源復制,數據流向:
* 主庫1 -> 從庫s
* 主庫2 -> 從庫s
* 主庫n -> 從庫s
從庫能夠同時從多個源接收事務。多源復制可用于將多個服務器備份到單個服務器,合并表分片,以及將來自多個服務器的數據合并到單個服務器。
**通過 GTID 保證了每個在主庫上提交的事務在集群中有一個唯一的ID**。這種方式強化了數據庫的**主備一致性,故障恢復以及容錯能力。** 所以基于GTID的復制方式是推薦的主從復制方式。本文是基于GTID做的多源復制。
## 應用場景
* 數據匯總,可將多個主數據庫同步匯總到一個從數據庫中,方便夸庫查詢與數據統計分析。
* 讀寫分離,從庫只用于查詢,提高數據庫整體性能。
* 數據備份,對多個庫數據進行熱備。
## 部署環境
通過docker部署以下環境
msyql版本: 5.7.26-log
主1: 192.168.16.2
主2: 192.168.16.3
從1: 192.168.16.4
## 配置 **/etc/my.cnf**
分別在主從庫的 **\[mysqld\]** 段增加以下配置
### master_1
~~~
server_id = 2
log-bin = master1-bin
gtid-mode=on
enforce-gtid-consistency=true
~~~
### master_2
~~~
server_id = 3
log-bin = master2-bin
gtid-mode=on
enforce-gtid-consistency=true
~~~
### slave
~~~
server_id = 4
relay-log = relay-bin
master_info_repository = TABLE
relay_log_info_repository = TABLE
log-slave-updates=true
gtid-mode=on
enforce-gtid-consistency=true
sync-master-info=1
slave-parallel-workers=2
binlog-checksum=CRC32
master-verify-checksum=1
slave-sql-verify-checksum=1
binlog-rows-query-log_events=1
~~~
## 創建測試數據

```
m1 -> m1_table
m2 -> m2_table
```
## 創建復制賬號
~~~
# 在主1執行
grant replication slave on *.* to 'rep1'@'192.168.16.4' identified by 'rep1';
flush privileges;
# 在主2執行
grant replication slave on *.* to 'rep2'@'192.168.16.4' identified by 'rep2';
flush privileges;
~~~
## 初始化從庫
執行 `reset master` 后同步主庫數據
>[warning] 注意! 庫名和表名都要一樣。

## 登錄Slave創建復制通道
~~~
mysql> CHANGE MASTER TO MASTER_HOST='192.168.16.2 ', MASTER_USER='rep1', MASTER_PORT=3306, MASTER_PASSWORD='rep1', MASTER_AUTO_POSITION = 1 FOR CHANNEL 'Master_1';
mysql> CHANGE MASTER TO MASTER_HOST='192.168.16.3', MASTER_USER='rep2', MASTER_PORT=3306, MASTER_PASSWORD='rep2', MASTER_AUTO_POSITION = 1 FOR CHANNEL 'Master_2';
~~~
## 開啟復制通道
~~~
# 默認開啟所有的復制通道
mysql> start slave;
# 也可以指定復制通道開啟
mysql> start slave for CHANNEL 'Master_1';
mysql> start slave for CHANNEL 'Master_2';
~~~
## 查看從庫復制狀態
~~~
mysql> SHOW SLAVE STATUS\G
...
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
...
# 也可以指定復制通道查看
mysql> SHOW SLAVE STATUS FOR CHANNEL 'Master_1'/G;
~~~
## 配置多庫到單庫
**配置slave的my.conf**
默認情況下,多源復制都是庫表一一對應的,就如上文一樣。但很多情況下,我們需要配置多庫到單庫。此時就可以在slave上進行如下配置:
~~~
# replicate-rewrite-db 多庫同步到單庫,庫名重寫,其他的replicate-*會在replicate-rewrite-db評估后執行,多個映射的話,配置文件中包含多行即可。如果同時有多個replicate*過濾器,先評估數據庫級別的、然后表級別的;先評估do,后評估ignore(也就是在白名單或者不在黑名單的模式)。比如,主庫多個分庫合并到從庫一個庫
replicate-rewrite-db=ta_base->ta
replicate-rewrite-db=ta_1->ta
replicate-rewrite-db=ta_2->ta
~~~
## 驗證
略;
- 【mysql的編程專題①】流程控制與其他語法
- 【mysql的編程專題②】觸發器
- 【mysql的編程專題③】內置函數
- 【mysql的編程專題④】存儲過程
- 【mysql的編程專題⑤】自定義函數
- 【mysql的編程專題⑥】視圖
- 【mysql的設計與優化專題(1)】ER圖,數據建模與數據字典
- 【mysql的設計與優化專題(2)】數據中設計中的范式與反范式
- 【mysql的設計與優化專題(3)】字段類型與合理的選擇字段類型
- 【mysql的設計與優化專題(4)】表的垂直拆分和水平拆分
- 【mysql的設計與優化專題(5)】慢查詢詳解
- 【mysql的設計與優化專題(6)】mysql索引攻略
- 【Mysql問題集錦(1)】mysql不能使用innodb存儲引擎
- 【Mysql進階技巧(2)】利用mysql生成唯一序號
- 【Mysql進階技巧(1)】MySQL的多表關聯與自連接
- 【Mysql高可用架構(1)】基于日志點的主從復制
- 【Mysql高可用架構(2)】主從管理的系統視圖
- 【Mysql高可用架構(3)】基于GTID的主從復制
- 【Mysql高可用架構(4)】在線變更復制類型
- 【Mysql高可用架構(5)】多源復制(多主一從)
- 【Mysql高可用架構(6)】多線程復制
- 【Mysql高可用架構(7)】在線設置復制過濾
- 【Mysql高可用架構(8)】解決主從不一致
- 【Mysql高可用架構(9)】初識mycat以及制作mycat鏡像
- 【Mysql高可用架構(10)】mycat配置mysql讀寫分離
- MyCat 集群部署(HAProxy + MyCat)
- 常用復雜sql語句整理