MySQLサーバからmysqldumpで論理バックアップを作成する

MySQLサーバからmysqldumpで論理バックアップを作成する

Table of Contents

MySQLデータベースサーバからデータベースを論理バックアップするには、mysqldumpコマンドを使います。ただ呼ぶだけでなく、いくつかオプションをつけることでより効果良くします。

論理バックアップとは?

物理バックアップのようにデータファイルをコピーせず、テーブル構造とデータを再生成できるCREATE TABLE や INSERT などのステートメントが含まれたバックアップです。

物理バックアップと比べたデメリット

データサイズが大きくなってくると、リストアに時間がかなりかかる。

mysqldumpコマンドで論理バックアップファイルを作成

バックアップファイルといってもDDLとDMLが書かれたSQLファイルです。

フォーマットは次のようにします。

mysqldump -u <ユーザ名> --databases <DB名> -p --host <DBサーバIP> -P <ポート番号> --quick --single-transaction --quote-names --ignore-table=<無視テーブル名1> --ignore-table=<無視テーブル2> > 出力ファイル名.sql

少しオプションが多いですが、いくつかオプションをが入っていることで、安全面や速度の効果を期待できます。

いくつかのオプションをデフォルトで動くケースではオプション数を減らせます。 例えばlocalhostのMySQLにrootで全テーブルをバックアップする場合は次のようになります。

mysqldump -uroot hoge_database --quote-names --single-transaction > hoge.sql

使用するオプション

mysqlコマンドで既に使ったことのあるオプションは省略します。

--quickオプション

テーブルのレコードをバッファせず1行ずつダンプする。デフォルトで有効なので、明示的にする目的以外では指定しなくても問題ありません。

なお--skip-quickを使用すれば、ダンプ前にテーブル内容をメモリにバッファリングしますが、サイズの大きいテーブルがあるとメモリ不足を起こします。

--single-transactionオプション

一貫した状態でダンプする。ただし、InnoDBテーブルのみ有効。

MyISAMテーブルを含むDBでは効果がないですが、MySQL5.6からはデフォルトストレージエンジンはInnoDBとなってるので気にするケースは少ないかと思います。

なお、MyISAMテーブルを含むDBでは、–lock-tablesか–lock-all-tablesを使います。

--ignore-tableオプション

指定されたテーブルはダンプの対象から外れます。 複数テーブル指定は複数個オプションを渡します。

--quote-namesオプション

識別子を逆引用符文字(バックティック)で囲みます。識別に予約ワードが含まれても問題を起こさないようにします。

このエントリーをはてなブックマークに追加