设为首页 收藏本站
查看: 353|回复: 0

[经验分享] 一个mysql dba这几年犯的错

[复制链接]

尚未签到

发表于 2016-10-18 10:13:01 | 显示全部楼层 |阅读模式
  http://blog.xupeng.me/2013/06/27/mistakes-in-production-system-these-years/
  一个mysql dba这几年犯的错
  得知下厨房的数据被误删了,正在紧张恢复中。作为犯过很多次严重错误的人,我最想说的是,善待当事人吧,此刻他在承受着巨大的压力,比其他任何人都要心焦,他会很感激你的善言和善意。
  这几年犯过很多次严重影响线上服务的错误,像重启了错误的节点这样的事情应该算作能够对线上造成影响的最微不足道的错误,就只简单说几件现在都还让我心有余悸的事吧。
停用线上 memcache 集群
  在调整 memcache 客户端配置的使用和部署方式之前,尽管经过了多次测试,比如在部分节点先上线,确认没有问题之后上线所有的应用服务器,但还是使用了错误的配置,导致线上 所有应用禁用了 memcache,巨大的访问压力瞬间拖垮了数据库,从发现问题到完全恢复持续了将近二十分钟。
软件 bug 导致线上 memcache 集群被污染
  上线的代码在特定条件下会禁掉对 memcache 的使用,导致在本应清除 cache 的情况下没有清除,污染了整个线上的 memcache 集群,后果是各处功能出现诡异的问题,比如提醒死也叉不掉… 不得不将整个 memcache 集群 flush 一遍消除影响,耗时半天。
恢复数据时删除了更多数据
  线上有豆列被误删了,从备份紧急恢复时,使用 mysqldump 导出需要恢复的那部分数据,但是遗憾的是连 DROP TABLE ... 也一起 dump 了,并且在线上执行之前都没有意识到。结果,原本需要恢复的只是一个豆列,恢复之后只剩下了一个豆列,豆列功能紧急只读,重新恢复数据并做数据合并…
数据库主从切换时从库还未跟上同步
  我在给从库热身,准备切换主从,这时候有两个不愿意透露姓名的同事来找我聊另外一件事情,很愉快地聊完,我愉快地发现已经热身完了,于是愉快地用土 脚本做了主从切换,然后悲剧地收到了报警,数据冲突同步中断了,原来是热身过程中从库因为压力比较高造成的滞后还未追平,而我已经愉快地做了切换。
误操作并误删数据文件
  在一次主从切换之后,我突然发现新的 slave 同步在继续,但是 binlog 却停止写入了,之后惊讶地发现 master 上的 SQL_LOG_BIN 竟然是一个 global 级别的变量,并且值是 0。原来是之前在 slave 上调整索引时,本该 SET SQL_LOG_BIN=0,却无意识地执行了 SET GLOBAL SQL_LOG_BIN=0, 禁用了整个 slave 实例而不只是当前 session 的 binlog,主从切换之后,整个集群就只剩下了一个节点有完整的数据,在我发现并修复这个问题之前,新 slave 上已经缺失了 3 分钟的数据。尝试了各种方法,想要准确无误地修复这 3 分钟的数据还是挺有难度的,尤其是在承受巨大精神压力的情况下,只好选择了从 master 重建。然而在我备份完 master 节点,重建新 slave 时又误删了 slave 上的数据文件,这下更刺激了,在新的 slave 重建完成之前,如果 master 宕机,我就真的连一个可以应付线上压力的节点都没有了,哪怕是一个缺少了 3 分钟数据的实例。
  在发生这些事情时,真的是想死的心都有,支撑我的还有一个信念:无论如何把这个烂摊子收拾完了再死!而有过这样的经历,我就非常感激那些本来有绝对 权利责难我,但在事情发生时立刻马上挽起袖子和我一起解决问题,事后帮我一起想办法如何避免这样的问题再发生的人,比如不愿意透露姓名的 hongqn 和 flycondor。
  经历和看到过越多这样的事情,我就越觉得犯错是不可避免的,无论你思维有多缜密,行事有多谨慎,只要做事就无可避免地会犯错误,或大或小,甚至现在每隔一段时间发现自己没有在线上犯错误,就会想:我最近在干嘛?
  最后,备份不做,日子甭过,真的会有半夜鬼敲门,另外,作为 SA 或 DBA,真的需要确保每一个危险操作都至少是可以 rollback 到上一步的,并且在进行下一步操作之前,要确认所有已知状态都是正常的,工具比人更擅长做这些事,人的精力应该花在让这些工具更加可靠上。
  注:最后一个问题涉及 MySQL 5.5 相对于之前版本的一个行为变化,参考:

  • Bug #67433 Using SET GLOBAL SQL_LOG_BIN should not be allowed
  • Twitter 修复了它

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-287847-1-1.html 上篇帖子: PHP开发学习-Apache+PHP+MySQL环境搭建 下篇帖子: 浅析MySQL中exists与in的使用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表