MySQL ibdata1文件太大的解決辦法


MySQL ibdata1文件太大的解決辦法

 

在MySQL數據庫中,如果不指定innodb_file_per_table=1參數單獨保存每個表的數據,MySQL的數據都會存放在ibdata1文件里,時間久了這個文件就會變的非常大。

下面是參考網上的一些資料,把數據分別保存在各數據庫子目錄里的方法,這樣新產生的ibdata1文件就不會太大了。下面是在Ubuntu 14.04.12 x64,MySQL5.5上對ibdata1進行瘦身,操作過程的整理。

1、備份數據庫中的數據。

mysqldump -u root -p --extended-insert --all-databases --add-drop-database --disable-keys --flush-privileges --quick --routines --triggers > /home/all-database.sql

//有的文檔用的是這樣的參數:mysqldump -q -uroot -p --add-drop-table --all-databases --events >/home/all-database.sql

如果ibdata1上百GB,備份過程可能需要幾小時。

2、停止MySQL服務。

service mysql stop

3、刪除ibdata1、ib_logfile*等文件

mv ibdata1 ibdata1.20160419

mv ib_logfile0 ib_logfile0.20160420

mv ib_logfile1 ib_logfile1.20160420

4、修改my.cnf配置文件

vi /etc/mysql/my.cnf

在[mysqld]子項下增加如下配置:

innodb_file_per_table = 1

5、刪除MySQL、performance_schema之外的所有數據庫

cd /var/lib/mysql

rm -rf zabbix

服務器上只有Zabbix數據庫。

6、重啟MySQL服務

service mysql start

ps -ef|grep mysql

7、恢復數據(重新導入數據)

mysql -u root -p

Enter password:

source /home/all-databaes.sql

exit

//有的文檔用這樣的命令格式:mysql -uroot -p < /home/all-database.sql

Enter password:

其中的/home/all-database.sql即為第一步備份生成的文件,如果原來數據庫中數據較多,還原過程可能會持續較長時間,請耐心等待還原完成。如果超過30個小時還沒完成,可能要考慮中止恢復數據操作,先清除一部分table中的數據,從步驟1重新開始。如果table中記錄特多又可以全部刪除,用truncate <tablename>速度比較快。

經過以上幾步后,可以看到新的ibdata1文件就只有幾十兆了,數據及索引都變成了針對單個表的小

ibd文件了,它們在相應數據庫的文件夾下面。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM