当前位置: 首页 > news >正文

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

你可能感兴趣的内容:

相关文章:

  • request变量java jsp_JSP里request变量列表
  • transition java_Transition 过渡
  • 相对最完整的软件测试工具手册
  • 上传图片并且生成可以控制大小图片清晰度的方法
  • 手机php开发环境,PHP开发环境搭建
  • 要不要把php5升级到php7,将php5升级到php7后AJAX不工作
  • [软工]近距离接触RUP plug-in
  • zblog asp 转 php,怎么把zblog asp 2.2转换成zblog php 1.5的方法
  • 扩展XDoclet对Spring List引用注入的支持
  • wifidog php,用php写wifidog的认证服务器
  • 3668MySQL数据库应用试题,django框架mysql数据库使用常遇问题
  • matlab中为什么有的坐标右面也有刻度,Matlab绘图笔记:修改坐标轴显示的刻度密度,lable文字,和位置...
  • 首博!
  • matlab函数定义和调用6,Matlab函数定义和调用PPT课件
  • 日积月累
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • angular学习第一篇-----环境搭建
  • Java 最常见的 200+ 面试题:面试必备
  • jQuery(一)
  • magento2项目上线注意事项
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • OSS Web直传 (文件图片)
  • Python 反序列化安全问题(二)
  • 力扣(LeetCode)22
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 如何选择开源的机器学习框架?
  • 怎么将电脑中的声音录制成WAV格式
  • scrapy中间件源码分析及常用中间件大全
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • 整理一些计算机基础知识!
  • ​520就是要宠粉,你的心头书我买单
  • ​水经微图Web1.5.0版即将上线
  • (LeetCode) T14. Longest Common Prefix
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • ******IT公司面试题汇总+优秀技术博客汇总
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .NET CLR基本术语
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .NetCore部署微服务(二)
  • .NET中统一的存储过程调用方法(收藏)
  • /proc/stat文件详解(翻译)
  • ??eclipse的安装配置问题!??
  • [ linux ] linux 命令英文全称及解释
  • [ 云计算 | AWS ] 对比分析:Amazon SNS 与 SQS 消息服务的异同与选择
  • [20161214]如何确定dbid.txt
  • [DAX] MAX函数 | MAXX函数
  • [Java性能剖析]Sun JDK基本性能剖析工具介绍