前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >技术分享 | 需要小心配置的 gtid_mode

技术分享 | 需要小心配置的 gtid_mode

原创
作者头像
爱可生开源社区
发布2022-07-26 12:47:41
6960
发布2022-07-26 12:47:41
举报
文章被收录于专栏:爱可生开源社区

作者:王雅蓉

DBA,负责 MySQL 日常问题处理和 DMP 产品维护。

本文来源:原创投稿

*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。


背景信息:

本文章与一次日常运维过程中发现的问题有关。问题如下:

客户给接管数据库进行备份,发生报错:

代码语言:txt
复制
错误: manual backup error: rpc error: code = Unknown desc = task(manual_backup_manual_mysql-2db0mi_2022_07_09_22_30_33_mysql-2db0mi_2022_07_09_22_30_33) is failed,
 reason is parse last gtid from file(/dmp/mysql/backup/3306/backup-616678719/tmp/backup.log) failed\n\n回滚日志:\n\t

分析:

因为报错是原因是从文件中解析最后一个 gtid 失败,所以先检查 gtid 参数

数据库中的 gtid 参数:gtid_mode=OFF_PERMISSIVE(接管后数据库重启过)

检查配置文件中gtid_mode相关信息为

通过官网查询相关资料,得知gtid_mode有4个值:OFF;OFF_PERMISSIVE;ON_PERMISSIVE;ON

在此配置下,平台无法开启从库高可用配置,从库复制会报错:

代码语言:txt
复制
            Slave_IO_Running: No
            Slave_SQL_Running: Yes
......
                Last_IO_Errno: 1593
                Last_IO_Error: The replication receiver thread cannot start in AUTO_POSITION mode: the master has GTID_MODE = OFF_PERMISSIVE instead of ON.
               Last_SQL_Errno: 0
               Last_SQL_Error:

而且此时的数据库无法进行备份

本地测试:

1)将数据库配置文件的gtid_mode修改为=1,并重启数据库

2)重启后登录数据库中查看gtid_mode参数值,发现重启后的gtid_mode=OFF_PERMISSIVE

3)将数据库配置文件的gtid_mode修改为=ON,并重启数据库

4)重启后登录数据库中查看gtid_mode参数值,发现重启后的gtid_mode=ON

可得出:gtid_mode = 1效果不等于gtid_mode = ON,而是等于gtid_mode = OFF_PERMISSIVE
因为gtid_mode参数的类型为Enumeration,所以变量具有多个值的别名

gtid_mode变量

配置文件可写值

OFF

0

OFF_PERMISSIVE

1

ON_PERMISSIVE

2

ON

3

代码语言:txt
复制
mysql> show variables like "gtid_mode";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| gtid_mode     | OFF   |
+---------------+-------+
1 row in set (0.01 sec)
 
mysql> set global gtid_mode=0;
Query OK, 0 rows affected (0.00 sec)
 
mysql> show variables like "gtid_mode";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| gtid_mode     | OFF   |
+---------------+-------+
1 row in set (0.00 sec)
 
mysql> set global gtid_mode=1;
Query OK, 0 rows affected (0.00 sec)
 
mysql> show variables like "gtid_mode";
+---------------+----------------+
| Variable_name | Value          |
+---------------+----------------+
| gtid_mode     | OFF_PERMISSIVE |
+---------------+----------------+
1 row in set (0.01 sec)
 
mysql> set global gtid_mode=2;
Query OK, 0 rows affected (0.01 sec)
 
mysql> show variables like "gtid_mode";
+---------------+---------------+
| Variable_name | Value         |
+---------------+---------------+
| gtid_mode     | ON_PERMISSIVE |
+---------------+---------------+
1 row in set (0.00 sec)
 
mysql> set global gtid_mode=3;
Query OK, 0 rows affected (0.01 sec)
 
mysql> show variables like "gtid_mode";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| gtid_mode     | ON    |
+---------------+-------+
1 row in set (0.00 sec)

解决方法:

将配置文件中gtid_mode = 1改为gtid_mode = ON

在数据库中输入

代码语言:txt
复制
mysql> set global GTID_MODE = ON_PERMISSIVE;
Query OK, 0 rows affected (0.02 sec)
  
//在主从节点上执行如下命令,检查匿名事务是否消耗完毕,最好多检查几次,以便确认该参数的值是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> set global GTID_MODE = ON;
Query OK, 0 rows affected (0.02 sec)

修改后就可以成功备份数据库了

总结:

日常运维中,我们习惯将设置为ON的参数写成=1,但是gtid_mode=1却不是将gtid_mode设置为ON
所以需注意一定要写gtid_mode=ON,或者gtid_mode=3

参考:

https://dev.mysql.com/doc/mysql-replication-excerpt/8.0/en/replication-options-gtids.html#sysvar_gtid_mode

https://dev.mysql.com/doc/mysql-replication-excerpt/8.0/en/replication-mode-change-online-enable-gtids.html

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景信息:
  • 分析:
  • 解决方法:
  • 总结:
    • 参考:
    相关产品与服务
    云数据库 SQL Server
    腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档