處理MySQL的ibdata1檔案過大問題

2022-05-04 02:15:08 字數 1624 閱讀 9265

ibdata1檔案是什麼?

ibdata1是乙個用來構建innodb系統表空間的檔案,這個檔案包含了innodb表的元資料、撤銷記錄、修改buffer和雙寫buffer。如果file-per-table選項開啟的話,該檔案則不一定包含所有表的資料。當innodb_file_per_table選項開啟的話,新建立表的資料和索引則不會存在系統表空間中,而是存放在各自表的.ibd檔案中.

顯然這個檔案會越來越大,innodb_autoextend_increment選項則指定了該檔案每次自動增長的步進,預設是8m.

是什麼原因導致ibdata1檔案會越來越大?
ibdata1存放資料,索引和快取等,是mysql的最主要的資料。所以隨著資料庫越來越大,表也會越大,這個無法避免的。如果時間長了,越來越大,我們在處理日誌和空間的時候就不是那麼方便了,就不知從何入手了。接下來我們就要處理下這樣的情況,分庫儲存資料。

該如何處理呢?
首先我們把資料庫檔案備份下來,然後直接刪除ibdata檔案(為了保險起見最好先全備一次,做到資料安全和完整),然後再重新匯入資料庫檔案即可!

具體操作步驟如下(截圖並不完整,但是首先要弄懂大概情況和原理):
1、停止業務,備份一次全庫

mysqldump -uroot -ppassword --all-databases --add-dorp-table > /root/all_mysql.sql

2、備份完成,停止資料庫

systemctl stop mariadb 或者 service mysqld stop
3、修改配置檔案

在[mysqld]下增加下面配置 innodb_file_per_table=1 驗證配置是否生效,可以重啟mysql後,執行 #service mysqld restart
4、驗證

mysql -uroot -ppassword mysql

show variables like '%per_table%';

| variable_name | value |

| innodb_file_per_table | on |

1 row in set (0.00 sec)

innodb_file_per_table的狀態變為on

5、刪除ibdata1檔案和日誌

rm -rf ibdata1

rm -rf ib_logfile*

6、還原資料庫

資料檔案單獨存放(共享表空間改為每個表獨立的表空間檔案)。

如何刪除ibdata1

高危操作,謹慎執行,因為執行完操作之後,資料庫原來的表可能會不能用 資料庫優化需要注意的地方 1 在資料庫test中,如果其中一張表的資料量很大,那麼另一張表的插入效率會很低 2 ibdata1 當你啟用了 innodb file per table,表被儲存在他們自己的表空間裡,但是共享表空間仍然...

mysql中ibdata1過大的問題

ibdata1檔案是什麼?答 ibdata1是乙個用來構建innodb系統表空間的檔案,這個檔案包含了innodb表的元資料 撤銷記錄 修改buffer和雙寫buffer。如果file per table選項開啟的話,該檔案則不一定包含所有表的資料。當innodb file per table選項開...

如何收縮Mysql的ibdata1檔案

ibdata1是mysql資料庫中乙個資料檔案了,你會發現它來越大了,下面我來介紹收縮mysql的ibdata1檔案大小方法。如上所說,你沒法去收縮innodb資料檔案,你也沒辦法在一台沒有開啟innodb file per table選項的機器上直接加上該選項讓他工作,你必須在安裝完mysql就加...