ibdata1 肥大化対策

InnoDB データファイル ibdata1 の最適

CentOS 7で運用している、少し古めのWebサーバーでMySQLの領域が増えてきたので不要なDBを削除しても容量が減りません。MySQLのdatadirを確認すると、ibdata1と大きな容量のファイルがあります。このファイルはInnoDBのデータ領域(テーブルスペース)です。

初期値のままだと、テーブルスペースに空き領域がなくなると自動拡張して「ibdata1」が大きくなっていきます。これではディスク容量を圧縮するので、テーブルスペースをテーブル単位で作成するように変更します

$ ls -lh /var/lib/mysql | grep ibdata1
-rw-rw---- 1 mysql mysql  23G Nov  7 12:59 ibdata1

ibdata1 の肥大化の対策手順

肥大化の対策としては、以下のような流れになります

  1. データベースをエクスポート(ダンプ)します
  2. MySQLを停止
  3. 設定ファイを変更してテーブル単位で管理
  4. MySQLを起動
  5. データベースをインポート

1.既存のデータベースをエクスポート(ダンプ)します

$ mysqldump -u root -p --all-databases  > /var/tmp/dbdump.db

2.MariaDBを停止

$ sudo systemctl stop mariadb

3.設定ファイルを変更します。「innodb_data_file_path = ibdata1:1G」「ibdata1」の最大サイズは1Gとします。「innodb_file_per_table」ibdata1の最大サイズを超えた場合は、ibdata1に書き込まれずにテーブル単位で書きます

$ sudo vim /etc/my.cnf

[mysqld]
innodb_data_file_path = ibdata1:1G
innodb_file_per_table

4.ibdata1をリネームします

$ sudo mv /var/lib/mysql/ibdata1 /var/lib/mysql/ibdata1_old

5.ib_logfile0, ib_logfile1 があると起動しないので別のディレクトリに移動します

$ sudo mv /var/lib/mysql/ib_logfile0 /var/tmp
$ sudo mv /var/lib/mysql/ib_logfile1 /var/tmp

6.MariaDBを起動

$ sudo systemctl start mariadb

7.DBをインポート

$ mysql -u root -p < /var/tmp/dbdump.db

8.DBを更新したりして、問題がなさそうならバックアップしていたファイルを削除

$ sudo rm -f /var/lib/mysql/ibdata1_old
$ sudo rm -f /var/tmp/ib_logfile0
$ sudo rm -f /var/tmp/ib_logfile1

 

LinuxCentOS 6,CentOS 7

Posted by admin