美文网首页MySQL(总)MySQL备份
逻辑导入导致MySQL崩溃案例

逻辑导入导致MySQL崩溃案例

作者: 飞翔的Tallgeese | 来源:发表于2018-09-27 11:29 被阅读3次

    主机环境

    OS:CentOS6.8

    OS内存:7G

    MySQL版本:5.7.22

    innodb_buffer_pool:6G


    最近发现MySQL测试库在每天下午5点左右会莫名崩溃,排查问题发现崩溃时间前后有一个定时任务在执行,这个定时任务会在每天下午4点半执行逻辑导入;将定时任务改到凌晨执行后,第二天早晨上班发现数据库又崩了。

    由于error.log不会有任何有用的报错信息,因此这次结合系统日志/var/log/messages来进行问题的复现

    开始执行逻辑导入

    mysql -uroot -p"密码" xxxxx < /data/wp/xxxxx.2018-09-27.sql

    打开top可以看到在几分钟之后,mysqld进程的内存使用率开始飙升,最终突破91%后mysqld进程消失在top显示列表中

    导入界面显示已经与MySQL服务失去连接

    从系统日志来看,这就是因为逻辑导入引起的oom事件(系统日志显示如下)

    由于我是没设置swap的,如果有swap的话,或许能撑一下


    参考网上的方法,一共进行了2种尝试

    第一种是在导入语句中加入参数-q,据说可以不产生缓存

    mysql -uroot -p"密码" -q xxxxx < /data/wp/xxxxx.2018-09-27.sql

    然而经过测试,该方法并没有什么卵用

    第二种方法是在修改innodb_open_files这个参数

    在配置文件中,这个参数我设置的是65535,实际使用只有几百

    在cnf配置文件中将该参数由65535调整为2048,之后重启mysql发现初始占用内存的确有不小的改观,从31%下降到12%

    然而在多次的导入之后,仍然发生了oom报错

    此外open_files这个参数不宜设置得过小


    最终的解决方案是调整了innodb_buffer_pool,毕竟对于总内存仅有7G的OS来说将mysql的内存设置到6G实在是有点太大了;这是此次oom事件的深层次原因

    而直接的导火索就是此次的逻辑导入,该库日常的使用也就是不到3G的样子而已

    相关文章

      网友评论

        本文标题:逻辑导入导致MySQL崩溃案例

        本文链接:https://www.haomeiwen.com/subject/wsfeoftx.html