问题
用命令发现磁盘利用率100%,还剩几十兆。
一系列神圣的操作
备份数据库,删除实例,删除数据库表,并重新启动mysql服务。因此,不会释放磁盘空间
要做什么
我在网上查了很多资源,说是要整理磁盘。原因是datafree占用空间太大。可以通过这个sql具体查看。
select CONCAT(TRUNCATE(SUM(data _ length)/1024/1024,2),' MB')ASdata_size,CONCAT(TRUNCATE(SUM(max _ data _ length)/1024/1024,2),' MB')ASmax_data_size,CONCAT(TRUNCATE(SUM(data _ free)/1024/1024,2),' MB')ASdata_free,CONCAT(TRUNCATE(SUM(index _ length)/1024/1024,2),' MB')ASindex
这是后面的图,前面的图没有留下。当时显示一个表中的data_free都达到了20 G的。
网上推荐的做法如下,形式零散。
ALTERTABLEdatainfoENGINE=InnoDB;ANALYZETABLEdatainfoopTImizetabledatainfo
僵局
检查数据库版本5.562是否不支持inodb,或者选择升级数据库。就在这时,一个坏消息发生了。表单已被删除,但磁盘空间仍未释放。所以整理手表碎片的方式是行不通的,因为手表没了。
后来的神术
使用命令查看mysql的安装位置和配置文件的位置。
mysql1118945014:28?00:00:00/usr/sbin/mysqld-basedir=/usr-datadir=/var/lib/MySQL-plugin-dir=/usr/lib 64/MySQL/plugin-log-error=/var/log/mysqld . log-PID-file=/var/run/mysqld/mysqld . PID-socket=/var/lib/MySQL/MySQL . sock
关闭mysql
servicemysqlstop
删除datadir目录中的文件ibdata1,ib_logfile0 ib_logfile1。
#FormaTImgID_1#
移动mysql的启动参数
mv/etc/my . cn f/ABC
重启mysql发现磁盘空间被释放。
servicemysqlstart
磁盘空间最终被释放。
下次数据库还原
使用navicate备份工具备份数据库。
备份成功后,会生成psc文件200409141055.psc。
创建一个新的数据库实例,并设置数据库名称和字符集。
然后恢复备份数据库,并单击恢复。
开始恢复。
第一次恢复后,发现数据库表在恢复后成功构建,但表中没有数据。后来在网上查资料,发现遇到错误就停了。因此,我更改了恢复的配置,并再次进行了恢复。以前是这样设定的。
当恢复作为事务执行时,它会在遇到错误时停止。更改配置
再次恢复,数据库中的数据可用,验证没有问题。
问题解决
mysql碎片的原因
表的存储将是碎片化的。每删除一行内容,这个空间就会变空,一段时间内的大量删除操作会使这个空出来的空间大于用来存储列表内容的空间。
在执行插入操作时,MySQL会尝试使用空白空间,但是如果一个空白空间还没有被大小合适的数据占据,仍然不能完全占据,就会形成碎片;
MySQL在扫描数据时,扫描的对象实际上是链表容量需求的上限,也就是数据写入的区域中处于峰值位置的部分;
清除碎片的优势
减少访问表时的IO,提高mysql性能,释放表空间,降低磁盘空间利用率。
mysql官方建议不要频繁(每小时或每天)进行碎片整理。一般根据实际情况,只需要每周或每月进行一次碎片整理(我们现在每月凌晨4点清理所有MySQL实例下的表碎片)。
当优化表运行时,MySQL锁定表。所以这个操作一定要在网站访问量比较少的时段进行。
清理学生105万条数据,优化表格库。学生;本地测试需要37秒。
自我检查
您可以使用该语句来查看您的系统的数据树是否很大。
标签:数据空间数据库