网站首页 > 技术教程 正文
背景
最近遇到了一个坑,MySQL数据库服务器硬盘容量告警,而且因为非技术原因,还不能追加硬盘。
通过监控发现,磁盘IO一直100%。直接影响就是系统处理时间越来越长,接口响应耗时也越来越多。
drop or truncate table 失败
经过分析,发现mysql业务数据库里有好几张大表,而且这几张大表行数都在5000万以上,文件大小都在100G和150G之间。
因为这些表都是备份表,第一反应就是找DBA直接清理掉这些表。潜意识里以为drop table 和 truncate table效率很高,都会快速完成,但事实上不是。但意外的是,在执行drop table时,直接导致数据库挂起了,而且还发生了主从切换。
第一次尝试失败。
通过Linux硬链接删除
第一次失败反应出来的问题是,如果数据文件过大,drop table操作也得慎用。
那我们可以在drop table之前,想办法把数据文件逻辑清空。比如Linux硬连接的方式,具体步骤如下(假如目标表名是test):
- 进入数据库data目录,创建数据文件 test.ibd的硬链接
ln test.ibd test.ibd.hdlk
- 进入数据库命令行删除目标表。
drop table test;
此时,磁盘上真实的数据其实没删除,但数据库里的表,已经删除了。
- 再回到数据库data目录清除数据文件。
rm test.ibd.hdlk
到此,数据就能快速清理成功了。
猜你喜欢
- 2025-05-14 MySQL系列-源码编译安装(v8.0.25)
- 2025-05-14 测试人员如何在linux服务器中查询mysql日志?
- 2025-05-14 linux环境用mysqldump定时备份Mysql数据
- 2025-05-14 MySQL数据库简介及C#中的操作应用实例
- 2025-05-14 oracle和mysql的优缺点对比
- 2025-05-14 MySQL合集-性能工具
- 2025-05-14 Linux CentOS 安装 MySQL 8
- 2025-05-14 MySql安装与使用
- 2025-05-14 忘记mysql的root密码
- 2025-05-14 MySQL合集-单机容器化
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)