MySQL多源複製實戰
本文是滴滴雲開源框架教程系列文章的一篇。
一、多源複製概述
MySQL多源複製使複製從庫能夠同時從多個源接收事務。多源複製可用於將多個伺服器備份到單個伺服器,合併表分片,以及將來自多個伺服器的資料合併到單個伺服器。
二、多源複製的配置
多源複製拓撲中的主裝置可以配置為使用基於全域性事務識別符號(GTID)的複製或二進位制日誌基於位置的複製。多源複製拓撲中的從庫需要基於TABLE儲存,多源複製與基於FILE儲存不相容。
1、配置先決條件,從庫必須是基於表的儲存
#salve my.cnf master-info-repository=TABLE relay-log-info-repository=TABLE #動態設定 STOP SLAVE; SET GLOBAL master_info_repository = 'TABLE'; SET GLOBAL relay_log_info_repository = 'TABLE';
2、多源複製從庫
基於Binlog的多源複製
`CHANGE MASTER TO MASTER_HOST='master1', MASTER_USER='rpl', MASTER_PORT=3451, MASTER_PASSWORD='' \ MASTER_LOG_FILE='master1-bin.000006', MASTER_LOG_POS=628 FOR CHANNEL 'master-1';`
基於GTID的多源複製
`CHANGE MASTER TO MASTER_HOST='master1', MASTER_USER='rpl', MASTER_PORT=3451, MASTER_PASSWORD='', \ MASTER_AUTO_POSITION = 1 FOR CHANNEL 'master-1';`
3、啟動多源複製
啟動所有複製源
`START SLAVE thread_types;`
啟動單個複製源
`START SLAVE thread_types FOR CHANNEL channel;`
4、停止多源複製
啟動所有複製源
`stop slave thread_types;`
啟動單個複製源
`stop slave thread_types FOR CHANNEL channel;`
5、重置多源複製從庫
要重置所有當前配置的複製通道:
RESET SLAVE;
要僅重置一個指定通道,請使用一個子句: FOR CHANNEL channel
RESET SLAVE FOR CHANNEL channel;
三、多源複製的監控
通過效能表監控
`mysql> use performance_schema;`
`Reading table information for completion of table and column names`
`You can turn off this feature to get a quicker startup with -A`
`Database changed`
`mysql> SELECT * FROM replication_connection_status\G;`
`*************************** 1. row ***************************`
`CHANNEL_NAME: master-1-63-3306`
`GROUP_NAME:`
`SOURCE_UUID: 24e8b84c-b568-11e7-b71d-44a842404e72`
`THREAD_ID: 50`
`SERVICE_STATE: ON`
`COUNT_RECEIVED_HEARTBEATS: 11418`
`LAST_HEARTBEAT_TIMESTAMP: 2018-03-27 18:20:11`
`RECEIVED_TRANSACTION_SET: 24e8b84c-b568-11e7-b71d-44a842404e72:17-19`
`LAST_ERROR_NUMBER: 0`
`LAST_ERROR_MESSAGE:`
`LAST_ERROR_TIMESTAMP: 0000-00-00 00:00:00`
`*************************** 2. row ***************************`
`CHANNEL_NAME: master-1-65-3306`
`GROUP_NAME:`
`SOURCE_UUID: b472e7b0-2dc7-11e8-880c-90b11c50d684`
`THREAD_ID: 52`
`SERVICE_STATE: ON`
`COUNT_RECEIVED_HEARTBEATS: 11416`
`LAST_HEARTBEAT_TIMESTAMP: 2018-03-27 18:19:48`
`RECEIVED_TRANSACTION_SET: 24e8b84c-b568-11e7-b71d-44a842404e72:17-19,`
`b472e7b0-2dc7-11e8-880c-90b11c50d684:4-6`
`LAST_ERROR_NUMBER: 0`
`LAST_ERROR_MESSAGE:`
`T_ERROR_TIMESTAMP: 0000-00-00 00:00:00`
`2 rows in set (0.00 sec)`
四、多源複製的限制
1、多源複製拓撲中的一個從庫的最大通道數為256
2、每個複製通道必須具有唯一(非空)名稱
每個複製通道都有一個唯一的名稱,該名稱是最長為64個字元的字串,並且不區分大小寫。由於通道名稱用於從表,因此用於這些字符集的字符集始終為UTF-8
3、每個通道的中繼日誌檔案和索引檔案都被命名 ,其中是使用該選項指定的基本名稱,並且是記錄到此檔案的通道的名稱。
relay_log_basename-channel.xxxxxxrelay_log_basename
總結:
多源複製可以解決多個分片合併、關聯查詢的問題,但是也有其自身的缺點;
缺點:
1、日常維護難度增大
2、採用基於Binlog的複製,故障轉移複雜(建議基於GTID)
3、隨著源增加,從庫壓力越來越大
參考資料:
https://dev.mysql.com/doc/refman/5.7/en/replication-multi-source-tutorials.html
滴滴雲架構和資料庫技術團隊在實戰方面積累了豐富的經驗,敬請關注本系列文章的後續分享。
本文作者:陳俊川