ibdata1和mysql-bin日志占用空间太多导致磁盘空间报警的解决办法 。
首先分析问题原因:ibdata1为存储类格式,而在INNODB的类型数据状态下,ibdata1用来存储文件的数据和索引,在库名的文件夹里的那些表文件只是结构而已。innodb存储引擎有两种表空间的管理方式,分别是:
1)共享表空间,目前这个是各数据库使用最多的方法;
2)独立表空间,每一个表都会享有一个独立的表空间;
当然,这两种方式都有各自的优点和缺点:
优点:
共享表空间的优点是:能够将表空间切成很多个文件存放到不同的磁盘上(表空间文件大小不受表大小的限制,一个表可以分布在不同步的文件上)。
独立表空间的优点是:其对应的磁盘空间实可以被收回的。
缺点:
共享表空间的缺点是:数据和索引都全部存放在了一个文件里,但数据越来越大时,就将会有一个很大的文件,尽管可以将它分成多个小文件,但是多个表及索引在表空间中混合存储,这样如果对于一个表做了大量删除操作后表空间中将有大量空隙。在共享表空间管理的方式下,如果表空间被分配,就不可能再回缩。若出现临时建索引或是创建一个临时表的操作表空间扩大后,就是删除相关的表也没办法回缩那部分空间了。
独立表空间的缺点:如果单表超过100G,则性能会受到影响。若用共享表空间把文件分开,但会出现的问题就是,如果访问的范围过大同样会访问多个文件。若使用独立表空间,则考虑使用分区表的方法,可缓解问题。当启用独立表空间模式时,需要合理调整innodb_open_files参数的设置。
解决:
1)ibdata1数据太大:只可以通过dump,先导出建库的sql语句,最后重新建立的方法。
2)mysql-bin Log太大有两个解决办法:
①手动删除:
删除某个日志:mysql>PURGE MASTER LOGS TO ‘mysql-bin.010′;
删除某天前的日志:mysql>PURGE MASTER LOGS BEFORE ’2010-12-22 13:00:00′;
②在/etc/my.cnf里设置只保存N天的bin-log日志
expire_logs_days = 30 //Binary Log自动删除的天数。