MySQL 8.0 リファレンスマニュアル MySQL NDB Cluster 8.0 を含む

このページは機械翻訳したものです。

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

mysqlpump クライアントユーティリティは logical backups を実行し、元のデータベースオブジェクト定義およびテーブルデータを再現するために実行できる一連の SQL ステートメントを生成します。 別の SQL サーバーにバックアップまたは転送するために、1 つ以上の MySQL データベースをダンプします。

ヒント

複数のスレッド、ファイル圧縮、進捗情報の表示、および Oracle Cloud Infrastructure Object Storage ストリーミングや MySQL データベースサービス 互換性チェックおよび変更などのクラウド機能で並列ダンプを提供する MySQL Shell dump utilities の使用を検討してください。 ダンプは、MySQL Shell load dump utilities を使用して MySQL Server インスタンスまたは MySQL データベースサービス DB システムに簡単にインポートできます。 MySQL Shell のインストール手順は、here にあります。

mysqlpump の機能は次のとおりです:

注記

mysqlpump は、MySQL 5.7 で導入された MySQL 機能を使用するため、MySQL 5.7 以上で使用することを前提としています。

mysqlpump には、ダンプされたテーブル、ダンプされたビュー用の SHOW VIEW、ダンプされたトリガー用の TRIGGER、および --single-transaction オプションが使用されていない場合は LOCK TABLES に対する少なくとも SELECT 権限が必要です。 ユーザー定義をダンプするには、mysql システムデータベースに対する SELECT 権限が必要です。 オプションの説明に示すように、一部のオプションではその他の権限が必要な場合があります。

ダンプファイルをリロードするには、ダンプファイルに含まれているステートメントを実行するために必要な権限 (それらのステートメントによって作成されたオブジェクトに対する適切な CREATE 権限など) が必要です。

注記

Windows で出力リダイレクトを使用して PowerShell を使用して作成されたダンプは、UTF-16 エンコーディングを持つファイルを作成します:

shell> mysqlpump [options] > dump.sql

ただし、UTF-16 は接続文字セットとして許可されていないため (セクション10.4「接続文字セットおよび照合順序」 を参照)、ダンプファイルを正しくロードできません。 この問題を回避するには、ASCII 形式で出力を作成する --result-file オプションを使用します:

shell> mysqlpump [options] --result-file=dump.sql

mysqlpump の起動構文

デフォルトでは、mysqlpump はすべてのデータベースをダンプします (mysqlpump の制限事項 に記載されている特定の例外を除く)。 この動作を明示的に指定するには、--all-databases オプションを使用します:

shell> mysqlpump --all-databases

単一のデータベースまたはそのデータベース内の特定のテーブルをダンプするには、コマンドラインでデータベースに名前を付け、オプションでテーブル名を指定します:

shell> mysqlpump db_name
shell> mysqlpump db_name tbl_name1 tbl_name2 ...

すべての名前引数をデータベース名として扱うには、--databases オプションを使用します:

shell> mysqlpump --databases db_name1 db_name2 ...

デフォルトでは、付与テーブルを含む mysql システムデータベースをダンプしても、mysqlpump はユーザーアカウント定義をダンプしません。 付与テーブルの内容を論理定義として CREATE USER および GRANT ステートメントの形式でダンプするには、--users オプションを使用して、すべてのデータベースダンプを抑制します:

shell> mysqlpump --exclude-databases=% --users

前述のコマンドの % は、--exclude-databases オプションのすべてのデータベース名に一致するワイルドカードです。

mysqlpump では、データベース、テーブル、ストアドプログラムおよびユーザー定義を含めるか除外するためのいくつかのオプションがサポートされています。 mysqlpump オブジェクトの選択を参照してください。

ダンプファイルをリロードするには、ダンプファイルに含まれるステートメントを実行します。 たとえば、mysql クライアントを使用します:

shell> mysqlpump [options] > dump.sql
shell> mysql < dump.sql

次の説明では、その他の mysqlpump の使用例を示します。

mysqlpump でサポートされているオプションのリストを表示するには、コマンド mysqlpump --help を発行します。

mysqlpump オプションのサマリー

mysqlpump では、次のオプションがサポートされています。これらのオプションは、コマンドラインまたはオプションファイルの[mysqlpump]および[client]グループで指定できます。 (MySQL 8.0.20 より前は、mysqlpump[mysqlpump]ではなく[mysql_dump]グループを読み取りました。 8.0.20 では、[mysql_dump]は引き続き受け入れられますが、非推奨になりました。) MySQL プログラムによって使用されるオプションファイルの詳細については、セクション4.2.2.2「オプションファイルの使用」を参照してください。

表 4.16 「mysqlpump のオプション」

オプション名 説明 導入 非推奨
--add-drop-database DROP DATABASE ステートメントを各 CREATE DATABASE ステートメントの前に追加
--add-drop-table 各 CREATE TABLE ステートメントの前に DROP TABLE ステートメントを追加
--add-drop-user 各 CREATE USER ステートメントの前に DROP USER ステートメントを追加
--add-locks LOCK TABLES と UNLOCK TABLES ステートメントで各テーブルダンプを囲む
--all-databases すべてのデータベースのダンプ
--bind-address 指定されたネットワークインタフェースを使用して MySQL サーバーに接続
--character-sets-dir 文字セットがインストールされているディレクトリ
--column-statistics ANALYZE TABLE ステートメントを記述して統計ヒストグラムを生成
--complete-insert カラム名を含む完全な INSERT ステートメントを使用
--compress クライアントとサーバー間で送信される情報をすべて圧縮 8.0.18
--compress-output 出力圧縮アルゴリズム
--compression-algorithms サーバーへの接続に許可される圧縮アルゴリズム 8.0.18
--databases すべての名前引数をデータベース名として解釈
--debug デバッグログの書込み
--debug-check プログラムの終了時にデバッグ情報を出力
--debug-info プログラムの終了時に、デバッグ情報、メモリー、および CPU の統計を出力
--default-auth 使用する認証プラグイン
--default-character-set デフォルト文字セットを指定
--default-parallelism パラレル処理のデフォルトのスレッド数
--defaults-extra-file 通常のオプションファイルに加えて、名前付きオプションファイルを読み取ります
--defaults-file 指名されたオプションファイルのみを読み取る
--defaults-group-suffix オプショングループのサフィクス値
--defer-table-indexes リロードの場合は、テーブルの行をロードするまでインデックス作成を延期
--events ダンプされたデータベースからのイベントのダンプ
--exclude-databases ダンプから除外するデータベース
--exclude-events ダンプから除外するイベント
--exclude-routines ダンプから除外するルーチン
--exclude-tables ダンプから除外するテーブル
--exclude-triggers ダンプから除外するトリガー
--exclude-users ダンプから除外するユーザー
--extended-insert 複数行 INSERT 構文の使用
--get-server-public-key サーバーから RSA 公開キーをリクエスト
--help ヘルプメッセージを表示して終了
--hex-blob 16 進数表記法を使用したバイナリカラムのダンプ
--host MySQL サーバーがあるホスト
--include-databases ダンプに含めるデータベース
--include-events ダンプに含めるイベント
--include-routines ダンプに含めるルーチン
--include-tables ダンプに含めるテーブル
--include-triggers ダンプに含めるトリガー
--include-users ダンプに含めるユーザー
--insert-ignore INSERT ステートメントではなく INSERT IGNORE を書き込みます
--log-error-file 指定されたファイルに警告およびエラーを追加
--login-path ログインパスオプションを .mylogin.cnf から読み取り
--max-allowed-packet サーバーとの間で送受信するパケットの最大長
--net-buffer-length TCP/IP とソケット通信のバッファーサイズ
--no-create-db CREATE DATABASE ステートメントを記述しないでください
--no-create-info 各ダンプされたテーブルを再作成する CREATE TABLE ステートメントを書き出さない
--no-defaults オプションファイルを読み取らない
--parallel-schemas スキーマ処理の並列性の指定
--password サーバーに接続する際に使用するパスワード
--plugin-dir プラグインがインストールされているディレクトリ
--port 接続用の TCP/IP ポート番号
--print-defaults デフォルトオプションの印刷
--protocol 使用するトランスポートプロトコル
--replace INSERT ステートメントではなく REPLACE ステートメントを書き出す
--result-file 指定されたファイルに出力
--routines ダンプされたデータベースからストアドルーチン (プロシージャーとファンクション) をダンプ
--server-public-key-path RSA 公開鍵を含むファイルへのパス名
--set-charset SET NAMES default_character_set を出力に追加
--set-gtid-purged SET @@GLOBAL.GTID_PURGED を出力に追加するかどうか
--single-transaction 単一トランザクション内のテーブルのダンプ
--skip-definer VIEW およびストアドプログラム CREATE ステートメントから DEFINER および SQL SECURITY 句を省略
--skip-dump-rows テーブルの行をダンプしない
--socket 使用する Unix ソケットファイルまたは Windows 名前付きパイプ
--ssl-ca 信頼できる SSL 認証局のリストを含むファイル
--ssl-capath 信頼できる SSL 認証局の証明書ファイルを含むディレクトリ
--ssl-cert X.509 証明書を含むファイル
--ssl-cipher 接続の暗号化に許可される暗号
--ssl-crl 証明書失効リストを含むファイル
--ssl-crlpath 証明書失効リストファイルを含むディレクトリ
--ssl-fips-mode クライアント側で FIPS モードを有効にするかどうか
--ssl-key X.509 キーを含むファイル
--ssl-mode サーバーへの接続に必要なセキュリティ状態
--tls-ciphersuites 暗号化された接続に許可される TLSv1.3 暗号スイート 8.0.16
--tls-version 暗号化された接続に許可される TLS プロトコル
--triggers ダンプされた各テーブルについて、トリガーをダンプする
--tz-utc SET TIME_ZONE='+00:00'をダンプファイルに追加
--user サーバーへの接続時に使用する MySQL ユーザー名
--users ユーザーアカウントのダンプ
--version バージョン情報を表示して終了
--watch-progress 進捗インジケータの表示
--zstd-compression-level zstd 圧縮を使用するサーバーへの接続の圧縮レベル 8.0.18

mysqlpump オプションの説明

mysqlpump オブジェクトの選択

mysqlpump には、複数のオブジェクトタイプのフィルタリングを可能にし、ダンプするオブジェクトを柔軟に制御できる包含および除外オプションのセットがあります:

包含または除外オプションは複数回指定できます。 効果は加法的です。 これらのオプションの順序は関係ありません。

各包含および除外オプションの値は、適切なオブジェクトタイプのカンマ区切りの名前のリストです。 例:

--exclude-databases=test,world
--include-tables=customer,invoice

オブジェクト名にはワイルドカード文字を使用できます:

たとえば、--include-tables=t%,__tmp は、t で始まるすべてのテーブル名と、tmp で終わるすべての 5 文字のテーブル名を照合します。

ユーザーの場合、ホスト部分なしで指定された名前は、% の暗黙的なホストで解釈されます。 たとえば、u1u1@% は同等です。 これは、MySQL で一般的に適用される同値化と同じです (セクション6.2.4「アカウント名の指定」 を参照)。

包含オプションと除外オプションは、次のように相互作用します:

複数のデータベースがダンプされている場合は、オブジェクト名をデータベース名で修飾することで、特定のデータベース内のテーブル、トリガー、およびルーチンに名前を付けることができます。 次のコマンドは、データベース db1 および db2 をダンプしますが、テーブル db1.t1 および db2.t2 は除外します:

shell> mysqlpump --include-databases=db1,db2 --exclude-tables=db1.t1,db2.t2

次のオプションは、ダンプするデータベースを指定する別の方法を提供します:

mysqlpump パラレル処理

mysqlpump では、並列性を使用して同時処理を実現できます。 データベース間の同時実行性 (複数のデータベースを同時にダンプする場合) およびデータベース内の同時実行性 (特定のデータベースから複数のオブジェクトを同時にダンプする場合) を選択できます。

デフォルトでは、mysqlpump は 2 つのスレッドで 1 つのキューを設定します。 追加のキューを作成し、デフォルトキューを含む各キューに割り当てられるスレッドの数を制御できます:

mysqlpump は、--parallel-schemas オプションで明示的に指定されていないデータベースを処理したり、コマンドオプションで選択された場合にユーザー定義をダンプしたりするために、デフォルトキューを使用します。

通常、複数のキューでは、mysqlpump はキューで処理されるデータベースのセット間で並列性を使用して、複数のデータベースを同時にダンプします。 複数のスレッドを使用するキューの場合、mysqlpump はデータベース内で並列性を使用して、特定のデータベースから複数のオブジェクトを同時にダンプします。 例外が発生する可能性があります。たとえば、mysqlpump は、データベース内のオブジェクトのサーバーリストからキューを取得している間、キューをブロックする場合があります。

並列性を有効にすると、異なるデータベースからの出力をインターリーブできます。 たとえば、並列でダンプされた複数のテーブルからの INSERT ステートメントはインターリーブできます。ステートメントは特定の順序で書き込まれません。 出力ステートメントはオブジェクト名をデータベース名で修飾するか、必要に応じて USE ステートメントを前に付けるため、再ロードには影響しません。

並列度の粒度は単一のデータベースオブジェクトです。 たとえば、単一のテーブルを複数のスレッドを使用してパラレルにダンプすることはできません。

例:

shell> mysqlpump --parallel-schemas=db1,db2 --parallel-schemas=db3

mysqlpump は、db1 および db2 を処理するキュー、db3 を処理する別のキュー、および他のすべてのデータベースを処理するデフォルトキューを設定します。 すべてのキューは 2 つのスレッドを使用します。

shell> mysqlpump --parallel-schemas=db1,db2 --parallel-schemas=db3
         --default-parallelism=4

これは前の例と同じですが、すべてのキューが 4 つのスレッドを使用する点が異なります。

shell> mysqlpump --parallel-schemas=5:db1,db2 --parallel-schemas=3:db3

db1 および db2 のキューは 5 つのスレッドを使用し、db3 のキューは 3 つのスレッドを使用し、デフォルトキューは 2 つのスレッドのデフォルトを使用します。

特殊なケースとして、--default-parallelism=0--parallel-schemas オプションを指定しない場合、mysqlpump はシングルスレッドプロセスとして実行され、キューは作成されません。

mysqlpump の制限事項

デフォルトでは、mysqlpumpperformance_schemandbinfo または sys スキーマをダンプしません。 これらのいずれかをダンプするには、コマンドラインで明示的に名前を付けます。 --databases または --include-databases オプションを使用して名前を付けることもできます。

mysqlpump は、INFORMATION_SCHEMA スキーマをダンプしません。

mysqlpump は、InnoDB CREATE TABLESPACE ステートメントをダンプしません。

mysqlpump は、CREATE USER および GRANT ステートメントを使用して、ユーザーアカウントを論理形式でダンプします (--include-users または --users オプションを使用する場合など)。 このため、mysql システムデータベースのダンプには、デフォルトでユーザー定義を含む付与テーブルは含まれません: user, db, tables_priv, columns_priv, procs_priv または proxies_priv。 付与テーブルをダンプするには、mysql データベースに名前を付け、その後にテーブル名を付けます:

shell> mysqlpump mysql user db ...