mysqldump
論理バックアップの実施
注意点
- 更新時にロックがかかるので、実施時間等の調整が必要
- MyISAM がある場合
- 一貫性のあるデータを取得するのは
--master-data=2
or--lock-all-tables
を指定すると更新ロックがかかる
- 一貫性のあるデータを取得するのは
- InnoDB のみの場合
--single-transaction
と--master-data=2
を指定するとバックアップ中でも更新ロックされない
- MyISAM がある場合
- データ量に比例してバックアップ / リカバリに時間がかかる
- 更新時にロックがかかるので、実施時間等の調整が必要
master-data
- --master-data
- 2
- CHANGE MASTER TO ステートメントは SQL コメントとして書き込まれる
- 1
- ステートメントはコメントとしては書き込まれず、ダンプファイルがリロードされるときに実行
- デフォルト値
--all-databases
- すべてのデータベースのダンプを取得
- 各データベース内のすべてのテーブルを一度にロックしてダンプするため、一貫性のデータベースになる
- ただし、異なるデータベース間のテーブルに一貫性はない
- この問題を解決するには
--lock-all-tables
オプションを使用する
- InnoDB のバックアップには、
--single-transaction
オプションを追加する- このオプションは、LOCK TABLES ではなく InnoDB の MVCC 機能を使って、PIT が単一の一貫したバックアップを作成
--default-character-set=binary
- 文字化けのもとになるので、文字コードはきちんと指定する
--single-transaction
- トランザクション開始時に存在していたデータがダンプされる
ダンプ
# mysqldump -u root -p --opt --default-character-set=binary name > name.sql
スキーマだけ
# mysqldump -u root -p --opt --default-character-set=binary --no-data name > schema_name.sql
192.168.12.122 へ転送 ※ ローカルへの書き出しは無い
$ mysqldump -u root -p --single-transaction --master-data --all-databases --flush-privileges --events --default-character-set=binary | ssh -oStrictHostKeyChecking=no -oServerAliveInterval=60 192.168.12.122 "cat > /tmp/fulldump-f$(date +%Y%m%d).sql"
タブ形式での出力
$ mysqldump -u root -p --opt --add-drop-database --default-character-set=binary --tab=/tmp [database name] [table name]