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

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

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

mysqldump クライアントユーティリティは logical backups を実行し、元のデータベースオブジェクト定義およびテーブルデータを再現するために実行できる一連の SQL ステートメントを生成します。 別の SQL サーバーにバックアップまたは転送するために、1 つ以上の MySQL データベースをダンプします。 mysqldump コマンドは、CSV、その他の区切り文字で区切られたテキスト、または XML 形式でも出力を生成できます。

ヒント

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

mysqldump には、ダンプされたテーブルに対する SELECT 以上の権限、ダンプされたビューに対する SHOW VIEW、ダンプされたトリガーに対する TRIGGER--single-transaction オプションが使用されていない場合 LOCK TABLES、および (MySQL 8.0.21 時点で)--no-tablespaces オプションが使用されなければ、PROCESS が必要です。 オプションの説明に示すように、一部のオプションではその他の権限が必要な場合があります。

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

mysqldump 出力には、データベースの照合順序を変更する ALTER DATABASE ステートメントを含めることができます。 これらは、ストアドプログラムをダンプする際に文字のエンコードを維持するために使用できます。 このようなステートメントを含むダンプファイルをリロードするには、影響されるデータベースに対する ALTER 権限が必要です。

注記

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

shell> mysqldump [options] > dump.sql

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

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

パフォーマンスおよびスケーラビリティーに関する考慮事項

mysqldump の利点には、リストアする前に出力を表示して編集もできるという便利さと柔軟性があります。 開発およびデータベース管理用にデータベースのクローンを作成したり、テスト用に既存のデータベースとわずかに異なるデータベースを作成したりできます。 大量のデータのバックアップのための、高速でスケーラブルなソリューションを意図したものではありません。 データサイズが大量の場合、バックアップのステップにかかる時間が妥当だとしても、SQL ステートメントの再現には、挿入やインデックスの作成などのディスク I/O が含まれるため、データのリストアに非常に長い時間がかかることがあります。

大規模なバックアップとリストアでは、データファイルを高速でリストアできる元の形式でコピーする、物理バックアップの方が適切です。

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

最近のバージョンの mysqldump を使用して、非常に古い MySQL サーバーにリロードされるダンプを生成する場合は、--opt オプションまたは --extended-insert オプションの代わりに --skip-opt オプションを使用します。

mysqldump の詳細は、セクション7.4「バックアップへの mysqldump の使用」を参照してください。

起動構文

次に示すように、一般に mysqldump を使用するには、1 つまたは複数のテーブルのセットのダンプ、1 つまたは複数の完全なデータベースのセット、または MySQL サーバー全体の 3 つの方法があります。

shell> mysqldump [options] db_name [tbl_name ...]
shell> mysqldump [options] --databases db_name ...
shell> mysqldump [options] --all-databases

データベース全体をダンプするには、db_name に続けてテーブルを指名しないか、または --databases オプションまたは --all-databases オプションを使用します。

使用しているバージョンの mysqldump がサポートするオプションのリストを表示するには、コマンド mysqldump --help を発行します。

オプション構文 - アルファベット順のサマリー

mysqldump は次のオプションをサポートします。これらはコマンド行またはオプションファイルの [mysqldump] グループおよび [client] グループで指定できます。 MySQL プログラムによって使用されるオプションファイルの詳細については、セクション4.2.2.2「オプションファイルの使用」を参照してください。

表 4.14 「mysqldump のオプション」

オプション名 説明 導入 非推奨
--add-drop-database DROP DATABASE ステートメントを各 CREATE DATABASE ステートメントの前に追加
--add-drop-table 各 CREATE TABLE ステートメントの前に DROP TABLE ステートメントを追加
--add-drop-trigger DROP TRIGGER ステートメントを各 CREATE TRIGGER ステートメントの前に追加
--add-locks LOCK TABLES と UNLOCK TABLES ステートメントで各テーブルダンプを囲む
--all-databases すべてのデータベース内のすべてのテーブルをダンプ
--allow-keywords キーワードであるカラム名の作成を許可
--apply-slave-statements CHANGE MASTER ステートメントの前に STOP SLAVE を含め、START SLAVE を出力の最後に含める
--bind-address 指定されたネットワークインタフェースを使用して MySQL サーバーに接続
--character-sets-dir 文字セットがインストールされているディレクトリ
--column-statistics ANALYZE TABLE ステートメントを記述して統計ヒストグラムを生成
--comments ダンプファイルへのコメントの追加
--compact よりコンパクトな出力を生成
--compatible 古い MySQL サーバーやほかのデータベースシステムとの互換性がより高い出力を生成
--complete-insert カラム名を含む完全な INSERT ステートメントを使用
--compress クライアントとサーバー間で送信される情報をすべて圧縮 8.0.18
--compression-algorithms サーバーへの接続に許可される圧縮アルゴリズム 8.0.18
--create-options すべての MySQL に固有なテーブルオプションを CREATE TABLE ステートメントに含める
--databases すべての名前引数をデータベース名として解釈
--debug デバッグログの書込み
--debug-check プログラムの終了時にデバッグ情報を出力
--debug-info プログラムの終了時に、デバッグ情報、メモリー、および CPU の統計を出力
--default-auth 使用する認証プラグイン
--default-character-set デフォルト文字セットを指定
--defaults-extra-file 通常のオプションファイルに加えて、名前付きオプションファイルを読み取ります
--defaults-file 指名されたオプションファイルのみを読み取る
--defaults-group-suffix オプショングループのサフィクス値
--delete-master-logs マスターレプリケーションサーバーで、ダンプ操作の実行後にバイナリログを削除
--disable-keys テーブルごとに、INSERT ステートメントを無効化してキーを有効化するステートメントで囲みます
--dump-date --comments が指定された場合、ダンプ日を "Dump completed on" コメントとして含める
--dump-slave スレーブのマスターのバイナリログ座標をリストする CHANGE MASTER ステートメントを含める
--enable-cleartext-plugin 平文の認証プラグインを有効化
--events ダンプされたデータベースからのイベントのダンプ
--extended-insert 複数行 INSERT 構文の使用
--fields-enclosed-by このオプションは --tab オプションとともに使用され、LOAD DATA の対応する句と同じ意味を持ちます
--fields-escaped-by このオプションは --tab オプションとともに使用され、LOAD DATA の対応する句と同じ意味を持ちます
--fields-optionally-enclosed-by このオプションは --tab オプションとともに使用され、LOAD DATA の対応する句と同じ意味を持ちます
--fields-terminated-by このオプションは --tab オプションとともに使用され、LOAD DATA の対応する句と同じ意味を持ちます
--flush-logs ダンプを開始する前に MySQL サーバーログファイルをフラッシュ
--flush-privileges mysql データベースのダンプ後に FLUSH PRIVILEGES ステートメントを発行
--force テーブルダンプの最中に SQL エラーが発生しても続行します
--get-server-public-key サーバーから RSA 公開キーをリクエスト
--help ヘルプメッセージを表示して終了
--hex-blob 16 進数表記法を使用したバイナリカラムのダンプ
--host MySQL サーバーがあるホスト
--ignore-error 指定されたエラーを無視
--ignore-table 指定されたテーブルをダンプしない
--include-master-host-port --dump-slave ともに生成された CHANGE MASTER ステートメントに MASTER_HOST/MASTER_PORT オプションを含める
--insert-ignore INSERT ステートメントではなく INSERT IGNORE を書き込みます
--lines-terminated-by このオプションは --tab オプションとともに使用され、LOAD DATA の対応する句と同じ意味を持ちます
--lock-all-tables データベース内のテーブルをすべてロック
--lock-tables テーブルをダンプする前にすべてロック
--log-error 指定されたファイルに警告およびエラーを追加
--login-path ログインパスオプションを .mylogin.cnf から読み取り
--master-data バイナリログファイルの名前と場所を出力に書き込む
--max-allowed-packet サーバーとの間で送受信するパケットの最大長
--net-buffer-length TCP/IP とソケット通信のバッファーサイズ
--network-timeout ネットワークタイムアウトを増やして、より大きなテーブルダンプを許可
--no-autocommit ダンプされたテーブルごとに、INSERT ステートメントを SET autocommit = 0 ステートメントと COMMIT ステートメントで囲む
--no-create-db CREATE DATABASE ステートメントを記述しないでください
--no-create-info 各ダンプされたテーブルを再作成する CREATE TABLE ステートメントを書き出さない
--no-data テーブルの内容をダンプしない
--no-defaults オプションファイルを読み取らない
--no-set-names --skip-set-charset と同じ
--no-tablespaces CREATE LOGFILE GROUP ステートメントおよび CREATE TABLESPACE ステートメントを出力に書き出さない
--opt --add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset の短縮形
--order-by-primary 各テーブルの行を、主キーまたは最初の一意のインデックスでソートしてダンプ
--password サーバーに接続する際に使用するパスワード
--pipe 名前付きパイプを使用してサーバに接続する (Windows のみ)
--plugin-dir プラグインがインストールされているディレクトリ
--port 接続用の TCP/IP ポート番号
--print-defaults デフォルトオプションの印刷
--protocol 使用するトランスポートプロトコル
--quick サーバーからのテーブルについて、一度に 1 行ずつ取得
--quote-names 識別子を逆引用符文字で囲む
--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 を出力に追加するかどうか
--shared-memory-base-name 共有メモリー接続用の共有メモリー名 (Windows のみ)
--show-create-skip-secondary-engine CREATE TABLE ステートメントから SECONDARY ENGINE 句を除外 8.0.18
--single-transaction サーバーからデータをダンプする前に BEGIN SQL ステートメントを発行してください
--skip-add-drop-table DROP TABLE ステートメントを CREATE TABLE ステートメントの前に追加しない
--skip-add-locks ロックを追加しない
--skip-comments ダンプファイルにコメントを追加しない
--skip-compact よりコンパクトな出力を生成しない
--skip-disable-keys キーを無効にしない
--skip-extended-insert extended-insert をオフにする
--skip-opt --opt で設定されたオプションをオフにします
--skip-quick サーバーからのテーブルについて、一度に 1 行ずつ取得しない
--skip-quote-names 識別子を引用符で囲まない
--skip-set-charset SET NAMES ステートメントを記述しないでください
--skip-triggers トリガーをダンプしない
--skip-tz-utc tz-utc をオフにする
--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 サーバーへの接続に必要なセキュリティ状態
--tab タブ区切りのデータファイルを生成
--tables --databases または -B オプションのオーバーライド
--tls-ciphersuites 暗号化された接続に許可される TLSv1.3 暗号スイート 8.0.16
--tls-version 暗号化された接続に許可される TLS プロトコル
--triggers ダンプされた各テーブルについて、トリガーをダンプする
--tz-utc SET TIME_ZONE='+00:00'をダンプファイルに追加
--user サーバーへの接続時に使用する MySQL ユーザー名
--verbose 冗長モード
--version バージョン情報を表示して終了
--where 指定された WHERE 条件で選択された行のみダンプ
--xml XML 出力を生成
--zstd-compression-level zstd 圧縮を使用するサーバーへの接続の圧縮レベル 8.0.18

接続オプション

mysqldump コマンドは MySQL サーバーにログインして情報を抽出します。 次のオプションは、同じマシンまたはリモートシステム上の MySQL サーバーに接続する方法を指定します。

オプションファイルオプション

これらのオプションは、どのオプションファイルを読み取るかを制御するために使用されます。

DDL オプション

mysqldump の使用シナリオには、新しい MySQL インスタンス全体 (データベーステーブルを含む) のセットアップ、および既存のインスタンス内部のデータを既存のデータベースおよびテーブルで置換することが含まれます。 次のオプションを使用すると、ダンプファイル内にさまざまな DDL ステートメントをエンコードすることによって、ダンプをリストアする際に何を削除し何をセットアップするのかを指定できます。

デバッグオプション

次のオプションは、デバッグ情報を出力したり、ダンプファイルにデバッグ情報をエンコードしたり、または潜在的な問題にかかわらずダンプ操作を続行させたりします。

ヘルプオプション

次のオプションは、mysqldump コマンド自身に関する情報を表示します。

国際化オプション

次のオプションは、mysqldump コマンドが各国語の設定で文字データを表現する方法を変更します。

レプリケーションオプション

mysqldump コマンドは、レプリケーション構成のレプリカサーバーに空のインスタンスまたはデータを含むインスタンスを作成するために頻繁に使用されます。 次のオプションは、レプリケーションソースサーバーおよびレプリカ上のデータのダンプと復元に適用されます。

形式オプション

次のオプションは、ダンプファイル全体またはダンプファイル内のある種のデータの提示方法を指定します。 また、ある種のオプションの情報をダンプファイルに書き込むかどうかも制御します。

フィルタリングオプション

次のオプションは、どのような種類のスキーマオブジェクトがダンプファイルに書き出されるかを、トリガーまたはイベントなどのカテゴリによって制御したり、たとえばダンプするデータベースおよびテーブルを選択して名前によって制御したり、または WHERE 句を使用してテーブルデータから行をフィルタリングして制御したりできます。

パフォーマンスオプション

次のオプションは、特にリストア操作のパフォーマンスにもっとも重要です。 大規模なデータセットでは、リストア操作 (ダンプファイル内の INSERT ステートメントの処理) がもっとも時間のかかる部分です。 データを迅速にリストアすることが緊急である場合、事前にステージを計画してパフォーマンスをテストします。 時間単位で測定されたリストア時間の場合は、InnoDB のみおよび混合使用のデータベース用の MySQL Enterprise Backup など、代替のバックアップおよびリストアソリューションを使用することをお薦めします。

パフォーマンスは、主にダンプ操作に関して、トランザクションオプションにも影響されます。

トランザクションオプション

次のオプションは、エクスポートされるデータの信頼性と一貫性のために、ダンプ操作のパフォーマンスを犠牲にします。

オプショングループ

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

データベース全体のバックアップを作成するには:

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 サーバーから別のサーバーにデータをコピーすることでデータベースを移入するのに非常に便利です。

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 --master-data --single-transaction > all_databases.sql

このバックアップでは、ダンプの最初で (FLUSH TABLES WITH READ LOCK を使用して) すべてのテーブルに対するグローバル読み取りロックが取得されます。 このロックが取得されるとすぐに、バイナリログの座標が読み取られ、ロックが解除されます。 FLUSH ステートメントが発行されたときに長い更新ステートメントが実行中の場合、MySQL サーバーはそれらのステートメントが終わるまで停止する可能性があります。 そのあと、ダンプはロックがなくなり、テーブルの読み取りと書き込みを妨げることはなくなります。 MySQL サーバーが受信する更新ステートメントが (実行時間の点で) 短い場合、更新の数が多くても最初のロック時間はさほど気にならないはずです。

ポイントインタイムリカバリ (または ロールフォワード、これは古いバックアップをリストアし、そのバックアップ後に発生した変更を再現する必要がある場合) は、バイナリログを交替させる (セクション5.4.4「バイナリログ」を参照してください) か、または少なくともダンプが対応しているバイナリログ座標を知っていると便利な場合があります。

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 ストレージエンジンを使用して保存されている場合に、ポイントインタイムリカバリの前に使用するのに適したオンラインバックアップを作成する便利な方法を提供します。

バックアップ作成の詳細は、セクション7.2「データベースバックアップ方法」セクション7.3「バックアップおよびリカバリ戦略の例」を参照してください。

制約

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

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

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

mysqldump は NDB Cluster ndbinfo 情報データベースをダンプしません。

mysqldump には、mysql データベースのダンプ用に general_log テーブルおよび slow_query_log テーブルを再作成するステートメントが含まれています。 ログテーブルの内容はダンプされません。

権限が不十分なためビューのバックアップに問題が生じる場合は、セクション25.9「ビューの制約」の回避策を参照してください。