处理MySQL的ibdata1文件过大问题

ibdata1文件是什么?

ibdata1是一个用来构建innodb系统表空间的文件,这个文件包含了innodb表的元数据、撤销记录、修改buffer和双写buffer。若是file-per-table选项打开的话,该文件则不必定包含全部表的数据。当innodb_file_per_table选项打开的话,新建立表的数据和索引则不会存在系统表空间中,而是存放在各自表的.ibd文件中.mysql

显然这个文件会愈来愈大,innodb_autoextend_increment选项则指定了该文件每次自动增加的步进,默认是8M.sql

是什么缘由致使ibdata1文件会愈来愈大?

ibdata1存放数据,索引和缓存等,是MYSQL的最主要的数据。因此随着数据库愈来愈大,表也会越大,这个没法避免的。若是时间长了,愈来愈大,咱们在处理日志和空间的时候就不是那么方便了,就不知从何入手了。接下来咱们就要处理下这样的状况,分库存储数据。数据库

该如何处理呢?

首先咱们把数据库文件备份下来,而后直接删除ibdata文件(为了保险起见最好先全备一次,作到数据安全和完整),而后再从新导入数据库文件便可!缓存

具体操做步骤以下(截图并不完整,可是首先要弄懂大概状况和原理):

一、中止业务,备份一次全库安全

mysqldump -uroot -ppassword --all-databases --add-dorp-table > /root/all_mysql.sql

二、备份完成,中止数据库rest

systemctl stop mariadb 或者 service mysqld stop

三、修改配置文件日志

在[mysqld]下增长下面配置 innodb_file_per_table=1 验证配置是否生效,能够重启mysql后,执行 #service mysqld restart

四、验证blog

mysql -uroot -ppassword mysql索引

show variables like '%per_table%';rem

+-----------------------+-------+

| Variable_name | Value |

+-----------------------+-------+

| innodb_file_per_table | ON |

+-----------------------+-------+

1 row in set (0.00 sec)

innodb_file_per_table的状态变为ON

五、删除ibdata1文件和日志

rm -rf ibdata1

rm -rf ib_logfile*

六、还原数据库

mysql -uuser -ppassword

source /root/all_mysql.sql

数据文件单独存放(共享表空间改成每一个表独立的表空间文件)。

 

 

相关文章
相关标签/搜索