前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >故障分析 | 我都只读了,你还能写入?

故障分析 | 我都只读了,你还能写入?

原创
作者头像
爱可生开源社区
发布2023-03-13 13:47:06
2830
发布2023-03-13 13:47:06
举报
文章被收录于专栏:爱可生开源社区

作者:秦福朗

爱可生 DBA 团队成员,负责项目日常问题处理及公司平台问题排查。热爱互联网,会摄影、懂厨艺,不会厨艺的 DBA 不是好司机,didi~

本文来源:原创投稿

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


read_only:我都只读了,你还能写进来? xxx:binlog,我写了哦~

背景

业务运行中,高可用管理平台报错MySQL数据库的从库GTID与主库不一致了,从库踢出高可用集群,开启了read_only与super_read_only的从库怎么会GTID不一致呢?

发现问题

首先查看show master status与show slave status,发现从库确实多了一个GTID,然后拿着GTID去binlog里找问题:

发现从库binlog被写入FLUSH TABLES 语句,产生新的GTID号。

本地测试

本地测试发现在开启read_only与super_read_only的实例里面执行 FLUSH TABLES 是可以写入binlog,产生新GTID的。

经业务反馈,这个时间点ClickHouse在从库同步数据,应该就是ClickHouse在某些状态下工作会对MySQL数据库实例下发FLUSH TABLES语句。

官网确实在一个不起眼的地方说这个语句会写入binlog:

Some forms of the FLUSH statement are not logged because they could cause problems if replicated to a replica: FLUSH LOGS and FLUSH TABLES WITH READ LOCK. For a syntax example, see Section 13.7.6.3, “FLUSH Statement”. The FLUSH TABLES, ANALYZE TABLE, OPTIMIZE TABLE, and REPAIR TABLE statements are written to the binary log and thus replicated to replicas. This is not normally a problem because these statements do not modify table data.

However, this behavior can cause difficulties under certain circumstances. If you replicate the privilege tables in the mysql database and update those tables directly without using GRANT, you must issue a FLUSH PRIVILEGES on the replicas to put the new privileges into effect. In addition, if you use FLUSH TABLES when renaming a MyISAM table that is part of a MERGE table, you must issue FLUSH TABLES manually on the replicas. These statements are written to the binary log unless you specify NO_WRITE_TO_BINLOG or its alias LOCAL.

测试了其他语句:

  • flush ENGINE LOGS ;
  • flush ERROR LOGS ;
  • flush GENERAL LOGS ;
  • flush HOSTS ;
  • flush PRIVILEGES ;
  • flush OPTIMIZER_COSTS ;
  • flush QUERY CACHE ;
  • flush SLOW LOGS ;
  • flush STATUS ;
  • flush USER_RESOURCES ;

均会在read_only状态下写入从库的binlog中。

总结

本文简短,主要是给没遇到该情况的同学提醒下,需要注意FLUSH的一些管理命令语句会被写入readonly状态下的从库binlog,从而造成主从GTID不一致;还有就是ClickHouse在同步数据时,某些情况会写入FLUSH TABLE,在使用ClickHouse需要注意(因没CK环境,此条没经过验证,有CK使用经验的同学可自行验证,评论回复^^)。

如果还有其他语句会造成这种现象,也可以评论分享一下,大家一起注意下。

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

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

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

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

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