ibdata1是?


MySQL使用InnoDB引擎的時候,ibdata1這個文件會隨着時間的增長,會變得越來越大,占據大量的磁盤空間。

那么,ibdata1里保存了哪些東西,為什么會變得越來越大呢,讓我們開看看ibdata1的構造。

ibdata1是InnoDB的共有表空間,默認情況下會把表空間存放在一個文件ibdata1中,會造成這個文件越來越大。

發現問題所在之后,解決方法就是,使用獨享表空間,將表空間分別單獨存放。MySQL開啟獨享表空間的參數是Innodb_file_per_table,會為每個Innodb表創建一個.ibd的文件。

mysql_ibdata1_01

操作步驟

下面講一下具體的操作。

1) 導出數據庫中所有數據

# mysqldump -u root -p --all-database > /tmp/all-database.dump

2) 刪除數據庫中數據

# mysql -u root -p
mysql> drop database dbname;

3) 停止MySQL

# /etc/init.d/mysqld stop

4) 刪除ibdata1文件(移動到/tmp下)

# mv /var/lib/mysql/ibdata1 /tmp
# mv /var/lib/mysql/ib_logfile0 /tmp
# mv /var/lib/mysql/ib_logfile1 /tmp

5) my.cnf設定

# vi /etc/my.cnf
開啟獨享表空間,並指定ibdata1大小為1G,ibdata2大小200M,自動擴張。
innodb_data_home_dir = /var/lib/mysql
innodb_data_file_path = ibdata1:1G;ibdata2:200M:autoextend
innodb_file_per_table

6) 啟動MySQL

# /etc/init.d/mysqld start

7) 導入數據

# mysql -u root -p < /tmp/all-database.dump

8) 確認

mysql_ibdata1_02

后記

開啟獨享表空間后,並不是說就不需要ibdata1了,因為在ibdata1中還保存着下面這些數據。

  • InnoDB表的元數據
  • Buffer
  • UNDO日志


免責聲明!

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



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