はじめに
DBバックアップのコマンドはオプションたくさんあってわからなくなるのでまとめておく。
MySQL
参考
- https://dev.mysql.com/doc/refman/8.0/ja/mysqldump-sql-format.html
- https://dev.mysql.com/doc/refman/8.0/ja/mysqldump.html
- https://qiita.com/ryounagaoka/items/7be0479a36c97618907f
- https://tomcky.hatenadiary.jp/entry/20190506/1557144997
バックアップ
mysqldump -u {ユーザー名} -p –quote-names –hex-blob –skip-lock-tables –single-transaction –flush-logs –master-data=2 –databases {DB名} > {dumpファイル名} |
大切なのは以下のオプションです。
- –single-transaction:
- オンラインを止めずに整合性のあるダンプができるようにする
- –skip-lock-tables:
- テーブルロックしない
- (master-dataオプションをつけている場合は–lock-tablesがoffになるので不要だが、一応つけておく)
最新の状態にリカバリするのであれば、以下のオプションもつけます。
(ダンプした時点に戻すだけなら不要)
- –flush-logs:
- ダンプ前にログファイルをフラッシュするので、ダンプ後のログが明確になる
- 不要なログが含まれないので、リカバリ時に便利
- –master-data=2:
- ダンプファイルにバイナリログのファイル名と位置情報が含まれる
- レプリケーションの開始位置の目印になるので、リカバリ時に便利
- –skip-lock-tablesがない場合は、テーブルロックするので注意
以下は必須ではないですが、つけることが多いです。
- –quote-names:
- 識別子をバッククォテーションで囲む
- テーブル名等が予約後の場合に必要
- –hex-blob:
- バイナリカラムをhexに変換する
- BLOBデータ等がある場合に必要
- –databases:
- ダンプファイルに
CREATE DATABASE
とUSE
ステートメントが含まれる
- リストアする時に正しいDBを指定できるので便利
- 既にDBがある場合は再作成されるので注意
リストア
mysqldump -u {ユーザー名} -p < {dumpファイル名} |
上記コマンドはダンプ取得時点に戻すだけです。
ダンプ取得後の最新状態にリカバリするためには、レプリケーションもする必要がありますが、DBダンプとは関係ないので割愛します。
PostgreSQL
参考
- https://www.postgresql.jp/document/9.2/html/app-pgdump.html
- https://postgresweb.com/complete-explanation-of-pg_dump
バックアップ
pg_dump -U {ユーザー名} -Fc –quote-all-identifiers –no-owner –no-acl –dbname={DB名} > {dumpファイル名} |
pg_dumpはオプションをつけずとも、オンラインを止めずに整合性のあるダンプができます。
ですので、mysqldumpのように必須のオプションはありません。
なお、バイナリデータに関しても、pg_dumpではエスケープされるのでオプション不要です。
以下のオプションは好みです。
- -Fc:
- ダンプファイルをカスタム形式で出力する
- SQLスクリプトファイル形式より効率的
- マシンリソースが心配な場合は、-Fp(SQLスクリプトファイル形式で出力)の方が安心
- –quote-all-identifiers:
- すべての識別子(テーブル名、列名など)をダブルクォーテーションで囲む
- 識別子に予約後が含まれる場合に必要
- –no-owner –no-acl:
- OwnerとACLをダンプファイルに含めない
- これらのオプションをつけないとリストア時に元のOwnerとACLが使用されるので、異なる環境でリストアする場合は必要
リストア
上記で取得したダンプファイルをリストアするためには以下のコマンドを実行します。
pg_restore -U {ユーザー名} -d {DB名} -F c {dumpファイル名} |
-Fpの場合は以下のコマンドでリストアできます。
psql -U {ユーザー名} -d {DB名} -f {dumpファイル名} |
The following two tabs change content below.