mysql收缩空间的问题
问题描述
今天转移数据库(从一个数据库到另一个数据库),转移了一部分之后发现硬盘快满了,于是就把就旧的数据库里已经转移完成的表删除了。我是先TRUNCATE table_name,发现空间没有释放,又DROP TABLE table_name,发现空间还是没有释放。
我去网上搜了一下,发现收缩空间的命令都是针对表的,比如OPTIMIZE TABLE table_name。我想请问一下,还有别的办法收缩空间吗?
问题解答
回答1:InnoDB引擎的特性就是这样的。占用空间的文件有bin-log文件(二进制日志)和ibdata1(数据文件,表空间就是在这里的)还有一些其他日志(ib_logfile0)redo-log和undo-log。
你执行TRUNCATE掉了数据,并不会对上面这些文件大小产生影响(减小),反而会增大,要纪录你这个TRUNCATE操作。数据既使被删除了,ibdata1空间里也不会被删除的,因为要删除里面的数据,要移动大量磁盘空间。innodb只是标志那些数据页是可以被再次使用的,并没有删除这块空间。通常mysql一启动,会会占用几个G的ibdata1 ibdata2。先分配一块大的磁盘,再慢慢使用,数据在物理上连续(效率高)。避免一直分配磁盘空间,产生很多碎片。
除非你把整个data数据目录目录清除(相当于重装mysql),再重新导入数据。
磁盘是很便宜,挂几块大磁盘就行了。磁盘都没有,玩什么数据库。
回答2:不了解。但是如果买块硬盘就能解决问题其实根本没必要去想其它方案了,投入的综合成本更高,而且发生了这种情况本身就说明你们确实要考虑磁盘空间问题了,比如磁盘阵列,数据表拆分,是否需要redis/memcached来帮助数据库减压等,这是更重要的事情。
回答3:推荐一下,之前我也遇到过,后来处理了,写过博客http://astarblog.cn/index.php/2016/04/27/339.html (这算广告吗?)
相关文章:
1. mysql 查询身份证号字段值有效的数据2. python - 爬虫模拟登录后,爬取csdn后台文章列表遇到的问题3. mysql - 把一个表中的数据count更新到另一个表里?4. javascript - 弹出一个子窗口,操作之后关闭,主窗口会得到相应的响应,例如网站的某些登录界面,django后台的管理等,这是怎么实现的呢?5. 视频文件不能播放,怎么办?6. 请教使用PDO连接MSSQL数据库插入是乱码问题?7. mysql - 分库分表、分区、读写分离 这些都是用在什么场景下 ,会带来哪些效率或者其他方面的好处8. python bottle跑起来以后,定时执行的任务为什么每次都重复(多)执行一次?9. android - 分享到微信,如何快速转换成字节数组10. visual-studio - Python OpenCV: 奇怪的自动补全问题
