一个MySQL 单表查询SQL,引发一次“故事”

1、描述
故事的过程是这个样子的,MySQL 数据库有一张40多G的大表,开发人员执行了一个单表查询,结果我就收到了一个磁盘空间满的告警。一会儿就不淡定了,谁在搞事情,脑海里各类可能行想了一遍,想到的最多的就是ibtmp1爆了,第一时间线上看一下,查到了最大的那个文件,结果和想的同样。这里咱们要看SQL是怎么写的,表结构是什么样子,而后和官网对比,MySQL在查询的时候有不少可能会使用磁盘临时表,包括表链接、排序、大字段等等。mysql

2、解决方法
临时解决方法:
一、临时扩一下硬盘
二、直接重启sql

终结解决方案
操做步骤:
一、检查数据库状态
ps -ef|grep mysql数据库

二、检查主备库状态
show slave status \G;ide

三、检查数据库关闭参数,要求为1
show variables like 'innodb_fast_shutdown';线程

四、关闭同步进程
stop slave;排序

五、关闭数据库
shutdown;进程

六、设置数据库临时表空间参数
#/etc/my.cnf
innodb_temp_data_file_path = ibtmp1:12M:autoextend:max:10G开发

七、启动数据库服务、同步线程
mysqld_safe --defaults-file=/etc/my.cnf &
start slave;
show slave status\G;同步

八、检查数据库临时表空间参数
show variables like 'innodb_temp_data_file_path';it

九、查看ibtmp1文件大小
du -sh ibtmp1

3、小洁一、永远不要小视一条select xxx from tab;若是你不知道你在干吗,不知道其中的风险,不要在生产系统敲任何一个指令。二、要有敬畏之心。

相关文章
相关标签/搜索