はじめに
MySQLの論理バックアップで使用するmysqldumpコマンドについて学習したことを簡単にまとめます。
検証に使用した環境
DB:MySQL8.0
論理バックアップについて
バックアップ手法には、論理バックアップと物理バックアップという観点があり、
論理バックアップは、
データベースのユーティリティー等を使用してバックアップする手法のこと
物理バックアップは、
ファイルシステムレベルでバックアップする手法のこと
となります。
mysqldumpコマンド
MySQLではmysqldumpコマンドで論理バックアップを取得できます。
このコマンドではバックアップ対象を復元するためのSQLを出力します。
インスタンス全体やデータベース、テーブルごと、といった単位を指定することも可能です。
shell> mysqldump [オプション] > file_name
ケース別の使い方
全てのデータベースをバックアップする場合
shell> mysqldump --all-databases > dump.sql
データベースを指定してバックアップする場合
shell> mysqldump [オプション] --databases [オプション] データベース1 データベース2 ... > dump.sql
データベースとテーブルを指定してバックアップする場合
shell> mysqldump [オプション] データベース名 テーブル名1 テーブル名2 ... > dump.sql
主なオプション
--user (-u)
サーバーへの接続時に使用するユーザー
--password (-p)
サーバーに接続する際に使用するパスワードです。
-pで指定した場合、オプションとパスワードの間にスペースを置けません。
--host (-h)
ダンプするホスト名。
デフォルトはlocalhostになります。
--port (-P)
使用するポート番号
--all-databases (-A)
すべてのデータベース内のすべてのテーブルをダンプします。
--flush-logs (-F)
ダンプを始める前にMySQLサーバーログファイルをフラッシュします。
※RELOAD権限が必要になります
--all-databasesオプションと組み合わせて使用した場合、ダンプされるデータベースごとにログをフラッシュします。
ただし、以下を使用した場合は例外となります。
--lock-all-tables、--master-data または --single-transaction を使用した場合。
詳細はこちら
--master-data
ダンプに、ダンプされたサーバーのバイナリログ座標 (ファイル名と位置) を出力するようになります。
バイナリログ座標が出力されることで、別のMySQLサーバーをレプリケーションのレプリカとして設定するために使用できるようになります。
--single-transaction
バックアップを1つのトランザクションで実行します。
InnoDBテーブルとして作成されている、トランザクションテーブルに効果があります。
データのダンプ前に、トランザクション分離モードをREPEATABLE READに設定し、START TRANSACTIONステートメントをサーバーに送信するため、
アプリケーションをブロックすることなく、START TRANSACTIONが発行された時点のデータベースの一貫したデータをダンプ出来ます。
--no-data
データを出力対象外とし、データベースやテーブルの定義のみダンプするようになります。
注意点
静止点を作ってバックアップする
MySQL8.0以降でInnoDBのみを使用している場合、--single-transactionで静止点を作ることが出来ます。
しかし、他のストレージエンジンを使用している場合、トランザクションの機能がありません。
そのため、--lock-all-tablesで全テーブルをロックして静止点を作る必要があります。
参考文献