故障分析 | MySQL 数据”丢失”事件之 binlog 解析应用一则

故障分析 | MySQL 数据”丢失”事件之 binlog 解析应用一则,第1张

备注:考虑信息敏感性,以下分析场景测试环境模拟,相关数据做以下说明

发现了一些端倪,在mysql-bin.000004中有对该表的2次truncate *** 作,等等,好像发现了什么,那条丢失的数据也是在这个mysql-bin.000004文件中,梳理下逻辑,难道那条记录在2次truncate之间,于是单独对这个binlog做详细解析,得到以下信息

到此基本了解了这条记录为何会诡异丢失了 ,与客户确认跑批灌数据的逻辑,了解到会对该表做truncate,但由于 误 *** 作 ,在跑批开始后,又触发了一轮truncate行为,导致已经插入到该表的部分数据再次被清理了,也就导致了在解析binlog时部分记录丢失了,但并未观测到有删除的行为,而是被truncate方式清理.

备注 :虽然binlog记录的信息足够多,但当故障原因定位后,由于其并未记录 对该 *** 作的IP及用户 信息,如果不开审计,也只能知道发生了该行为,但无法具体定位触发该行为的"人".

具体的解决步骤如下,希望能帮助遇到同样问题的同学们:

找到并修改my.cnf文件。在不同的Linux系统下,my.cnf放在不同的位置。这里以Ubuntu Server做示例,其他系统请根据情况自行找到my.cnf的路径。一般只会存放在/etc/my.cnf或者/etc/mysql/my.cnf下。

首先用vim打开my.cnf:

vim /etc/mysql/my.cnf

看看是否有绑定本地回环地址的配置,如果有,注释掉下面这段文字:(在文字之前加上#号即可)

bind-address = 127.0.0.1

然后找到[mysqld]部分的参数,在配置后面建立一个新行,添加下面这个参数:

skip-name-resolve

保存文件并重启MySQL:

/etc/init.d/mysql restart

这样就会发现,问题已经解决了!远程连接不会丢失了。

补充 mysql连接不原因

1. 首先要排查网络问题和防火墙的问题

这个是必须的, 你要是连MySQL的服务器都连不上, 那还访问什么? 怎么检查呢? ping一下

ping 192.168.0.11 ping 的通的话, 再去检查一下 3306端口是不是被防火墙给挡掉了

ping 192.168.0.11:3306 或者干脆把防火墙关掉,service iptables stop (Redhat ) 或 ufw disable(ubuntu)

这一步没问题的话, 开始下一步:

2. 要排查有没有访问权限 说到访问权限, MySQL分配用户的时候会指定一个host, 比如我的 host 指定为 192.168.0.5 , 那么这个账号就只能 5 这一台机器访问, 其他的机器用这个账号访问会提示没有权限。 host 指定为 % 则表示允许所有的机器访问。

一般来说出于安全方面的考虑,遵循最小权限原则, 权限的问题就不多讲了, 不会的自己查手册。 确定了权限没问题的话进行下一步:

3. 要排查MySQL的配置

检查mysql的配置文件, Linux下MySQL的配置文件叫 my.cnf windows下的叫 my.ini,检查这个配置项: –bind-address=IP


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5900630.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-07
下一篇 2023-03-07

发表评论

登录后才能评论

评论列表(0条)

保存