本人遇到一次在安裝zabbix監控的時候,yum安裝的MySQL資料庫,後面用了一段時間發現data目錄下的ibdata1的空間特別大,反而我的zabbix資料庫的空間很小,這樣的情況在後面備份zabbix資料庫的時候會很不方便,所以想著要怎麼解決下。ibdata1文件是什麼? ibdata1是一個 ...
本人遇到一次在安裝zabbix監控的時候,yum安裝的MySQL資料庫,後面用了一段時間發現data目錄下的ibdata1的空間特別大,反而我的zabbix資料庫的空間很小,這樣的情況在後面備份zabbix資料庫的時候會很不方便,所以想著要怎麼解決下。
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
數據文件單獨存放(共用表空間改為每個表獨立的表空間文件)。
(最近一直在忙沒顧上寫,把最近遇到的少許問題整理分享一下)有不對之處還請指出