ibdata1是一個用來構建innodb系統表空間的文件,這個文件包含了innodb表的元數據、撤銷記錄、修改buffer和雙寫buffer。若是file-per-table選項打開的話,該文件則不必定包含全部表的數據。當innodb_file_per_table選項打開的話,新建立表的數據和索引則不會存在系統表空間中,而是存放在各自表的.ibd文件中.mysql
顯然這個文件會愈來愈大,innodb_autoextend_increment選項則指定了該文件每次自動增加的步進,默認是8M.sql
ibdata1存放數據,索引和緩存等,是MYSQL的最主要的數據。因此隨着數據庫愈來愈大,表也會越大,這個沒法避免的。若是時間長了,愈來愈大,咱們在處理日誌和空間的時候就不是那麼方便了,就不知從何入手了。接下來咱們就要處理下這樣的狀況,分庫存儲數據。數據庫
首先咱們把數據庫文件備份下來,而後直接刪除ibdata文件(爲了保險起見最好先全備一次,作到數據安全和完整),而後再從新導入數據庫文件便可!緩存
一、中止業務,備份一次全庫安全
mysqldump -uroot -ppassword --all-databases --add-dorp-table > /root/all_mysql.sql二、備份完成,中止數據庫rest
systemctl stop mariadb 或者 service mysqld stop三、修改配置文件日誌
在[mysqld]下增長下面配置 innodb_file_per_table=1 驗證配置是否生效,能夠重啓mysql後,執行 #service mysqld restart四、驗證blog
mysql -uroot -ppassword mysql索引
show variables like '%per_table%';rem
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| innodb_file_per_table | ON |
+-----------------------+-------+
1 row in set (0.00 sec)
innodb_file_per_table的狀態變爲ON
五、刪除ibdata1文件和日誌
rm -rf ibdata1
rm -rf ib_logfile*
六、還原數據庫
mysql -uuser -ppassword
source /root/all_mysql.sql
數據文件單獨存放(共享表空間改成每一個表獨立的表空間文件)。