しるてく

技術的な話をします

パーティションごとにmysqldumpする

ログテーブルのようなすごい巨大なテーブルがあって、古いログはいらないから削除したい、でも万が一のときにデータはどこかに取っておきたいというときは、

--complete-insert
カラム名を含んだ、完全なINSERTステートメントを使用
--no-create-info
ダンプされたテーブルを再作成するCREATE TABLEステートメントを書かない
--where
WHERE状態に選択された行のみダンプ

このあたりをオプションに含めて置くとよいのかなーと思った。

# mysqldump -u$user -p \
> --default-character-set=utf8 \
> --complete-insert \
> --no-create-info \
> --where="created_at>='2012-04-01 00:00:00' and created_at<'2012-05-01 00:00:00'" \
> $db_name $table_name > ${table_name}_p201204.sql

で、ダンプしたあとに、

> ALTER TABLE $table_name DROP PARTITION p201204;

参考

MySQL :: MySQL 5.1 リファレンスマニュアル :: 7.12 mysqldump — データベースバックアッププログラム
http://dev.mysql.com/doc/refman/5.1/ja/mysqldump.html