Mysql作為zabbix數據庫ibdata1文件太高解決


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,達到了縮減大文件的要求,減小磁盤壓力。


免責聲明!

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



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