Mysql安全删除大表

运维 系统运维
由于业务需求不断变化,可能在DB中存在超大表占用空间或影响性能;对这些表的处理操作,容易造成mysql性能急剧下降,IO性能占用严重等。先前有在生产库drop table造成服务不可用;rm 大文件造成io跑满,引发应用容灾;对大表的操作越轻柔越好。本文将

【问题隐患】

由于业务需求不断变化,可能在DB中存在超大表占用空间或影响性能;对这些表的处理操作,容易造成mysql性能急剧下降,IO性能占用严重等。先前有在生产库drop table造成服务不可用;rm 大文件造成io跑满,引发应用容灾;对大表的操作越轻柔越好。

【解决办法】

1.通过硬链接减少mysql DDL时间,加快锁释放

2.通过truncate分段删除文件,避免IO hang

【生产案例】

某对mysql主备,主库写入较大时发现空间不足,需要紧急清理废弃大表,但不能影响应用访问响应:

  1. $ll /u01/mysql/data/test/tmp_large.ibd  
  2. -rw-r—– 1 mysql dba 289591525376 Mar 30  2012 tmp_large.ibd 

270GB的大表删除变更过程如下:

  1. #(备库先做灰度)  
  2. ln tmp_large.ibd /u01/bak/tmp_tbl.ibd  #建立硬链接  
  3. -rw-r—– 2 mysql dba 289591525376 Mar 30  2012 tmp_large.ibd  
  4. set session sql_log_bin=0;  #不计入bin log节省性能,并且防止主备不一致  
  5. desc test.tmp_large;  
  6. drop table test.tmp_large;  
  7. Query OK, 0 rows affected (10.46 sec)  
  8. mysql -uroot -e "start slave;"  
  9.    
  10. cd /u01/bak;screen -S weixi_drop_table  
  11. for i in `seq 270 -1 1 ` ;do sleep 2;truncate -s ${i}G tmp_tbl.ibd;done  
  12. rm -rf tmp_tbl.ibd 

【性能比较】

中间ctrl-C一次,可以看到truncate前后io的对比情况,基本上影响不大

NewImage

文件大小也成功更新

NewImage

 

【工具介绍】

  1. truncate – shrink or extend the size of a file to the specified size  
  2. #来自coreutils工具集  
  3. wget http://ftp.gnu.org/gnu/coreutils/coreutils-8.9.tar.gz  
  4. tar -zxvf coreutils-8.9.tar.gz  
  5. cd coreutils-8.9  
  6. ./configure  
  7. make  
  8. sudo cp src/truncate /usr/bin/  

 

【编辑推荐】

 

  1. 用vsftpd和mysql创建一个虚拟用户ftp服务器
  2. Linux下MySQL服务器级优化技巧
  3. MySQL创立者:云计算必须建立在开源之上

 

【责任编辑:黄丹 TEL:(010)68476606】

责任编辑:黄丹 来源: mysqlsky.com
相关推荐

2018-08-29 12:30:45

数据库MySQLInnodb

2010-10-13 10:03:08

MySQL修改表结构

2010-10-14 14:43:45

MySQL联表查询

2016-08-04 13:19:06

MySQL数据库大优化

2010-05-21 10:14:10

MySQL更改表结构

2010-11-23 14:19:12

MySQL注册表

2017-03-15 16:15:35

2010-11-23 16:21:07

MySQL大表备份

2018-07-31 15:53:00

数据库MySQLi-o

2022-05-09 15:52:23

MySQL数据库数据库表

2010-11-11 09:20:46

SQL Server创

2010-11-25 16:40:11

MySQL大表重复字段

2023-09-12 07:26:46

2020-12-08 09:13:51

MySQLDDL变更

2010-11-03 15:49:32

DB2删除表

2019-12-26 07:25:42

MySQL日志表数据库

2020-03-27 15:40:10

MySQL索引数据库

2020-04-08 07:55:08

MySQLSLA数据

2011-07-07 10:41:07

php批量删除

2019-09-22 18:31:46

Oracleundo空间
点赞
收藏

51CTO技术栈公众号