在不影响线上服务情况下,删除大表数据表

在不影响线上数据库服务情况下,如何删除数据库中的大表:

分析:数据库中表涉及到db和os两个层面:(1)db层面删表涉及到table_cache的全局唯一锁,一旦数据表过大,会长时间占用全局为一锁,导致db卡死。(2)os层面涉及到数据表物理文件的存储,包括时间的数据block和元数据inode;在ext3中,大文件非连续存储,甚至会嵌套存储,但是如果是ext5则是连续存储,不会存在这个问题。

 

解决办法:

缘由:当多个文件指向同一inode、inode链接数>1、仅仅删除指向inode的指针。当N=1时,删除的是文件所有数据块。

所以,先对数据表物理文件ln创建硬链接,再drop删除数据表(这时db层面已经删除表,os层面删除的是物理文件的一个指针,或者说是inode的其中一个链接而已),进而在truncate分批、分步骤删除硬链接指向的原始的数据表物理文件。

 

步骤:

(1)ln 数据表物理文件  硬链接名称

(2)drop 数据表

(3)truncate 硬链接指向的数据表的物理文件

 

硬链接和软连接区别:

软连接:

(1)相当于创建是一个快捷方式,但是这个快捷方式也是一个文件,所以os层面会创建一个新的inode

(2)对文件和目录都可以创建软链接

(3)ln -s 文件名称 硬链接文件名称

 

硬链接:

(1)相当于给物理文件新增一个指针,os层面不会新增inode,即硬链接文件有相同的inode和data block(同个文件对应多个有效的文件名称,可以防止误删数据,当删除某个文件时候,硬链接还存在,数据并没有真正删除)

(2)只能对文件创建,目录不行

(3)删除硬链接文件不会影响到有相同inode的其他文件

(4)当数据所有的链接文件(初始的文件名称和全部硬链接文件名称)都删除之后,数据文件才真正被删除。

(5)ln 文件名称 硬链接文件名称

 

tip:删除时候需要是rm -rf *** ,注意后面没有斜杠"/"!

 

 

-- over --

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值