ibdata1是一个用来构建innodb系统表空间的文件,这个文件包含了innodb表的元数据、撤销记录、修改buffer和双写buffer,时间久了这个文件就会变的非常大。
当innodb_file_per_table选项打开,新创建表的数据和索引则不会存在系统表空间中,而是存放在各自表的.ibd文件中。
1、备份所有的数据库
mysqldump -uroot -pxxxx --all-databases --add-drop-table > /home/all_database.sql
2、删除所有的用户数据库,系统数据库(MySQL,performance_schema,INFORMATION_SCHEMA)除外
3、停止mysql服务,修改mysql配置
service mysqldstop
vi /etc/my.cnf
[mysqld] innodb_file_per_table = 1 #主要是这个配置 innodb_flush_method = O_DIRECT innodb_log_file_size = 1G innodb_buffer_pool_size = 4G #innodb_buffer_pool_size的值最好设置物理内存70%
4、删除ibdata1、ib_logfile*文件
rm ibdata1 rm ib_logfile*
我一般为了安全起见,不直接使用rm,用mv命令移动到其他备份文件夹下,等确认所有的修改没问题且启动运行成功后再删除也不迟。
5、重启mysql服务
service mysqld start
6、恢复数据
mysql -uroot -pxxx < /home/all_database.sql
或
mysql -uroot -p #进入mysql source /home/all_database.sql
导入成功后,我们可以查看ibdata1文件大小du-sh*还可以进入,mysql数据库文件夹下查看是否有ibd文件生成,数据及索引都变成了针对单个表的小ibd文件了
访客评论