溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

解決mysql二進制日志恢復(fù)數(shù)據(jù)報錯:@@GLOBAL.GTID_MODE = OFF.

發(fā)布時間:2020-08-02 03:24:25 來源:網(wǎng)絡(luò) 閱讀:21928 作者:蓮池管俊濤 欄目:MySQL數(shù)據(jù)庫

解決mysql利用二進制日志恢復(fù)數(shù)據(jù)報錯:ERROR 1781 (HY000) at line 16: @@SESSION.GTID_NEXT cannot be set to UUID:NUMBER when @@GLOBAL.GTID_MODE = OFF.

工作中,運用二進制日志,幫開發(fā)的同事恢復(fù)數(shù)據(jù)時,出現(xiàn)了報錯告警:

[root@localhost tmp]# mysqlbinlog --no-defaults mysql-bin.000614|mysql -uroot -p
Enter password:
ERROR 1781 (HY000) at line 16: @@SESSION.GTID_NEXT cannot be set to UUID:NUMBER when @@GLOBAL.GTID_MODE = OFF.
[root@localhost tmp]# mysqlbinlog --no-defaults mysql-bin.000614|mysql -uroot -p
Enter password:
[root@localhost tmp]# echo $?
0

服務(wù)器相關(guān)環(huán)境參數(shù):

服務(wù)器系統(tǒng):CentOS Linux release 7.3.1611 (Core)

MySQL版本:

mysql> select version();
+-----------+
| version() |
+-----------+
| 5.7.13    |
+-----------+
1 row in set (0.00 sec)


解決辦法:

配置gtid選項

配置前:

mysql> show global variables like 'gtid_mode';
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    24
Current database: gold
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| gtid_mode     | OFF   |
+---------------+-------+
1 row in set (0.10 sec)

 

配置后:

mysql> set @@GLOBAL.GTID_MODE = on;
ERROR 1788 (HY000): The value of @@GLOBAL.GTID_MODE can only be changed one step at a time: OFF <-> OFF_PERMISSIVE <-> ON_PERMISSIVE <-> ON. Also note that this value must be stepped up or down simultaneously on all servers. See the Manual for instructions.
mysql> set @@GLOBAL.GTID_MODE = OFF_PERMISSIVE;
mysql> show global variables like 'gtid_mode';
+---------------+----------------+
| Variable_name | Value          |
+---------------+----------------+
| gtid_mode     | OFF_PERMISSIVE |
+---------------+----------------+
1 row in set (0.00 sec)

 GTID相關(guān)知識:

GTID(GlobalTransaction ID)是對于一個已提交事務(wù)的編號,并且是一個全局唯一的編號。GTID實際上是由UUID+TID組成的。其中UUID是一個MySQL實例的唯一標識。TID代表了該實例上已經(jīng)提交的事務(wù)數(shù)量,并且隨著事務(wù)提交單調(diào)遞增。

MySQL5.6增加了GTID復(fù)制。

一個事務(wù)對應(yīng)一個唯一ID。

一個GTID在一個服務(wù)器上只會執(zhí)行一次。

GTID是用來替代以前classic的復(fù)制方法。


優(yōu)點:

相對于行復(fù)制來講數(shù)據(jù)安全性更高;

故障切換更簡單;


GTID的使用局限:

不支持非事務(wù)引擎(從庫報錯,stopslave; start slave; 忽略);

不支持create table … select 語句復(fù)制(主庫直接報錯);不支持sql_slave_skip_counter;

對于createtemporary table 和drop temporary table語句不支持;

不允許在一個SQL同時更新一個事務(wù)引擎和非事務(wù)引擎的表;

在一個復(fù)制組中,必須要求統(tǒng)一開啟CTID或是關(guān)閉GTID;

開啟DTID需要重啟(5.7中可能不需要);

開啟DTID后,就不在使用原來的傳統(tǒng)的復(fù)制方式;

gtid和非gtid的mysql實例是不能復(fù)制數(shù)據(jù)的,要么都是gtid,要么都是普通的;

更新非事務(wù)引擎表,在同一事務(wù)中更新事務(wù)表與非事務(wù)表將導(dǎo)致多個GTIDs分配給同一事務(wù);

臨時表,事務(wù)內(nèi)部不能執(zhí)行創(chuàng)建刪除臨時表語句,但可以在事務(wù)外執(zhí)行,但必須設(shè)置set autocommit = 1;

 

CREATE TABLE … SELECTstatements

不安全的基于語句復(fù)制,實際是兩個獨立的事件,一個用于建表,一個用于向新表插入源表數(shù)據(jù)。

 

不執(zhí)行不支持的語句

啟用--enforce-gtid-consistency選項啟動GTID模式,上述不支持的語句將會返回錯誤。

 

 


向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI