mysql

【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

上一篇下一篇

猜你喜欢

热点阅读