mysqldump — データベースバックアッププログラム

mysqldumpクライアントは元はIgor Romanenkoによって書かれたバックアッププログラムです。バックアップや他のSQLサーバ(MySQLサーバに限りません)への転送のためにデータベースやデータベースのコレクションのダンプに役立ちます。ダンプには一般に、テーブルの作成やそこでのデータ配置、の片方または両方のSQLステートメントが含まれています。また、mysqldumpはCSVや他の区切り文字のテキスト、あるいはXMLフォーマットでファイルを生成させるために利用することもできます。

もしあなたがサーバのバックアップをしていて、かつテーブルがすべてMyISAMテーブルの場合、代わりにmysqlhotcopyの使用をお勧めします。これは、バックアップやリストアのスピードが速くなるからです。項7.13. 「mysqlhotcopy — データベースバックアッププログラム」 を参照してください。

mysqldumpを起動する主な方法は3つあります。

shell> mysqldump [options] db_name [tables]
shell> mysqldump [options] --databases db_name1 [db_name2 db_name3...]
shell> mysqldump [options] --all-databases

db_nameの後ろにテーブル名を指定しない場合、もしくは--databases--all-databasesオプションを使用した場合、データベース全体がダンプされます。

使用中のバージョンのmysqldumpがサポートするオプションのリストを取得するには、mysqldump --helpを実行してください。

mysqldumpの中には他オプションをグループ化した略記法となっているものがあります。--opt--compactはこれに分類されるものです。例えば、--optを使用することは--add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charsetを指定したのと同じことです。MySQL 5.1以降、--optが表すオプションは全てデフォルトで有効化されています。これは、--optがデフォルトで有効なためです。

グループオプションの効果を逆転させる場合、オプションの--skip-xxx の形式(--skip-opt--skip-compactなど)を使用してください。グループオプションに続いて特定の機能を有効化・無効化するオプションをつけることで、グループオプションの効果の一部だけを選択することが可能です。以下に例を示します。

グループオプションの一部を選択して効果を有効化・無効化する場合、オプションは前から後ろへの順で処理されるため、記述する順番が重要になります。例えば、--disable-keys --lock-tables --skip-optは意図している効果を生みません。単一では--skip-optと同じになります。

mysqldumpはテーブル内容を一行ずつ取得してダンプするか、テーブルから全ての内容を取得しダンプする前にメモリでバッファすることができます。大きなテーブルをダンプしている場合、メモリへのバッファが問題になる場合があります。一行ずつテーブルをダンプする場合、--quickオプションを使用してください(もしくは--optを指定すれば--quickが含まれています)。--opt (故に--quickも) はMySQL 5.1以降デフォルトで有効化されています。メモリバッファを有効化するには、--skip-quickを使用してください。

最新のmysqldumpを使用してダンプしたものを非常に古いMySQLサーバに再ロードしたい場合、--optまたは--extended-insertオプションの使用は避けてください。代わりに--skip-optを使用してください。

mysqldumpは次のオプションをサポートします。

--var_name=value 構文を使用することで以下の構文をセットすることができます。

--set-variable=var_name=value or -O var_name=value構文を使用することで、変数をセットすることも可能です。構文は反対語となっています。.

mysqldumpの最も一般的な用途は、データベース全体のバックアップの作成です。

shell> mysqldump db_name > backup-file.sql

ダンプファイルをサーバに戻し読みすることが可能です。

shell> mysql db_name < backup-file.sql

また、次のようにもできます。

shell> mysql -e "source /path-to-backup/backup-file.sql" db_name

mysqldumpは1つのMySQLサーバからデータをコピーすることでデータベースのpopulatingに便利です。

shell> mysqldump --opt db_name | mysql --host=remote_host -C db_name

1つのコマンドで複数のデータベースをダンプすることが可能です。

shell> mysqldump --databases db_name1 [db_name2 ...] > my_databases.sql

全てのデータベースをダンプするには、--all-databasesオプションを使用してください。

shell> mysqldump --all-databases > all_databases.sql

InnoDBテーブルに関して、mysqldumpはオンラインバックアップの作成方法を提供しています。

shell> mysqldump --all-databases --single-transaction > all_databases.sql

このバックアップはグローバルリードロックをダンプの最初に、全テーブルで取得することだけが必要です(FLUSH TABLES WITH READ LOCKを使用して)。このロックが取得されれば、バイナリログの座標は読まれ、ロックが開放されます。FLUSHステートメントが発行されている際、1つの長い更新ステートメントが作動している場合にのみ、MySQLサーバはその長いステートメントが終了するまでストールすれば、ダンプがロックフリーとなります。MySQLサーバが受ける更新ステートメントが短い場合(実行時間を指す)、更新の数が多くても最初のロック期間はさほど気にならないはずです。

point-in-timeリカバリは、(もしくは「roll-forward」ーこれは古いバックアップをリストア、そのバックアップが行われてから発生した変更を再生する場合)、バイナリログを回転する、もしくはダンプが対応しているバイナリログの座標だけでも知っているとと便利な場合があります(項 「バイナリ ログ」を参照して下さい)。

shell> mysqldump --all-databases --master-data=2 > all_databases.sql

または

shell> mysqldump --all-databases --flush-logs --master-data=2
              > all_databases.sql

--master-data--single-transactionオプションは同時に使用することができ、テーブルがInnoDBストレージエンジンを使用して記憶されている場合、point in timeリカバリに合うオンラインバックアップを作成する便利な方法を提供しています。

バックアップ作成の追加情報に関しては、項 「データベースのバックアップ」と項 「バックアップとリカバリ手法の例示」を参照してください。

ビューのバックアップの際問題が発生した場合、ビューに対する制限を含むセクションを参照してください。権限が不足している事によって失敗した場合の、ビューバックアップ解決策を記しています。項D.4. 「ビューの規制」 を参照してください。