ibdata肥大化の対処方法

ibdataが肥大化しないためにmy.cnfの書き換えが必要

前回の記事: 【容量不足にした犯人を探す方法
残念ながら、DB全体をダンプ→設定の書き換え→リストアの流れになるようだ。
 

DB全体をダンプ

# eventsテーブルもダンプ
sudo mysqldump \
 --all-databases \
 --add-drop-database \
 --add-drop-table \
 --lock-all-tables \
 --events  \
 > /tmp/dumpdata

# ダンプファイルを確認
ls -al /tmp/dumpdata
-rw-r--r-- 1 root root 530170 12月  6 15:53 2018 /tmp/dumpdata

 

my.cnfの書き換え

innodb_data_file_path = ibdata1:1G
ibdata1 のサイズ制限を1GBとする。
制限サイズに達すると、TABLEの更新ができなくなるらしい。
innodb_file_per_table
ibdata1に全てのデータを放り込まず、それぞれのテーブルへ分散させるらしい。

# mysqldを停止
/etc/init.d/mysql stop
cp -a /etc/my.cnf /etc/my.cnf.bak

# [mysqld]セクション内に
# innodb_data_file_path = ibdata1:1G
# innodb_file_per_table
# の2行を追加
vim /etc/my.cnf

# 設定を確認
cat /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
innodb_data_file_path = ibdata1:1G
innodb_file_per_table

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

 

設定を反映してリストア

# えいやっと削除して、失敗したら残念な思いをするので、
# 避難用の一時フォルダを作成
mkdir /tmp/mysql_ibd

# 避難フォルダに移動
mv /var/lib/mysql/ibdata1 /var/lib/mysql/ib_logfile* /tmp/mysql_ibd/

# mysqldを起動
/etc/init.d/mysqld start

# ダンプからリストア
mysql < /tmp/dumpdata

# DBを作成し、リストア
mysql -e 'CREATE DATABASE cloud;'
mysql cloud < cloud_dump.sql

# 問題なさそうなら、避難用のフォルダ削除
rm -rf /tmp/mysql_ibd

 
 

cf. [MySQL] ibdata1のサイズを削減する手順 [InnoDB]
https://oshiire.to/archives/1684
cf. MySQL ibdataのデータサイズが肥大化した場合の対処方法。
https://qiita.com/kooohei/items/15607ffbc3226d636b3f

コメント

タイトルとURLをコピーしました