mysql ibdata1和mysql-bin过大的问题_ibdata1和mysql-bin致磁盘空间问题

问题:

2.51磁盘空间报警,经查发现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自动删除的天数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值