mysql truncate delete 释放磁盘空间
我的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 释放磁盘空间相关推荐
- MySQL中DELETE操作磁盘空间不会减少的原因
MySQL中delete操作 在InnoDB中,delete操作并不会真的删除数据,mysql实际上只是给要删除的数据打了标记,标记为删除.磁盘所占空间不会变小,即表空间并没有真正被释放. 这样设计的 ...
- 为什么mysql的delete操作不释放磁盘空间
在 InnoDB 中,delete 操作并不会真的删除数据,mysql 实际上只是给要删除的数据打了标记,标记为删除.磁盘所占空间不会变小,即表空间并没有真正被释放. 一. MySQL 删除数据几种情 ...
- MySQL DELETE 操作后没有释放磁盘空间
最近遇到一个问题,项目对应的的数据库频繁报警,报警内容为数据库磁盘空间达到85%.后来经过查看发现数据库中有20多个表数据量特别大,每张表大约3亿数据,共70亿左右数据(存储的内容为坐标记录整体来说不 ...
- 记一次delete MySQL数据释放磁盘空间
某日收到数据库服务器磁盘报警超过75%,突然想到架构师让每月清理一次流水表这个月还没有清理,于是在18:00提交变更申请清理上个月之前的数据. 执行操作为: mysql> delete from ...
- mysql删除数据后释放磁盘空间
drop table table_name 立刻释放磁盘空间 ,不管是 Innodb和MyISAM : truncate table table_name立刻释放磁盘空间 ,不管是 Innodb和My ...
- mysql drop table 释放空间_MySQL删除数据几种情况以及是否释放磁盘空间【转】
MySQL删除数据几种情况以及是否释放磁盘空间: 1.drop table table_name 立刻释放磁盘空间 ,不管是 Innodb和MyISAM ; 2.truncate table tabl ...
- MySQL删除数据后,释放磁盘空间
drop table table_name 立刻释放磁盘空间 , Innodb和MyISAM: truncate table table_name 立刻释放磁盘空间, Innodb和MyISAM,t ...
- mysql 释放空间_Mysql InnoDB删除数据后释放磁盘空间的步骤详解
Mysql InnoDB删除数据后释放磁盘空间的方法 Innodb数据库对于已经删除的数据只是标记为删除,并不真正释放所占用的磁盘空间,这就导致InnoDB数据库文件不断增长. 如果在创建数据库的时候 ...
- lsof查看进程占用文件_Linux 利用lsof命令查找已经删除的文件来释放磁盘空间
测试环境一台服务器/ 根目录空间使用率达到94%,但是通过du -sh * 发现实际空间没没用用到那么多,初步怀疑,之前删除的文件,有运行中的进程一直占用,导致空间没有释放,如图通过du -sh * ...
最新文章
- 领域驱动设计_软件核心复杂性应对之道
- 统计局:2018年规模以上工业增加值同比增长6.2%
- 安装仅限于用于sharepoint_PDF DC2018软件安装教程
- 从GWT开发人员的角度概述Scala.js
- java中计算平均成绩_Java计算平均成绩
- BT6无线破解+局域网共享(附BT6下载地址)
- spring手动控制事务开启_手动控制spring事务
- 如何利用excel中的数据源制作数据地图
- JAVA 2048源码_java实现2048游戏源代码
- 从 0 开始学游戏开发
- 关于日记app的思考
- elasticsearch进阶(3)—— ilm policy
- 火影忍者的最爱:三勾玉
- Kubernetes监控在小米的落地
- Java P2298 Mzc和男家丁的游戏
- HTML批量转换jpg,万能文件转换工具(word,excel,powerpiont,PDF,TXT,JPG,HTML互转)
- 使用 rsync 服务(二)
- 02_C++实现多线程服务器代码(linux系统)
- jsoup-1.11.2.jar,JsoupXpath-0.3.2.jar相关jar包及Jsoup开发说明文档
- 2017年最好的JavaScript插件
热门文章
- 常见的论文投稿形式区别
- bzoj4143: [AMPPZ2014]The Lawyer
- 20110611日融合计费R3割接上线
- 中国二手车出口现状与趋势分析
- 软件测试缺陷等级划分准则
- 【新书推荐】【2019.03】赤川次郎作品系列(套装共五册)
- 【蓝桥杯2018Java】测试次数/耐摔指数
- gridlayout java_Swing-布局管理器之GridLayout(网格布局)-入门
- # 单方面PING的通,我能PING通对方机子,对方机子PING不通我
- Struts2用AbstractInterceptor取代了AroundInterceptor