古黑论3月6号故障复盘原创 |
GMT+8 2020-3-6 , 12点左右,论坛数据库崩溃,导致了6个多小时无法访问。
一、为什么会崩溃? 先说说崩溃的原因吧。前天傍晚有人反应无法发送注册邮件 ,开始怀疑是前几天合并的代码出了问题,但是找了一晚上,也没发现问题在哪里,暂时作罢。 🤙🪐🎂🔞🦌 第二天(3月6号)中午就重启了服务器(迫不得已使出重启大法),重新启动后,网站提示连接数据库失败,当时就慌得一批。 马上登录服务器,发现数据库启动失败了。 👩✈️🥾🔋😫💅 上网搜索看见一个坑爹的文章 不加思索的我就删除了 ibdata1、ib_logfile0、ib_logfile1 👍🔥🍇📶🐤 删除后数据库确实能启动了,但是 !启动后程序就报 xxx表不存在,登录 mysql,show tables 发现表是有的,但是 select 就提示不存在。 接下来几个小时都在根据报错提示,上网搜索答案。 二、修复过程 在 stackoverflow上看到这个 🦷🚗🔪⁉🦮 ,关于 innodb_force_recovery = 1 的意思 。 🤞🎠🍊🆗🐴 又继续找资料,说 my.cnf 加入 innodb_force_recovery = 1 后,要导出数据库,删掉 ibdata1、ib_logfile0、ib_logfile1 ,把导出的备份重新导入。备份的时候又提示错误 : 引用 👍🚐🦀🅱🐤开始也以为是连接超时,又增大超时时间.... 也没用 👈🎢🧊➡🐒忽然想起来,不知道在哪里看见一个信息:“如果表损坏了,备份也会提示 这个错误” 三、怎么恢复的? 最后只能从备份机器上拿回3月6号凌晨的数据,恢复。 👈🎢🥭❎🦉 四、邮件注册发送不了 这个问题原因是,前几天根据这个 pr 把 $_G['gp_xx'] 删除了。 👩👞🪟😴🤝 论坛的邮件发送的是二次开发,不是使用 SMTP 发信(会暴露站源 ip),而是使用 API 发信,里面获取 email 的方式是 $_G['gp_xx'] ,修复之后就可以了。 感谢 指出这个 bug. 五、本次故障的收获🥷👖📐😂👈 删除文件前一定先考虑备份! InnoDB 中有共享表空间和独立表空间的概念。 🦴🚠🍞🔞🦟 共享表空间就是 ibdata1,独立表空间放在每个表的 .ibd(数据和索引)和 .frm(表结构)为后缀的文件中。单独的表空间只存储该表的数据,索引和插入缓冲的 BITMAP 等信息,其余还放在共享表空间中。 ibdata文件存的是数据库的表数据,如缓存,索引等。🧒🛍🔋👄
帖子热度 4561 ℃
|
|
通过这个事件,让你知道了不要轻易相信互联网上的教程【偷笑】
|
论坛两年多没有出现故障了,这次真是打了我一巴掌。
|
你胆子真大,上来就删啊,下次先不删而是把要删的先移动到别的文件夹吧#d41:这样比较稳妥
|