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 の肥大化の対策手順
肥大化の対策としては、以下のような流れになります
- データベースをエクスポート(ダンプ)します
- MySQLを停止
- 設定ファイを変更してテーブル単位で管理
- MySQLを起動
- データベースをインポート
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
ディスカッション
コメント一覧
まだ、コメントがありません