MySQL傳統點位複製在線轉爲GTID模式複製

  1.  GTID優缺點

    MySQL傳統點位複製在5.7版本前是主要的主從複製模式,而隨着MySQL5.6版本引入GTID,而且MySQL5.7進行各方面的優化之後,在mySQL5.7(尤爲是MySQL5.7.6)版本後GTID模式的主從複製方式成爲一個新的選擇方式。要使用GTID模式,首先也需知其優缺點,其主要的優缺點以下:mysql

1.1  優勢

a) 更簡單的實現failover,無需找log_file和log_Pos。
b) 更簡單的搭建主從複製。
c) 複製集羣有一個統一的方式識別複製位置,給集羣管理帶來了便利。
d) 正常狀況下,GTID是連續沒有空洞的,所以主從庫出現數據衝突時,能夠用添加空事物的方式進行跳過sql

1.2 限制

a)  在一個事務裏面混合使用引擎如Innodb(支持事務)、MyISAM(不支持事務), 形成多個GTIDs和同一個事務相關聯出錯
b)  CREATE TABLE…..SELECT 不能使用,該語句產生的兩個event在某一狀況 會使用同一個GTID(同一個GTID在slave只能被使用一次),使用時會報以下錯誤:數據庫

錯誤代碼: 1786
Statement violates GTID consistency: CREATE TABLE ... SELECT.

     需改成 create table like  tb; insert into tb ... select  方式處理
c)  CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE 不能在事務內使用 (啓用了--enforce-gtid-consistency參數)session

2.  傳統點位複製在線轉爲GTID模式複製

2.1  在線調整的條件

a)   要求MySQL 5.7.6及之後版本。優化

b) 全部組中節點的gtid_mode 爲off狀態。spa

2.2  在線調整

2.2.1  查看當前狀態

/** 傳統複製下enforce_gtid_consistency gtid_mode 均爲OFF **/
mysql> show global variables like 'enforce_gtid_consistency'; +--------------------------+-------+ | Variable_name | Value | +--------------------------+-------+ | enforce_gtid_consistency | OFF | +--------------------------+-------+ 1 row in set (0.00 sec) mysql> show global variables like 'gtid_mode'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | gtid_mode | OFF | +---------------+-------+ 1 row in set (0.00 sec)

2.2.2  修改enforce_gtid_consistency

全部節點均先將其修改成 WARN,同時注意查看日誌是否出現警告信息,生產環境想調整爲GTID模式時,需提早一段時間調整此參數,觀察一段時間,肯定無警告後再調整。日誌

/**  全部節點均調整,主從無前後順序 **/
mysql> set global enforce_gtid_consistency =warn;
Query OK, 0 rows affected (0.00 sec)

開啓後觀察數據庫日誌,只有在無警告的狀況下才能夠進行後續的操做。code

2019-10-13T06:00:19.723310Z 10588 [Note] Changed ENFORCE_GTID_CONSISTENCY from OFF to WARN.

 2.2.3     修改enforce_gtid_consistency = on

將各節點enforce_gtid_consistency 設置爲 on,不分順序,但須要所有執行完畢後再進行下一步orm

mysql> set global enforce_gtid_consistency = on;
Query OK, 0 rows affected (0.00 sec)

2.2.4  修改gtid_mode = off_permissive

將各節點gtid_mode設置爲 off_permissive,不分順序,但須要所有執行完畢後再進行下一步server

mysql> set global gtid_mode = off_permissive;
Query OK, 0 rows affected (0.00 sec)

2.2.5  修改gtid_mode=on_permissive

建議先修改從庫的gtid_mode爲on_permissive,以後再修改主庫的。此步驟執行完畢後生成的日誌是帶GTID的

mysql> set global gtid_mode=on_permissive;
Query OK, 0 rows affected (0.01 sec)

2.2.6  查看狀態

/** 肯定傳統方式複製完畢,此時各節點Ongoing_anonymous_transaction_count狀態爲0 **/
mysql> show status like 'ongoing_anonymous_transaction_count';
+-------------------------------------+-------+
| Variable_name                       | Value |
+-------------------------------------+-------+
| Ongoing_anonymous_transaction_count | 0     |
+-------------------------------------+-------+
1 row in set (0.00 sec)
/** 切換日誌 **/
mysql> flush logs;
Query OK, 0 rows affected (0.16 sec)

須要全部的節點ongoing_anonymous_transaction_count均爲0.

2.2.7  啓用gtid_mode

前面的步驟確認正常後,各節點開啓GTID_MODE

mysql> set global gtid_mode=on;
Query OK, 0 rows affected (0.01 sec)

2.3 將傳統複製轉爲GTID模式

中止原有複製,切換爲gtid模式後,設置爲自動查找位置複製。

ql> stop slave;
Query OK, 0 rows affected (0.00 sec)

mysql> change master to master_auto_position=1;
Query OK, 0 rows affected (0.01 sec)

mysql> start slave;
Query OK, 0 rows affected (0.01 sec)

修改後複製即變爲gtid模式。

mysql> SHOW GLOBAL  VARIABLES LIKE '%gtid%';
+----------------------------------+--------------------------------------------------------------------------------------------+
| Variable_name                    | Value                                                                                      |
+----------------------------------+--------------------------------------------------------------------------------------------+
| binlog_gtid_simple_recovery      | ON                                                                                         |
| enforce_gtid_consistency         | ON                                                                                         |
| gtid_executed                    | e29d3917-9dbb-11e9-8b64-e4434b6e2c80:1-93632,
e595a4ee-9dbb-11e9-a0f5-e4434b6e3094:1-30042 |
| gtid_executed_compression_period | 1000                                                                                       |
| gtid_mode                        | ON                                                                                         |
| gtid_owned                       |                                                                                            |
| gtid_purged                      | e29d3917-9dbb-11e9-8b64-e4434b6e2c80:1-4803,
e595a4ee-9dbb-11e9-a0f5-e4434b6e3094:1-30042  |
| session_track_gtids              | OFF                                                                                        |
+----------------------------------+--------------------------------------------------------------------------------------------+
8 rows in set (0.01 sec)

 

3. 修改配置文件

在配置文件中添加GTID相關參數,涉及到gtid的參數以下:

server-id:每一個MySQL 實例的ID值,不能相同。必選項
gtid_mode = ON: MySQL是開啓GTID模式.
enforce-gtid-consistency=on:開啓GTID複製是,保證GTID的一致性.
log-bin:MySQL 必須開啓binlog.
binlog_format=row: MySQLbinlog 的事實標準,其餘格式會致使數據丟失.
log-slave-updates=on:級聯複製,當slave接受到master的更新且執行完畢以後,執行的binlog是否寫入slave的binlog記錄中.
相關文章
相關標籤/搜索