1. 程式人生 > >MySQL多源複製實戰

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

滴滴雲架構和資料庫技術團隊在實戰方面積累了豐富的經驗,敬請關注本系列文章的後續分享。

本文作者:陳俊川