[toc]
## 概述
mysql從5.7開始支持多線程復制(最好是5.7.19以后的版本,前面版本都有各種問題),**很大程度上解決了主從延遲的問題**。不過默認情況下,還是單數據庫單個線程,如果需要使用多線程,需要在從節點進行配置。
Mysql 5.7 對主從復制增加了一種類型,共有兩種類型,如下:
* `DATABASE`?基于庫的并行復制 , 每個數據庫對應一個復制線程
* `LOGICAL_CLOCK`?基于組提交的并行復制方式,同一個數據庫下可以有多個線程
## 配置
>[info] 以下配置基于前文的《基于GTID主從復制》
### 查看當前的主從狀態
~~~
# 要有雙yes: Slave_IO_Running: Yes Slave_SQL_Running: Yes
mysql@slave>show slave status;
# 觀察當前線程,發現只有一組線程(IO線程與SQL線程)在處理
mysql@slave>show processlist;
+----+-------------+------+---------+--------------------------------------------------------+
| Id | User | db | Command | State |
+----+-------------+------+---------+--------------------------------------------------------+
| 4 | system user | NULL | Connect | Waiting for master to send event |
| 5 | system user | NULL | Connect | Slave has read all relay log; waiting for more updates |
+----+-------------+------+---------+--------------------------------------------------------+
# 查看復制類型,發現為DATABASE,也就是同一數據庫下只有一個線程進行復制,不能并行復制。
mysql@slave>show variables like 'slave_parallel_type';
+---------------------+----------+
| Variable_name | Value |
+---------------------+----------+
| slave_parallel_type | DATABASE |
+---------------------+----------+
# 查看當前并行數量,發現并行工作的進程數是 0
mysql@slave>show variables like 'slave_parallel_workers';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| slave_parallel_workers | 0 |
+------------------------+-------+
~~~
### 配置多線程
~~~
# 停止從節點復制
mysql@slave>stop slave;
# 設置復制類型為 LOGICAL_CLOCK,基于組提交的并行復制方式
mysql@slave>set global slave_parallel_type='logical_clock';
# 設置并行數量為 4(CPU核心數)
mysql@slave>set global slave_parallel_workers=4;
# 啟動主從
mysql@slave>start slave;
~~~
然后再查看當前的主從狀態
~~~
mysql@slave> show processlist;
+----+-------------+---------+------+--------------------------------------------------------+
| Id | User | Command | Time | State |
+----+-------------+---------+------+--------------------------------------------------------+
| 10 | system user | Connect | 77 | Waiting for master to send event |
| 11 | system user | Connect | 77 | Slave has read all relay log; waiting for more updates |
| 12 | system user | Connect | 77 | Waiting for an event from Coordinator |
| 13 | system user | Connect | 77 | Waiting for an event from Coordinator |
| 14 | system user | Connect | 77 | Waiting for an event from Coordinator |
| 15 | system user | Connect | 77 | Waiting for an event from Coordinator |
+----+-------------+---------+------+--------------------------------------------------------+
~~~
### 固化配置
以上配置方法重啟一下就失效了,可以在slave的**mysql.cnf**增加以下配置
~~~
slave_parallel-type=LOGICAL_CLOCK
#DATABASE 默認值,基于庫的并行復制方式
#LOGICAL_CLOCK:基于組提交的并行復制方式
slave_parallel_workers=4
master_info_repository=TABLE
relay_log_info_repository=TABLE
#這兩個參數會將master.info和relay.info保存在表中,默認是Myisam引擎,官方建議改為Innodb引擎,防止表損壞后自行修復。?
#alter?table?slave_master_info?engine=innodb;?
#alter?table?slave_relay_log_info?engine=innodb;?
#alter?table?slave_worker_info?engine=innodb;
relay_log_recovery=ON
#當slave從庫宕機后,假如relay-log損壞了,導致一部分中繼日志沒有處理,則自動放棄所有未執行的relay-log,并且重新從master上獲取日志,
#這樣就保證了relay-log的完整性。默認情況下該功能是關閉的,將relay_log_recovery的值設置為 1時,可在slave從庫上開啟該功能,建議開啟。
~~~
- 【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語句整理