我想要握紧的并不是匕首或是什么,只不过是他的掌心而已。 收藏本站
登陆 / 注册 搜索

阅读: 611   回复: 6

古黑论3月6号故障复盘

小执念 古黑浩劫论坛大牛 2020-3-7 15:53 |显示全部楼层

可遇不可求的事:故乡的云,上古的玉,随手的诗,十九岁的你。

管理员
GMT+8 2020-3-6 , 12点左右,论坛数据库崩溃,导致了6个多小时无法访问。

一、为什么会崩溃?

先说说崩溃的原因吧。前天傍晚有人反应无法发送注册邮件 注册BUG,开始怀疑是前几天合并的代码出了问题,但是找了一晚上,也没发现问题在哪里,暂时作罢。

第二天(3月6号)中午就重启了服务器(迫不得已使出重启大法),重新启动后,网站提示连接数据库失败,当时就慌得一批。

马上登录服务器,发现数据库启动失败了。

古黑论3月6号故障复盘 TIM截图20200307132754.png

上网搜索看见一个坑爹的文章

古黑论3月6号故障复盘 TIM截图20200307133249.png

不加思索的我就删除了 ibdata1、ib_logfile0、ib_logfile1


删除后数据库确实能启动了,但是 !启动后程序就报 xxx表不存在,登录 mysql,show tables 发现表是有的,但是 select 就提示不存在。

接下来几个小时都在根据报错提示,上网搜索答案。

二、修复过程
在 stackoverflow上看到这个

古黑论3月6号故障复盘 TIM截图20200307134929.png
按照上面说的做了之后,登陆数据库,发现能查询了,然后重新启动数据库,发现一连接数据库,数据库就自动关闭了....

mysql 官方文档 ,关于 innodb_force_recovery = 1 的意思 。

又继续找资料,说 my.cnf 加入 innodb_force_recovery = 1 后,要导出数据库,删掉 ibdata1、ib_logfile0、ib_logfile1 ,把导出的备份重新导入。

备份的时候又提示错误 :

mysqldump: Error 2013: Lost connection to MySQL server during query when dumping table...

开始也以为是连接超时,又增大超时时间....

也没用


忽然想起来,不知道在哪里看见一个信息:“如果表损坏了,备份也会提示 这个错误”

三、怎么恢复的?

最后只能从备份机器上拿回3月6号凌晨的数据,恢复。

四、邮件注册发送不了

这个问题原因是,前几天根据这个 pr !344 删除 $_G['gp_xx']调用并默认关闭本功能 把 $_G['gp_xx'] 删除了。

论坛的邮件发送的是二次开发,不是使用 SMTP 发信(会暴露站源 ip),而是使用 API 发信,里面获取 email 的方式是 $_G['gp_xx'] ,修复之后就可以了。

感谢 https://www.guhei.net/post/jb2847 指出这个 bug.

五、本次故障的收获

删除文件前一定先考虑备份!

InnoDB 中有共享表空间和独立表空间的概念。

共享表空间就是 ibdata1,独立表空间放在每个表的 .ibd(数据和索引)和 .frm(表结构)为后缀的文件中。

单独的表空间只存储该表的数据,索引和插入缓冲的 BITMAP 等信息,其余还放在共享表空间中。

ibdata文件存的是数据库的表数据,如缓存,索引等。



空谷幽兰 仗剑天涯 2020-3-13 19:16 来自手机 |显示全部楼层

从前车马很慢,书信很远,一生只够爱一个人,但是可以纳很多妾啊!

精华达人 主题破百 以坛为家 论坛元老
通过这个事件,让你知道了不要轻易相信互联网上的教程【偷笑】
小执念 古黑浩劫论坛大牛 2020-3-7 16:04 |显示全部楼层

可遇不可求的事:故乡的云,上古的玉,随手的诗,十九岁的你。

管理员
论坛两年多没有出现故障了,这次真是打了我一巴掌。
testnull 「龙战于野」 2020-3-14 11:45 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

你胆子真大,上来就删啊,下次先不删而是把要删的先移动到别的文件夹吧这样比较稳妥
您需要登录后才可以回帖 登录 | 注册账号  

本版积分规则

关于本站|大事记|小黑屋|古黑论 网站统计

GMT+8, 2020-9-25 21:44 , Processed in 0.029965 second(s), 26 queries , Redis On.

© 2015-2020 GuHei.Net

Powered by Discuz! X3.4

快速回复 返回列表