硬链接方式重建mysql大表
操作步骤
选择数据库
select @@datadir;
进入数据文件目录
cd /data/mysql/mydata/testdb
创建硬连接
ln test_trans_msg_xx.ibd test_service_trans_msg_xx.ibd.bak
ll test_trans_msg_xx*
进库删除表
DROP TABLE test_trans_msg_xx;
重建表
CREATE TABLE
test_trans_msg_xx
id
BIGINT ( 20 )NOT NULL COMMENT ·主键ID·
trans_id
BIGINT (20 ) NOT NULL DEFAULT ‘0’ COMMENT ‘交易id’,
apply id
VARCHAR (64 ) NOT NULL DEFAULT ‘’ COMMENT ‘业务流水号’,
request msg
LONGTEXT NOT NULL COMMENT ‘请求报文’,
response msg
LONGTEXT NOT NULL COMMENT ‘响应报文’,
create time
datetime NOT NULL DEFAULT CURRENT TIMESTAMP COMMENT ‘创建时间’,
update time
datetime NOT NULL DEFAULT CURRENT TIMESTAMP COMMENT’修改时间’,
PRIMARY KEY (id
) USING BTREE,
KEY indx_test_trans_msg_xx_apply_id (apply id
) USING BTREE,
KEY indx_test_trans_msg_xx trans_id(trans_id
) USING BTREE
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4 COMMENT
=‘测试记录表xx’;
删除硬链接
rm test_trans_msg_xx.ibd.bak
归纳
- 在MySQL中,采用硬链接方式来进行大表的DROP和重建操作,其优缺点归纳如下:
优点
减少IO压力
直接DROP一个大表会涉及大量的磁盘IO操作,尤其是在删除物理文件时。如果表非常大,这个过程可能会非常耗时,并且对数据库性能产生显著影响。
通过建立硬链接,DROP操作可以更快地完成,因为它不需要真正地去磁盘上删除那个巨大的物理文件。硬链接使得多个文件名指向同一个inode,因此删除一个硬链接并不会影响实际的物理数据。之后,可以使用truncate命令逐步删除文件,从而降低对IO的影响。
提高操作速度
硬链接的使用可以避免在DROP大表时长时间持有数据字典锁和table cache lock,从而减少对其他并发操作的影响。
在MySQL 5.5.23之前,DROP大表可能会导致系统性能显著下降,因为需要长时间持有buffer pool的mutex。而硬链接方式可以绕过这个问题,使得DROP操作更快完成。
降低系统风险
对于仍然在被高频访问的大表,直接DROP可能会导致系统崩溃或性能严重下降。而采用硬链接方式,可以先将表“标记”为删除,然后再逐步清理物理数据,从而降低对系统的影响。
缺点
复杂性增加
采用硬链接方式需要额外的操作步骤,包括创建硬链接、执行DROP操作和使用truncate命令删除物理文件。这增加了操作的复杂性,并可能引入人为错误。
管理难度提高
在使用硬链接后,需要手动管理这些硬链接文件。如果忘记删除它们,可能会导致磁盘空间被占用。
硬链接文件的存在也可能对数据库备份和恢复操作产生影响,需要特别注意。
限制条件
硬链接的创建受到一些限制,例如不能跨文件系统创建硬链接,也不能对目录创建硬链接。这可能对某些数据库部署环境产生限制。
总结
综上所述,采用硬链接方式DROP重建大表在减少IO压力、提高操作速度和降低系统风险方面具有明显优势,但也会增加操作的复杂性、提高管理难度以及存在一些限制条件。因此,在使用这种方法时,需要权衡利弊并根据具体情况做出决策。