您好,登錄后才能下訂單哦!
解決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模式,上述不支持的語句將會返回錯誤。
免責(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)容。