阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MySQL二进制日志恢复数据报错:@@GLOBAL.GTID_MODE = OFF.

134次阅读
没有评论

共计 2384 个字符,预计需要花费 6 分钟才能阅读完成。

解决 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 timeOFF <-> 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 模式,上述不支持的语句将会返回错误。

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2018-01/150123.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-22发表,共计2384字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中