mysql .frm文件丢失_实例中所有frm文件消失的幕后黑手

今天遇到MySQL实例中frm文件无缘无故消失,而ibd文件仍然存在。晚上终于把问题定位到,罪魁祸首是pt-stalk. 长话短说,使用pt-stalk时,有个选项很重要,一定要注意,dest 千万不要指定为 MySQL的数据目录,或是其它重要的目录,因为指定的这个目录中的文件

今天遇到MySQL实例中frm文件无缘无故消失,而ibd文件仍然存在。晚上终于把问题定位到,罪魁祸首是pt-stalk.

长话短说,使用pt-stalk时,有个选项很重要,一定要注意,–dest 千万不要指定为 MySQL的数据目录,或是其它重要的目录,因为指定的这个目录中的文件有可能被删除的风险。

我今天使用的pt-stalk 命令在3个实例上运行,第一个实例的命令为:

pt-stalk --log /u01/mysql/pt-stalk.log --dest /u01/mysql --pid /u01/mysql/pt-stalk.pid --daemonize --collect-gdb --sleep 1 --iterations 20 --function status --variable Slave_trx_pending --threshold 100 -- --user=root --port=3306 --host=127.0.0.1

悲翠的发现复制中断,原因是没有找到表。登录上去看,只有库,没有任何表!

再看看/u01/mysql/data/db下,只有ibd文件,frm文件全部消失了!

下午只是对mysqld进行了升级,并且只是重启了第一个实例,觉得与下午打的补丁没有半毛关系。

此时怀疑是脚本做的,因为上千个frm文件,包括mysql/bin, mysql/scripts全部没了。

无奈只好重做,从主库拷贝frm文件和对应的bin到对应的目录,重启搞定。

晚上10多时,发现实例2和实例3全部同事遇难,发现同样的问题,泪奔。先恢复再思考。

仔细思考,下午除了升级mysqld外,就是用了pt-stalk。pt-stalk之前也用过,没有啥问题。

三个实例都加了监控,都出了问题,唯独第四个实例没有加监控,好好的运行着,让我不能不怀疑pt-stalk。

先在pt-stalk找到可疑的代码:

# Delete collect files which more than --retention-time days old.

find "$dir" -type f -mtime +$retention_time -exec rm -f '{}' \;

和pt-stalk的伪代码对应起来,为清理老数据阶段:

while true; do

if --variable from --function is greater than --threshold; then

observations++

if observations is greater than --cycles; then

capture diagnostics for --run-time seconds

exit if --iterations is exceeded

sleep for --sleep seconds

done

done

clean up data that's older than --retention-time

sleep for --interval seconds

done

其中retention-time默认为30天,也就是说,可能有30天之前的数据被清除掉。

找到对应的代码,把rm改为echo,再在自己的测试环境运行下,果然是这个问题:

### 第一次没有sudo跑 ###

find: `/u01/ps5518/mysql-test/var/install.db/mtr': Permission denied

find: `/u01/ps5518/mysql-test/var/install.db/performance_schema': Permission denied

rm: cannot remove `/u01/ps5518/mysql-test/var/install.db/ibdata1': Permission denied

rm: cannot remove `/u01/ps5518/mysql-test/var/install.db/ib_logfile1': Permission denied

rm: cannot remove `/u01/ps5518/mysql-test/var/install.db/ib_logfile0': Permission denied

rm: cannot remove `/u01/ps5518/mysql-test/var/install.db/mysql/time_zone_transition.MYD': Permission denied

rm: cannot remove `/u01/ps5518/mysql-test/var/install.db/mysql/user.MYI': Permission denied

rm: cannot remove `/u01/ps5518/mysql-test/var/install.db/mysql/time_zone.MYI': Permission denied

rm: cannot remove `/u01/ps5518/mysql-test/var/install.db/mysql/help_relation.frm': Permission denied

### 第二次sudo跑 但把rm 替换长 echo ###

find: `/u01/ps5518/data/sbtest’: Permission denied

find: `/u01/ps5518/data/test’: Permission denied

问题到此验证。

真的好庆幸,这个备库是交易核心库,还好没有提供业务访问,否则肯定是P0故障了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值