MySQL小技巧:删除大表数据时,drop table执行不下去怎么办最近遇到mysql表太大怎么删除了一个坑mysql表太大怎么删除,MySQL数据库服务器硬盘容量告警mysql表太大怎么删除,而且因为非技术原因mysql表太大怎么删除,还不能追加硬盘 。
通过监控发现,磁盘IO一直100% 。直接影响就是系统处理时间越来越长,接口响应耗时也越来越多 。
经过分析 , 发现mysql业务数据库里有好几张大表,而且这几张大表行数都在5000万以上,文件大小都在100G和150G之间 。
因为这些表都是备份表,第一反应就是找DBA直接清理掉这些表 。潜意识里以为drop table 和 truncate table效率很高,都会快速完成,但事实上不是 。但意外的是,在执行drop table时,直接导致数据库挂起了,而且还发生了主从切换 。
第一次尝试失败 。
第一次失败反应出来的问题是 , 如果数据文件过大,drop table操作也得慎用 。
那我们可以在drop table之前,想办法把数据文件逻辑清空 。比如Linux硬连接的方式 , 具体步骤如下(假如目标表名是test):
ln test.ibd test.ibd.hdlk
drop table test;
此时 , 磁盘上真实的数据其实没删除,但数据库里的表 , 已经删除了 。
rm test.ibd.hdlk
到此,数据就能快速清理成功了 。
mysql如何清空表mysql有两种方式可以清空表 。分别为:delete from 表名和truncate table 表名 。
delete from 表名,删除表数据,全部删除则是可以清空表,相当于一条条删除,需要注意的是 , 如果有字段是自增的(一般为id) , 这样删除后,id 值还是存在的 。举例来说,就是加入你在删除之前最大的id为100,你用这种方式清空表后 ,新插入一条数据其id为101,而不是1 。
2.truncate table 表名 , 直接清空表 , 相当于重建表,保持了原表的结构 , id也会清空 。相当于保留mysql表的结构,重新创建了这个表,所有的状态都相当于新表 。效率上truncate比delete快,但truncate删除后不记录mysql日志,不可以恢复数据 。
如何对 MYSQL 大数据库执行表数据删除操作,单表数据量超过 15.6Gdelete 语句不影响表所占用的 extent,高水线(high watermark)保持原位置不动
drop 语句将表所占用的空间全部释放 。
truncate 语句缺省情况下见空间释放到 minextents个 extent , 除非使用reuse storage;truncate 会将高水线复位(回到最开始) 。
【mysql表太大怎么删除 mysql删除大表数据】mysql表太大怎么删除的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于mysql删除大表数据、mysql表太大怎么删除的信息别忘了在本站进行查找喔 。
推荐阅读
- php调用node执行js文件,php调用javascript
- Python基础教程和从入门实践,python教学入门零基础教程
- ios不肝的单机,ios神作单机
- 浙江sap售后服务,sap售后服务怎么做
- linux必须掌握的命令 linux必学的命令
- asp.net代码块,aspnet core 代码生成器
- 关于765游戏棋牌的信息
- ERP系统仓库如何出入库,erp仓库进出库怎么操作?
- go语言协程线程安全 golang线程安全