【MySQL】如何快速drop一张MySQL 大表?
2024-08-27 本文已影响0人
Bogon
如何查看 MySQL 库中 哪张表最大?
$ mysql -h xx.xx.xx.xx -u root -p'XXX'
> show databases;
> use test
> select
table_schema as '数据库',
table_name as '表名',
table_rows as '记录数',
truncate(data_length/1024/1024/1024, 2) as '数据容量(GB)',
truncate(index_length/1024/1024/1024, 2) as '索引容量(GB)'
from information_schema.tables
where table_schema = 'test'
order by data_length desc, index_length desc;
如何清理最大的 t_test 表?
> show create table t_test \G
*************************** 1. row ***************************
Table: t_test
Create Table: CREATE TABLE `t_test` (
`id` varchar(50) NOT NULL,
`userAgent` varchar(255) DEFAULT NULL,
`url` varchar(255) DEFAULT NULL,
`args` longtext,
`ipAddresses` varchar(255) DEFAULT NULL,
`successStatus` varchar(10) DEFAULT NULL,
`error` varchar(255) DEFAULT NULL,
`data` longtext,
`errorCode` int(11) DEFAULT NULL,
`createTime` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
`eid` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `IDX_BD_URL` (`url`),
KEY `IDX_BD_CREATE_TIME` (`createTime`),
KEY `idx_operation_log_eid` (`eid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.01 sec)
# cd /opt/mysql/mysqldata/test/
# ln t_test.ibd t_test.ibd.20240828.BAK
注: 基于 root用户的 ln操作, 不会改变文件的 所有者所属组,主从都需操作
// new_table克隆old_table的表结构和索引
> create table new_table like t_test;
> DROP table t_test;
> RENAME TABLE new_table TO t_test;
注意: 此操作在主库上操作,从库就无需操作,会同步过去
// 删除原表物理文件,主从都需要操作
# cd /opt/mysql/mysqldata/test/
# rm -rf t_test.ibd.20240828.BAK
参考
MySQL如何优雅的删除大表
http://t.zoukankan.com/easydb-p-14185881.html
如何在Linux中使用 Truncate 命令
http://blog.itpub.net/31559985/viewspace-2738955
MySQL删除大表更快的drop table办法
https://www.cnblogs.com/bjx2020/p/9105044.html
如何快速的 drop 掉一个 100G 的大表?
https://mp.weixin.qq.com/s/cY3vxkXn86cyTszR4URE4w