1. 程式人生 > >MySQL單獨存放表空間Innodb_file_per_table

MySQL單獨存放表空間Innodb_file_per_table

art 我們 參數 ble mys -- rop 配置 隨著

在mysql中Innodb_file_per_table參數的作用是什麽呢,其實許多的朋友是不知道的,今天我們來看這篇MySQL單獨存放表空間Innodb_file_per_table參數詳解之後你就懂了哦。

MySQL可使用多種引擎,當我們選擇使用InnoDB引擎的時候,ibdata1這個文件會隨著時間的推移變得越來越大,占據大量的磁盤空間。

那麽,ibdata1裏保存了哪些東西,為什麽會變得越來越大呢?首先我們確認一下ibdata1的結構,ibdata1是InnoDB的共有表空間,默認配置是把全部表空間存放到ibdata1中,因此而造成ibdata1文件無限增長需釋放之說。

MySQL的Innodb_file_per_table參數控制表空間存放方式,通過配置Innodb_file_per_table參數可把全部表空間存放到ibdata1的方式改為使用獨享表空間將表空間分別單獨存放。

下面介紹一下具體的操作。

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

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

2) 刪除數據庫中數據

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

3) 停止MySQL

# service mysqld stop

4) 刪除ibdata1文件

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

5) 配置innodb_file_per_table

# vi /etc/my.cnf
innodb_data_home_dir = /var/lib/mysql
innodb_data_file_path = ibdata1:1G;ibdata2:200M:autoextend
innodb_file_per_table

開啟獨享表空間,並指定ibdata1大小為1G,ibdata2大小200M,自動擴張。

6) 啟動MySQL

# service mysqld start

7) 導入數據

把剛才導出來的數據庫,導入至數據庫。

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

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

InnoDB表的元數據
Buffer
UNDO日誌

MySQL單獨存放表空間Innodb_file_per_table