当前位置:网站首页>技术分享 | 需要小心配置的 gtid_mode
技术分享 | 需要小心配置的 gtid_mode
2022-07-27 02:53:00 【ActionTech】
作者:王雅蓉
DBA,负责 MySQL 日常问题处理和 DMP 产品维护。
本文来源:原创投稿
*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。
背景信息:
本文章与一次日常运维过程中发现的问题有关。问题如下:
客户给接管数据库进行备份,发生报错:
错误: 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

在此配置下,平台无法开启从库高可用配置,从库复制会报错:
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 |
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

在数据库中输入
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
边栏推荐
- Greenplum [deployment 08] database small version upgrade process and problem handling error: open-source-greenplum-db-6 conflicts with
- Review in the sixth week
- C语言学习笔记 —— 内存管理
- Kotlin中lateinit和lazy的原理区别是什么
- There is no problem reading from flick CDC to mysql8 and mysql5. What should I do?
- 真正意义上的数字零售应当具有更加丰富的内涵和意义
- 面试题 16.05. 阶乘尾数
- Subject 3: Jinan Zhangqiu line 2
- JMeter interface test (login, registration)
- Restful fast request 2022.2.2 release, supporting batch export of documents
猜你喜欢

222. Number of nodes of complete binary tree

三种常见的移动底盘运动学模型分析

Want to get the Apache official domain name mailbox? Exclusive interview with Apache linkis five new committers to tell you how to do it

Function pointer and callback function

酷雷曼VR全景为你铺设创业之路

11.zuul路由网关

JVM原理简介

Skywalking distributed system application performance monitoring tool - medium

科目三: 济南章丘五号线

Maximum subarray cumulative sum less than or equal to K
随机推荐
Framework学习之旅:init 进程启动过程
基于风能转换系统的非线性优化跟踪控制(Matlab代码实现)
Golang sends email to the mail Library
Parallel desktop startup virtual machine "operation failed" problem solution
Interview question 16.05 factorial mantissa
科目三: 济南章丘二号线
Lixia action | Yuanqi Digitalization: existing mode or open source innovation?
Notes are a little fun
C# 使用SqlSugar Updateable系统报错无效数字,如何解决?求指导!
Redis (IX) - redis distributed lock
Leetcode daily exercise: sort sentences
11.zuul路由网关
The problem that prevented the installation of umi4 for one day has been solved
利用LCD1602显示超声波测距
暑假加餐|有钱人和你想的不一样(第5天)+电力系统潮流仿真(文档和Matlab代码)
【obs】动态码率:码率估算
分享当下人生——一个高中毕业生在中央电视台的六星期实习经历
jmeter接口测试(登录、注册)
Specified interval inversion in the linked list
JVM原理简介