我的mysql一张表中有1000万条记录,我使用delete删除记录后,虽然表为空,但是我使用navicate打开表时,加载还是很慢。于是我执行下truncate,打开就很快了。网上查下作者这样说的:

truncate table tablename;

该命令可以清空一个表里的所有数据,并归1自增ID的值。

但myisam的表和innodb的表在使用上有一定的区别。

myisam表会清空所有数据,并释放表空间,即硬盘空间会得到释放。

innodb表也会清空所有数据,但不释放表空间。

Innodb数据库对于已经删除的数据只是标记为删除,并不真正释放所占用的磁盘空间,这就导致InnoDB数据库文件不断增长。如果想彻底释放这些已经删除的数据,需要把数据库导出,删除InnoDB数据库文件,然后再倒入。 下面是基本的步骤:

1 使用mysqldump命令将InnoDB数据库导出

2 停止MySQL

3 删除所有InnoDB数据库文件和日志

4 启动MySQL并自动重建InnoDB数据库文件和日志文件

5 导入前面备份的数据库文件

具体命令:

# 备份数据库:

mysqldump -uroot -proot --quick --force --all-databases > mysqldump.sql

# 停止数据库

service mysqld stop

# 删除这些大文件

rm /usr/local/mysql/var/ibdata1

rm /usr/local/mysql/var/ib_logfile*

# 手动删除除Mysql之外所有数据库文件夹,然后启动数据库

service mysqld start

# 还原数据

mysql -uroot -proot < mysqldump.sql

还有一种方式是在创建数据库的时候设置innodb_file_per_table,这样InnoDB会对每个表创建一个数据文件,然后只需要运行OPTIMIZE TABLE 命令就可以释放所有已经删除的磁盘空间。

编辑my.ini或my.cnf 在innodb段中加入 innodb_file_per_table=1 # 1为启用,0为禁用

通过mysql语句可以查看该变量的值:mysql> show variables like '%per_table%';

mysql truncate delete 释放磁盘空间相关推荐

  1. MySQL中DELETE操作磁盘空间不会减少的原因

    MySQL中delete操作 在InnoDB中,delete操作并不会真的删除数据,mysql实际上只是给要删除的数据打了标记,标记为删除.磁盘所占空间不会变小,即表空间并没有真正被释放. 这样设计的 ...

  2. 为什么mysql的delete操作不释放磁盘空间

    在 InnoDB 中,delete 操作并不会真的删除数据,mysql 实际上只是给要删除的数据打了标记,标记为删除.磁盘所占空间不会变小,即表空间并没有真正被释放. 一. MySQL 删除数据几种情 ...

  3. MySQL DELETE 操作后没有释放磁盘空间

    最近遇到一个问题,项目对应的的数据库频繁报警,报警内容为数据库磁盘空间达到85%.后来经过查看发现数据库中有20多个表数据量特别大,每张表大约3亿数据,共70亿左右数据(存储的内容为坐标记录整体来说不 ...

  4. 记一次delete MySQL数据释放磁盘空间

    某日收到数据库服务器磁盘报警超过75%,突然想到架构师让每月清理一次流水表这个月还没有清理,于是在18:00提交变更申请清理上个月之前的数据. 执行操作为: mysql> delete from ...

  5. mysql删除数据后释放磁盘空间

    drop table table_name 立刻释放磁盘空间 ,不管是 Innodb和MyISAM : truncate table table_name立刻释放磁盘空间 ,不管是 Innodb和My ...

  6. mysql drop table 释放空间_MySQL删除数据几种情况以及是否释放磁盘空间【转】

    MySQL删除数据几种情况以及是否释放磁盘空间: 1.drop table table_name 立刻释放磁盘空间 ,不管是 Innodb和MyISAM ; 2.truncate table tabl ...

  7. MySQL删除数据后,释放磁盘空间

    drop table table_name  立刻释放磁盘空间 , Innodb和MyISAM: truncate table table_name 立刻释放磁盘空间, Innodb和MyISAM,t ...

  8. mysql 释放空间_Mysql InnoDB删除数据后释放磁盘空间的步骤详解

    Mysql InnoDB删除数据后释放磁盘空间的方法 Innodb数据库对于已经删除的数据只是标记为删除,并不真正释放所占用的磁盘空间,这就导致InnoDB数据库文件不断增长. 如果在创建数据库的时候 ...

  9. lsof查看进程占用文件_Linux 利用lsof命令查找已经删除的文件来释放磁盘空间

    测试环境一台服务器/ 根目录空间使用率达到94%,但是通过du -sh * 发现实际空间没没用用到那么多,初步怀疑,之前删除的文件,有运行中的进程一直占用,导致空间没有释放,如图通过du -sh * ...

最新文章

  1. 领域驱动设计_软件核心复杂性应对之道
  2. 统计局:2018年规模以上工业增加值同比增长6.2%
  3. 安装仅限于用于sharepoint_PDF DC2018软件安装教程
  4. 从GWT开发人员的角度概述Scala.js
  5. java中计算平均成绩_Java计算平均成绩
  6. BT6无线破解+局域网共享(附BT6下载地址)
  7. spring手动控制事务开启_手动控制spring事务
  8. 如何利用excel中的数据源制作数据地图
  9. JAVA 2048源码_java实现2048游戏源代码
  10. 从 0 开始学游戏开发
  11. 关于日记app的思考
  12. elasticsearch进阶(3)—— ilm policy
  13. 火影忍者的最爱:三勾玉
  14. Kubernetes监控在小米的落地
  15. Java P2298 Mzc和男家丁的游戏
  16. HTML批量转换jpg,万能文件转换工具(word,excel,powerpiont,PDF,TXT,JPG,HTML互转)
  17. 使用 rsync 服务(二)
  18. 02_C++实现多线程服务器代码(linux系统)
  19. jsoup-1.11.2.jar,JsoupXpath-0.3.2.jar相关jar包及Jsoup开发说明文档
  20. 2017年最好的JavaScript插件

热门文章

  1. 常见的论文投稿形式区别
  2. bzoj4143: [AMPPZ2014]The Lawyer
  3. 20110611日融合计费R3割接上线
  4. 中国二手车出口现状与趋势分析
  5. 软件测试缺陷等级划分准则
  6. 【新书推荐】【2019.03】赤川次郎作品系列(套装共五册)
  7. 【蓝桥杯2018Java】测试次数/耐摔指数
  8. gridlayout java_Swing-布局管理器之GridLayout(网格布局)-入门
  9. # 单方面PING的通,我能PING通对方机子,对方机子PING不通我
  10. Struts2用AbstractInterceptor取代了AroundInterceptor