MySQL二進位日誌恢複資料報錯:@@GLOBAL.GTID_MODE = OFF.

來源:互聯網
上載者:User

MySQL二進位日誌恢複資料報錯:@@GLOBAL.GTID_MODE = OFF.

解決MySQL利用二進位日誌恢複資料報錯: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: 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

伺服器相關環境參數:

伺服器系統: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  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相關知識:

GTID(GlobalTransaction ID)是對於一個已提交事務的編號,並且是一個全域唯一的編號。GTID實際上是由UUID+TID組成的。其中UUID是一個MySQL執行個體的唯一標識。TID代表了該執行個體上已經提交的事務數量,並且隨著事務提交單調遞增。

MySQL5.6增加了GTID複製。

一個事務對應一個唯一ID。

一個GTID在一個伺服器上只會執行一次。

GTID是用來替代以前classic的複製方法。

優點:

相對於行複製來講資料安全性更高;

故障切換更簡單;

GTID的使用局限:

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

不支援create table … select 語句複製(主庫直接報錯);不支援sql_slave_skip_counter;

對於createtemporary table 和drop temporary table語句不支援;

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

在一個複製組中,必須要求統一開啟CTID或是關閉GTID;

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

開啟DTID後,就不在使用原來的傳統的複製方式;

gtid和非gtid的mysql執行個體是不能複製資料的,要麼都是gtid,要麼都是普通的;

更新非事務引擎表,在同一事務中更新事務表與非事務表將導致多個GTIDs分配給同一事務;

暫存資料表,事務內部不能執行建立刪除暫存資料表語句,但可以在事務外執行,但必須設定set autocommit = 1;

CREATE TABLE … SELECTstatements

不安全的基於語句複製,實際是兩個獨立的事件,一個用於建表,一個用於向新表插入源表資料。

不執行不支援的語句

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

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.