栏目头部广告

MySQL通过mysqldump进行逻辑备份触发DB crash

一、背景阐述

主机环境:CentOS7.X
MySQL版本:5.7.30

业务生产环境中,通过mysqldump对数据库进行逻辑备份是一个非常常见的事情。但是在一次客户报障中,遇到了一个非常奇葩的问题,即,数据库一切正常,只要通过mysqldump对数据库进行备份,MySQL数据库必然crash,并且能够100%复现。通过对MySQL错误日志和服务器系统日志的分析发现MySQL crash之前DB内存使用量暴增,直至OOM。所以我们推测,很有可能是mysqldump操作导致了MySQL数据库内存使用量异常,最终引起DB cash。接着就开始了疯狂的检索和查阅资料,想找到类似案例或者能够通过什么方法去限制mysqldump使用的内存量~

二、问题解决

2.1 资料收集

类似Crash的情况网上的案例并不是非常的对口,直至我们发现了MariaDB的一个已修复BUG:https://jira.mariadb.org/browse/MDEV-20699?focusedCommentId=200706&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-200706

MySQL通过mysqldump进行逻辑备份触发DB crash(图1)

我们通过这篇文章,找到了一个方法,通过设置 stored_program_cache参数来绕过该BUG对数据库mysqldump的影响。MySQL官网对该参数的介绍:https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html

MySQL通过mysqldump进行逻辑备份触发DB crash(图2)

2.2 效果验证

(1)查看stored_program_cache默认值

mysql> show variables like "stored_program_cache";
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| stored_program_cache | 256   |
+----------------------+-------+
1 row in set (0.01 sec)

(2)临时调整stored_program_cache值为16

mysql> set global stored_program_cache=16;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like "stored_program_cache";
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| stored_program_cache | 16    |
+----------------------+-------+
1 row in set (0.00 sec)

(3)再次进行mysqldump备份数据

经测试再次进行mysqldump数据备份时,一切正常,至此mysqldump备份触发DB Crash问题得到解决!!!

作者:UStarGao
链接:https://www.starcto.com/systemtool/266.html
来源:STARCTO
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处

UCloud云平台推荐


UCloud新用户专属注册连接

UCloud CDN超值特惠专场

UCloud全球云主机(UHost/VPS)大促页面

UCloud快杰云主机大促页面

加载中~
文章详情页广告

随便看看

底部广告
`