處理MySQL的ibdata1文件過大問題


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、還原數據庫

mysql -uuser -ppassword

source /root/all_mysql.sql

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

 

 

 


免責聲明!

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



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