mysql innodb 删除_MySQL InnoDB 删除资料后释放硬盘空间

MySQL 使用 InnoDB 时,当资料表用 DELETE FROM 删除资料后,硬盘空间并不会立即释放,因为 MySQL 只对已删除的资料标记为删除,并没有真正删除资料,这会导致 InnoDB 的档案不断扩大。只有在 DROP TABLE 及 TRUNCATE TABLE 时才会释放空间。

如果没有开启 innodb_file_per_table,所有 InnoDB 的资料都会储存在 ibdata 档案内,对于数据库的体积很大的 MySQL Server,要释放硬盘空间会很痛苦,因为只有将 MySQL 数据库导出,再重新将备份还原才可以释放空间。如果 innodb_file_per_table 有开启,每个 InnoDB 资料表都会有独立的档案,可以较简单地释放硬盘空间, 以下是 innodb_file_per_table 开启及关闭的释放空间方法。

innodb_file_per_table 开启

首先是较简单的情况, 在 innodb_file_per_table 开启时, 当用 DELETE 删除资料后, 可以用以下方法释放硬盘空间。

1. OPTIMIZE TABLE

只要执行 OPTIMIZE TABLE 指令, 将资料表最佳化, 便可以释放硬盘空间, 例如资料表名称是 table_name:

mysql> OPTIMIZE TABLE table_name;

1

mysql>OPTIMIZETABLEtable_name;

2. ALTER TABLE

另一个方法是用 ALTER TABLE 指令:

ALTER TABLE table_name ENGINE = InnoDB;

1

ALTERTABLEtable_nameENGINE=InnoDB;

innodb_file_per_table 关闭

如果 innodb_file_per_table 是关闭,要释放经由 DELETE 删除的资料的空间,需要把数据库导出,删除 innodb 数据库,然后再汇入, 以下是操作步骤, 但请务必关闭 MySQL Server 后, 将数据库目录先备份, 即使有问题要还原也较快。

1. 使用 mysqldump 指令将 innodb 数据库导出:

# mysqldump -u root -p --all-databases > alldb.sql

1

# mysqldump -u root -p --all-databases > alldb.sql

2. 删除所有数据库, 但要留下 “mysql” 及 “information_schema” 两个数据库不要删除.

3. 关闭 MySQL 服务器:

# systemctl stop mysql

4. 删除 ibdata 档案及日志:

# rm /var/lib/mysql/ibdata1

# rm /var/lib/mysql/ib_logfile*

5. 为了避避免日后易于维护, 开启 innodb_file_per_table, 开启档案 /etc/my.cnf:

# vi /etc/my.cnf

在 [mysqld] 段落加入以下一行:

innodb_file_per_table=1

6. 启动 MySQL Server:

# systemctl start mysql

7. 汇入数据库备份:

# mysql -u root -p < alldb.sql

1

# mysql -u root -p < alldb.sql

你可能感兴趣的内容:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值