mysql データ圧縮

mysql(mariadb)でalter tableすると、変更元ファイルサイズと同程度の空き領域が必要になり、足りないと変更が失敗する。

足りない場合、空き領域の確保が必要だが、そもそもinsert deleteを繰り返してきたテーブルは、ファイルサイズがでかくなっており、

DBそのものをなんとかしないと、という状況に陥りがちだ。

なぜだか、optimize tableも途中で失敗するので、思考停止で、dump, restoreで対処するとよい。

この時、そのままdumpすると、ファイルサイズが巨大になるので、zipする。

 

mysqldump -R -u user -ppassword dbname | gzip -c > /var/tmp/dump.gz

以下mysqlクライントで実行

drop database dbname

create database dbname

zcat /var/tmp/dump.gz | mysql -u user -ppassword dbname