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

[经验分享] MySQL异常故障总结

[复制链接]

尚未签到

发表于 2018-9-26 13:05:05 | 显示全部楼层 |阅读模式
  在2017年里,项目上的MySQL出了几个问题,记录总结一下,给自己一个教训!
  废话不多说了,直接进入问题主题:
  问题一:MySQL单表千万级数据量"add"字段异常分析
  问题描述:
  项目一个新功能,需要对有1200w+的表"tb_bw_mobile"新增2个字段"batch_num"、"data_status";执行SQL月5-6分钟后,查询数据,发现未增加字段;约10-13分钟后limit 1、10、100条数据,均为发现有新增的2个字段;此时查询表结构,发现表结构未变化;约24分钟后,MySQL命令行端抛出异常"ERROR 1034 (HY000): Incorrect key file for table 'tb_ec_bw_mobile'; try to repair it";再此核实表结构、数据,发现均未有任何改变;
  当时就蒙蔽了,怎么会提示"try to repair it",表结构怎么会有问题?通知测试人员,将生产的表结构和10w条数据导出来在测试环境进行测试,结果并没有什么问题;此时查看MySQL日志,发现集群出现了异常
DSC0000.jpg

  执行SQL时抛出异常,尝试4次修改当前执行事务未306;修改失败后,当前事务在从节点的状态从SYNCD->OPEN->CLOSED,再看后面的信息,MySQL从节点服务器异常。
  此时重启mysql服务,查看mysql进程;基于rsync服务以及4444端口来同步恢复数据;同时查看进程的线程和io,确定是在做数据同步;约30分钟后,查询mysql日志及系统日志,mysql数据同步成功且成功加入集群。集群正常提供服务
DSC0001.jpg

  

**此时回过头来查看执行sql抛出的异常"ERROR 1034 (HY000): Incorrect key file for table 'tb_ec_bw_mobile'; try to repair it";在官网中看到解决办法,需创建一张临时表做数据迁移,而不是直接对千万级数据直接add字段;  


  • DSC0002.jpg


  问题二:MySQL临时表问题
  问题描述:
  MySQL应用所在云主机系统磁盘容量不断减小,在tmp目录下不断生成以MAD、MAI为后缀的文件,导致前端web服务mgr在1min对mysql发起请求的连接高于1000+;此时查看mysql的进程,发现有”Copy data to tmp”的相关事务在执行,原因是黑白名单功能把”tb_ec_contact”和”tb_ec_bw_mobile”两张千万级数据表关联起来
DSC0003.jpg

  问题分析:
  Mysql临时表分为”内存临时表”和”磁盘临时表”;一般情况下,MySQL会先创建内存临时表,但是内存临时表超过配置指定的值后,MySQL会将内存临时表导出到磁盘临时表;使用临时表的场景:对Innodb表进行alter和create操作或者是sql语句效率低下事务执行过慢,未做优化,以下为网关说明;
DSC0004.jpg

  

    需要注意的是:此配置默认路径是/tmp目录,生成以MAD、MAI为后缀的文件,在短时间内很容易将系统磁盘占慢,导致依赖mysql的程序运行异常;文件删除后系统磁盘空间也不会释放,因为mysql的线程正在运行,除非停止mysql服务;(可以使用lsof查看);但是好处是如果线程执行完了,会将生成的文件自动删除,释放系统磁盘空间;  

  此参数配置不能在线进行全局修改,只能先停止mysql服务,在配置文件中写明相关参数重启服务才行;但是临时表的空间和行数可在线修改;
  show global variables like “%tmp%”;
  tmpdir  ##指明mysql磁盘临时表存储路径
  slave_load_tmpdir=/data/mysql/slave_tmpdir  ##指明从节磁盘临时表路径
  max_tmp_tables=128  ##指明支持多少个内存临时表
  tmp_table_size=33554432   ##指明临内存时表的大小
  max_heap_table_size=33554432  ##指明内存临时表表支持多少行



运维网声明 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-602380-1-1.html 上篇帖子: mysql5.7未生成初始密码.mysql_secert文件,登陆数据库 下篇帖子: 老男孩教育MySQL高级专业DBA实战课程2015
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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