處理MySQL的ibdata1文件過大問題

ibdata1文件是什麼?

ibdata1是一個用來構建innodb系統表空間的文件,這個文件包含了innodb表的元數據、撤銷記錄、修改buffer和雙寫buffer。若是file-per-table選項打開的話,該文件則不必定包含全部表的數據。當innodb_file_per_table選項打開的話,新建立表的數據和索引則不會存在系統表空間中,而是存放在各自表的.ibd文件中.mysql

顯然這個文件會愈來愈大,innodb_autoextend_increment選項則指定了該文件每次自動增加的步進,默認是8M.sql

是什麼緣由致使ibdata1文件會愈來愈大?

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

數據文件單獨存放(共享表空間改成每一個表獨立的表空間文件)。

 

 

相關文章
相關標籤/搜索