1 ibdata1文件內容:
ibdata1是一個用來構建innodb系統表空間的文件,這個文件包含了innodb的元數據、撤銷數據、修改buffer和雙寫buffer。如果file_per_table選項打開的話,該文件則不一定包含所有表的數據。當innodb_file_per_table選項打開的話,新創建表的數據和索引則不會存在系統表空間,而是存放在各自表的.ibd文件中。
顯然這個文件會越來越大,innodb_autoextend_increment選項則指定了該文件每次自動增長的步進,默認是8M.
2 ibdata1增大的原因:
ibdata1存放數據,索引和緩存等,是MYSQL的最主要的數據。所以隨着數據庫越來越大,表也會越大,這個無法避免的。如果時間長了,越來越大,我們在處理日志和空間的時候就不是那么方便了,就不知從何入手了。接下來我們就要處理下這樣的情況,分庫存儲數據。
3 解決辦法:
a. 備份Mysql數據庫文件(最好是全備),直接刪除ibdata文件(ibdata1、ib_logfile*),最后重新導入數據文件。
b 具體步驟
1,停止停止zabbix,做一次全備
systemctl stop zabbix-server.service
mysqldump -uroot -ppassword --all-databases --add-dorp-table > /tmp/all_mysql.sql
/tmp/all_mysql.sql (你自己合適的目錄)
2,備份完成,停止mysql數據庫
systemctl stop mariadb 或者 service mysqld stop
3, 修改配置文件 Linux下MySQL的配置文件是my.cnf,一般會放在/etc/my.cnf,/etc/mysql/my.cnf
配置 innodb_file_per_table =1
重啟mysq,l驗證配置是否生效
systemctl start mariadb 或 service mysqld (re)start
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數據庫
mysql -uroot -ppassword
source /tmp/all_mysql.sql
總結:
ibdata1由之前的60g,經過上面的操作變為38g,達到了縮減大文件的要求,減小磁盤壓力。