当前位置:网站首页>技术分享 | 需要小心配置的 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
边栏推荐
- Notes are a little fun
- A. Parkway Walk
- 科目三: 济南章丘6号线
- 搜索旋转排序数组
- 科目三: 济南章丘三号线
- Greenplum [deployment 08] database small version upgrade process and problem handling error: open-source-greenplum-db-6 conflicts with
- NFT数字藏品系统开发:小蚁数智帮助品牌一键上链发行NFT
- B. ICPC Balloons
- Leetcode- > 2-point search and clock in (3)
- Case when in MySQL returns multiple field processing schemes
猜你喜欢

STM32CubeMX学习笔记(41)——ETH接口+LwIP协议栈使用(DHCP)

科目三: 济南章丘三号线

暑假加餐|有钱人和你想的不一样(第5天)+电力系统潮流仿真(文档和Matlab代码)

NFT digital collection system development: old brand literary magazines play with trendy Digital Collections

222. Number of nodes of complete binary tree

【MySQL系列】MySQL索引事务

C how to set different text watermarks for each page of word

Subject 3: Jinan Zhangqiu line 6

Parallels Desktop启动虚拟机“操作失败”问题解决

Stm32cubemx learning notes (41) -- eth interface +lwip protocol stack use (DHCP)
随机推荐
【MySQL系列】MySQL索引事务
Towhee weekly model
Subject 3: Jinan Zhangqiu line 2
A. Round Down the Price
C#怎么实现给Word每一页设置不同文字水印
[OBS] dynamic bit rate: bit rate estimation
第五届强网杯全国网络安全挑战赛 题目复现(有题目附件,详解)
B. ICPC Balloons
jmeter接口测试(登录、注册)
面试题 02.05. 链表求和
Leetcode- > 2-point search and clock in (3)
URDF_ Xcaro
Case when in MySQL returns multiple field processing schemes
452页13万字现代智慧乡镇雪亮工程整体解决方案2022版
搜索旋转排序数组
Notes are a little fun
Have you encountered the situation that CDC reads incomplete MySQL fields? How to deal with it?
VR全景现在是不是刚需?看完你就明白了
leetcode每日一题:数组的相对排序
First pass of routing strategy