MySQL ibdata1文件太大的解決辦法

在MySQL數據庫中,若是不指定innodb_file_per_table=1參數單獨保存每一個表的數據,MySQL的數據都會存放在ibdata1文件裏,時間久了這個文件就會變的很是大。mysql

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

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

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.sqlui

若是ibdata1上百GB,備份過程可能須要幾小時。url

二、中止MySQL服務。orm

service mysql stop索引

三、刪除ibdata一、ib_logfile*等文件文檔

mv ibdata1 ibdata1.20160419get

mv ib_logfile0 ib_logfile0.20160420

mv ib_logfile1 ib_logfile1.20160420

四、修改my.cnf配置文件

vi /etc/mysql/my.cnf

在[mysqld]子項下增長以下配置:

innodb_file_per_table = 1

五、刪除MySQL、performance_schema以外的全部數據庫

cd /var/lib/mysql

rm -rf zabbix

服務器上只有Zabbix數據庫。

六、重啓MySQL服務

service mysql start

ps -ef|grep mysql

七、恢復數據(從新導入數據)

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文件了,它們在相應數據庫的文件夾下面。

百度文庫中有篇文檔「解決ibdata1文件過大問題操做手冊」寫的更詳細。連接爲:http://wenku.baidu.com/link?url=2qj73zDqwLwNIAPg6tB60c20wAE6a_2IIcJ8fGb2EUk0rmRdxqq2Wc0yAgnx7hoJ-dICC4rzhC9I0rWdgLVV-avatmeuCh74JxRE22NE4N_

相關文章
相關標籤/搜索