ibdata1文件太大缩小方法

MySql ibdata1文件太大如何缩小

原因:zabbix监控今天无法启动,看一下系统的MYSQL占用很多系统资源,CPU 100%,看一下数据库文件,用了INNODB的共享表空间,多达17G多,唯一的办法是拆分共享表空间为单独的数据库文件

[root@localhost mysql]# ls -lsh
total 17G
   0 -rw-r--r-- 1 root  root     0 Jul 11  2016 ~a.sql
 12K drwx------ 2 mysql mysql  12K Mar 18 11:00 cacti
 17G -rw-rw---- 1 mysql mysql  17G Mar 18 14:11 ibdata1 #17个G啊,mysql数据库运行慢,重启要半天
 40M -rw-rw---- 1 mysql mysql  40M Mar 18 14:11 ib_logfile0
 40M -rw-rw---- 1 mysql mysql  40M Mar 18 13:53 ib_logfile1
4.0K drwx------ 2 mysql mysql 4.0K May 19  2016 jumpserver
4.0K -rw-rw---- 1 mysql mysql   69 Mar 18 12:48 master.info


说明:

mysql ibdata1存放数据,索引等,是MYSQL的最主要的数据。
如果不把数据分开存放的话,这个文件的大小很容易就上了G,甚至几十G。对于某些应用来说,并不是太合适。因此要把此文件缩小。
无法自动收缩,必须数据导出,删除ibdata1,然后数据导入,比较麻烦,因此需要改为每个表单独的文件。
解决方法:数据文件单独存放(共享表空间如何改为每个表独立的表空间文件)。
步骤如下:
 
1)备份数据库
备份全部数据库,执行命令
#mysqldump -q -uroot -ppassword --add-drop-table --all-databases >/home/backup/all.sql
做完此步后,停止数据库服务。
#service mysqld stop
 
2)找到my.ini或my.cnf文件
linux下执行 
# /usr/libexec/mysqld --verbose --help | grep -A 1 'Default options'
Default options are read from the following files in the given order:
/etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf 
windows环境下可以:
mysqld --verbose --help > mysqlhelp.txt
notepad mysqlhelp.txt
在里面查找Default options,可以看到查找my.ini的顺序,以找到真实目录
 
3)修改mysql配置文件
打开my.ini或my.cnf文件
[mysqld]下增加下面配置
innodb_file_per_table=1
验证配置是否生效,可以重启mysql后,执行
#service mysqld restart
#mysql -uroot -ppassword
mysql> show variables like '%per_table%';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_file_per_table | ON    |
+-----------------------+-------+
1 row in set (0.00 sec)




mysql> 


看看innodb_file_per_table变量是否为ON
 
4)删除原数据文件
删除原来的ibdata1文件及日志文件ib_logfile*,删除/var/lib/mysql目录下的应用数据库文件夹(mysql文件夹不要删)
 
5)还原数据库
启动数据库服务
从命令行进入MySQL Server
还原全部数据库,执行命令
#service mysqld start
#mysql -uroot -pocs < /home/backup/all.sql 




经过以上几步后,可以看到新的ibdata1文件就只有几十M了,数据及索引都变成了针对单个表的小ibd文件了,它们在相应数据库的文件夹下面。


[root@localhost mysql]# du -sh ./*
1.5M ./cacti
18M ./ibdata1
40M ./ib_logfile0
40M ./ib_logfile1
8.0K ./jumpserver
984K ./mysql
0 ./mysql.sock
2.2M ./phpcmsv9
8.0K ./test

14G ./zabbix


分割线
感谢打赏
江西数库信息技术有限公司
YWSOS.COM 平台代运维解决方案
 评论
 发表评论
姓   名:

Powered by AKCMS