ibdata1和mysql-bin致磁盘空间问题怎样解决?

原创 浪子丶刘少  2019-09-17 09:00  阅读 601 次 评论 2 条 百度未收录

一、问题:

磁盘空间报警,经查发现ibdata1和mysql-bin日志占用空间太多(其中ibdata1超过120G,mysql-bin超过80G)

二、原因:

bdata1是存储格式,在INNODB类型数据状态下,ibdata1用来存储文件的数据和索引,而库名的文件夹里的那些表文件只是结构而已。

innodb存储引擎有两种表空间的管理方式,分别是:

1)共享表空间可拆分为多个小的表空间文件),这个是我们目前多数数据库使用的方法;

2)独立表空间,每一个表有一个独立的表空间(磁盘文件)

 

对于两种管理方式,各有优劣,具体如下:

①共享表空间:

优点:

可以将表空间分成多个文件存放到不同的磁盘上(表空间文件大小不受表大小的限制,一个表可以分布在不同步的文件上)

缺点:

所有数据和索引存放在一个文件中,则随着数据的增加,将会有一个很大的文件,虽然可以把一个大文件分成多个小文件,但是多个表及索引在表空间中混合存储,这样如果对于一个表做了大量删除操作后表空间中将有大量空隙。

对于共享表空间管理的方式下,一旦表空间被分配,就不能再回缩了。当出现临时建索引或是创建一个临时表的操作表空间扩大后,就是删除相关的表也没办法回缩那部分空间了。

②独立表空间:

在配置文件(my.cnf)中设置:innodb_file_per_table

特点:

每个表都有自已独立的表空间;每个表的数据和索引都会存在自已的表空间中。

优点:

表空间对应的磁盘空间可以被收回(Droptable操作自动回收表空间,如果对于删除大量数据后的表可以通过:altertabletbl_nameengine=innodb;回缩不用的空间。

缺点:

如果单表增加过大,如超过100G,性能也会受到影响。在这种情况下,如果使用共享表空间可以把文件分开,但有同样有一个问题,如果访问的范围过大同样会访问多个文件,一样会比较慢。

如果使用独立表空间,可以考虑使用分区表的方法,在一定程度上缓解问题。此外,当启用独立表空间模式时,需要合理调整innodb_open_files参数的设置。

三、解决:

1)ibdata1数据太大:只能通过dump,导出建库的sql语句,再重建的方法。

2)mysql-binLog太大:

①手动删除:

删除某个日志:

mysql>PURGEMASTERLOGSTO‘mysql-bin.010′;

删除某天前的日志:

mysql>PURGEMASTERLOGSBEFORE’2010-12-2213:00:00′;

②在/etc/my.cnf里设置只保存N天的bin-log日志

expire_logs_days=30
//BinaryLog自动删除的天数
本文地址:https://www.ezliushao.com/346.html
加入我们:请加入刘少技术博客交流群:扫描二维码刘少技术博客的QQ交流群 | 浪子丶刘少 QQ:1150110267(注:微信暂停添加好友)
版权声明:本文为原创文章,版权归 浪子丶刘少 所有,欢迎分享本文,转载请保留出处!

发表评论


表情

  1. 小姚工作室
    小姚工作室 【新手】 @回复

    被Mysql数据库磁盘爆满狠狠伤害过,没事还是要多看看磁盘空间啊