ibdata1和mysql-bin致磁盘空间报警,经查发现ibdata1和mysql-bin日志占用空间太多(其中ibdata1超过120G,mysql-bin超过80G),如何处理
原因:bdata1是存储格式,在INNODB类型数据状态下,ibdata1用来存储文件的数据和索引,而库名的文件夹里的那些表文件只是结构而已。
innodb存储引擎有两种表空间的管理方式,分别是:1)共享表空间(可拆分为多个小的表空间文件),这个是我们目前多数数据库使用的方法;2)独立表空间,每一个表有一个独立的表空间(磁盘文件)
解决: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自动删除的天数
进入:/var/lib/mysql
,进入之后会发现一个ibdata1
文件,可以通过 ls -ll
查看文件大小。
这个文件大小mysql
官方在5.6.7
之前规定是10M
,5.6.7
之后是规定12M
。如果想要像mysql
服务器一样设置比较大一点的ibdata1
,那必须的要在建表之初就修改my.cnf
的innodb_data_file_path
参数。如果你是建表之后修改,那就会报错,改为12M
就不报错。
解决方案: 1. 首先备份数据库数据,以防处理过程中出现意外情况。 2. 对于mysql-bin文件,可以通过MySQL的purge操作将已经不需要的binlog文件删除,释放磁盘空间。具体步骤如下:
(1)登录MySQL服务器,执行下列命令查看当前binlog文件大小及数量:
sql SHOW BINARY LOGS;
(2)根据需要,可以通过下列命令清除指定日期之前的binlog文件:
sql PURGE BINARY LOGS BEFORE 'yyyy-mm-dd hh:mm:ss';
(3)也可以清除所有已经执行的binlog文件以释放更多的磁盘空间:
sql RESET MASTER;
(1)登录MySQL服务器,执行下列命令查看当前表空间使用情况:
sql SELECT table_schema AS "Database", SUM(data_length + index_length) / (1024 * 1024) AS "Size (MB)"FROM information_schema.TABLES GROUP BY table_schema;
(2)根据需要,可以将某些表的数据迁移至新的表空间中。可以使用下列命令创建新的表空间文件:
sql ALTER TABLE tbl_name ENGINE=INNODB, ALGORITHM=COPY, TABLESPACE=new_tbl_name;
(3)然后可以通过下列命令将表移动至新的表空间:
sql ALTER TABLE tbl_name TABLESPACE = new_tbl_name;
(4)最后可以使用下列命令删除原有表的数据和表空间文件:
sql DROP TABLE tbl_name;
可以根据需要多次执行上述操作,将多个表移动至新的表空间中,最终减小ibdata1文件大小。