MySQL公式エクスポートツールmysqlpumpの使用

MySQL公式エクスポートツールmysqlpumpの使用

導入

mysqlpump は mysqldump の派生です。mydumper の考え方を参考にし、並列データエクスポートをサポートしています。そのため、データのエクスポート効率は mysqldump よりもはるかに高くなります。

説明書

mysqlpump のパラメータのほとんどは mysqldump と同じであり、全体的な使用法も mysqldump とそれほど変わりません。以下は、mysqlpump でより重要かつよく使用されるパラメータの一部です。

パラメータ

例示する

--default-parallelism=#

単一トランザクションと競合する並列エクスポートの同時実行を設定する

--単一トランザクション

すべてのテーブルをエクスポートするための単一のトランザクションを作成する

--exclude-databases=名前

エクスポート時に特定のライブラリを除外します。複数のライブラリはコンマで区切られます。

--exclude-tables=名前

エクスポート時に特定のテーブルを除外します。複数のテーブルはカンマで区切られます。

--include-databases=名前

エクスポート時に特定のライブラリを含めます。複数のライブラリはカンマで区切られます。

--include-tables=名前

エクスポート時に特定のテーブルを含めます。複数のテーブルはカンマで区切られます。

実際の経験

ここでは、mysqlpump の簡単なトライアルを実行し、ターゲット インスタンスとして MySQL 5.7 を選択し、パラメータで single-transaction と default-parallelism の両方を使用して、この競合の影響を確認します。

mysqlpump 側の出力は次の情報を参照します。

root@VM-64-10-debian:~# mysqlpump -h172.100.10.10 -uroot -p --single-transaction --default-parallelism=16 --set-gtid-purged=OFF -B sbtest > sbtest.sql
ダンプの進行状況: 0/1 テーブル、250/987400 行
ダンプの進行状況: 0/5 テーブル、117250/3946600 行
ダンプの進行状況: 1/5 テーブル、258750/3946600 行
ダンプの進行状況: 1/5 テーブル、385500/3946600 行
ダンプの進行状況: 1/5 テーブル、516750/3946600 行
ダンプの進行状況: 1/5 テーブル、639250/3946600 行
ダンプの進行状況: 1/5 テーブル、757000/3946600 行
ダンプの進行状況: 1/5 テーブル、885000/3946600 行
ダンプの進行状況: 1/5 テーブル、1005750/3946600 行
ダンプの進行状況: 1/5 テーブル、1114250/3946600 行
ダンプの進行状況: 1/5 テーブル、1223250/3946600 行
ダンプの進行状況: 2/5 テーブル、1312500/3946600 行
ダンプの進行状況: 2/5 テーブル、1430750/3946600 行
ダンプの進行状況: 2/5 テーブル、1553000/3946600 行
ダンプの進行状況: 2/5 テーブル、1680250/3946600 行
ダンプの進行状況: 2/5 テーブル、1809500/3946600 行
ダンプの進行状況: 2/5 テーブル、1940750/3946600 行
ダンプの進行状況: 2/5 テーブル、2060000/3946600 行
ダンプの進行状況: 2/5 テーブル、2175250/3946600 行
ダンプの進行状況: 2/5 テーブル、2295250/3946600 行
ダンプの進行状況: 3/5 テーブル、2413500/3946600 行
ダンプの進行状況: 3/5 テーブル、2554500/3946600 行
ダンプの進行状況: 3/5 テーブル、2693500/3946600 行
ダンプの進行状況: 3/5 テーブル、2818750/3946600 行
ダンプの進行状況: 3/5 テーブル、2941500/3946600 行
ダンプの進行状況: 4/5 テーブル、3056000/3946600 行
ダンプの進行状況: 4/5 テーブル、3172750/3946600 行
ダンプの進行状況: 4/5 テーブル、3280000/3946600 行
ダンプの進行状況: 4/5 テーブル、3372000/3946600 行
ダンプの進行状況: 4/5 テーブル、3444750/3946600 行
ダンプは126555ミリ秒で完了しました

これら 2 つのパラメータを同時に有効にすると、mysqlpump は実際にはテーブルを 1 つずつエクスポートしていることがわかります。単一トランザクションの優先度は、デフォルトの並列処理の優先度よりも高くなります。

単一トランザクションを削除して再度テストすると、興味深い現象が見つかります。MySQL プロセスリストを観察すると、次の結果が得られます。

mysql> プロセスリストを表示します。
+---------+------+--------------------+------+-------+------+----------------------------------------------------+
| ID | ユーザー | ホスト | db | コマンド | 時間 | 状態 | 情報 |
+---------+------+--------------------+------+-------+------+----------------------------------------------------+
| 2763496 | ルート | 172.100.10.10:49086 | NULL | クエリ | 0 | 開始 | プロセスリストを表示 |
| 2763585 | ルート | 172.100.10.10:49192 | NULL | スリープ | 126 | | NULL |
| 2763586 | ルート | 172.100.10.10:49194 | NULL | スリープ | 126 | | NULL |
| 2763587 | ルート |172.100.10.10:49196 | NULL | スリープ | 126 | | NULL |
| 2763588 | ルート | 172.100.10.10:49198 | NULL | スリープ | 126 | | NULL |
| 2763589 | ルート | 172.100.10.10:49200 | NULL | スリープ | 126 | | NULL |
| 2763590 | ルート | 172.100.10.10:49202 | NULL | スリープ | 126 | | NULL |
| 2763591 | ルート | 172.100.10.10:49204 | NULL | スリープ | 126 | | NULL |
| 2763592 | ルート | 172.100.10.10:49206 | NULL | スリープ | 126 | | NULL |
| 2763593 | ルート | 172.100.10.10:49208 | NULL | スリープ | 126 | | NULL |
| 2763594 | ルート | 172.100.10.10:49210 | NULL | スリープ | 126 | | NULL |
| 2763595 | root | 172.100.10.10:49212 | NULL | クエリ | 125 | クライアントに送信中 | SELECT `id`,`k`,`c`,`pad` FROM `sbtest`.`sbtest5` |
| 2763596 | root | 172.100.10.10:49214 | NULL | クエリ | 125 | クライアントに送信中 | SELECT `id`,`k`,`c`,`pad` FROM `sbtest`.`sbtest4` |
| 2763597 | root | 172.100.10.10:49216 | NULL | クエリ | 125 | クライアントに送信中 | SELECT `id`,`k`,`c`,`pad` FROM `sbtest`.`sbtest3` |
| 2763598 | root | 172.100.10.10:49218 | NULL | クエリ | 125 | クライアントに送信中 | SELECT `id`,`k`,`c`,`pad` FROM `sbtest`.`sbtest2` |
| 2763599 | root | 172.100.10.10:49220 | NULL | クエリ | 125 | クライアントに送信中 | SELECT `id`,`k`,`c`,`pad` FROM `sbtest`.`sbtest1` |
| 2763600 | ルート | 172.100.10.10:49222 | NULL | スリープ | 125 | | NULL |
| 2763601 | ルート | 172.100.10.10:49224 | NULL | スリープ | 125 | | NULL |
+---------+------+--------------------+------+-------+------+----------------------------------------------------+
セット内の行数は 18 です (0.00 秒)

マイSQL>

mysqlpump の「並列エクスポート」は、実際にはテーブル レベルの並列エクスポートのみに基づいていることがはっきりとわかります。 大きなテーブルが 1 つある場合、エクスポート時間は深刻な影響を受け、ショート ボード効果が発生します。

追加の質問: デフォルトの並列処理と単一トランザクションが競合する場合、並列エクスポート中にデータの一貫性を確認できなくなりますか?

練習すれば完璧になります。general_log を開いて、エクスポート操作を見てみましょう。

2021-05-12T11:54:09.033215Z 75 SSL/TLSを使用して[email protected]に接続
2021-05-12T11:54:09.075347Z 75 クエリ FLUSH TABLES WITH READ LOCK //テーブルのロックを開始 2021-05-12T11:54:09.103132Z 75 クエリ SHOW WARNINGS
2021-05-12T11:54:09.106382Z 75 クエリ SET セッション トランザクション分離レベル 繰り返し読み取り
2021-05-12T11:54:09.106553Z 75 クエリ 警告を表示
2021-05-12T11:54:09.106640Z 75 クエリ一貫性のあるスナップショットでトランザクションを開始
2021-05-12T11:54:09.108115Z 75 クエリ 警告を表示
2021-05-12T11:54:09.127277Z 76 SSL/TLSを使用して[email protected]に接続
2021-05-12T11:54:09.127452Z 76 クエリ SET セッション トランザクション分離レベル 繰り返し読み取り
2021-05-12T11:54:09.127590Z 76 クエリ 警告を表示
2021-05-12T11:54:09.127680Z 76 クエリ一貫性のあるスナップショットでトランザクションを開始
2021-05-12T11:54:09.127790Z 76 クエリ 警告を表示
......
2021-05-12T11:54:10.018813Z 90 SSL/TLSを使用して[email protected]に接続
2021-05-12T11:54:10.018944Z 90 クエリ SET セッション トランザクション分離レベル 繰り返し読み取り
2021-05-12T11:54:10.019047Z 90 クエリ 警告を表示
2021-05-12T11:54:10.019150Z 90 クエリ一貫性のあるスナップショットでトランザクションを開始
2021-05-12T11:54:10.019226Z 90 クエリ 警告を表示
2021-05-12T11:54:10.025833Z 91 SSL/TLSを使用して[email protected]に接続
2021-05-12T11:54:10.025934Z 91 クエリ SET セッション トランザクション分離レベル 繰り返し読み取り
2021-05-12T11:54:10.026048Z 91 クエリ 警告を表示
2021-05-12T11:54:10.026141Z 91 クエリ一貫性のあるスナップショットでトランザクションを開始
2021-05-12T11:54:10.026219Z 91 クエリ 警告を表示
2021-05-12T11:54:10.026293Z 75 クエリ UNLOCK TABLES //テーブルのロック終了 2021-05-12T11:54:10.026406Z 75 クエリ SHOW WARNINGS

並列エクスポートの前に、1 つのスレッドがグローバル読み取りロックを追加し、すべての同時スレッドがトランザクションを開いた後にのみテーブルをロック解除することがわかります。そのため、並列エクスポート中はデータの一貫性が保たれます。

長所と短所

  • アドバンテージ:
    • データベースとその中のオブジェクトを並行してバックアップします。これは、mysqldump よりも効率的です。
    • データベースとデータベース オブジェクト (テーブル、ストアド プロシージャ、ユーザー アカウント) のバックアップをより適切に制御します。
    • バックアップの進行状況を視覚化します。
  • 欠点:
    • テーブル レベルでのみ並列化できます。テーブルに特に大量のデータがある場合、非常に深刻なショート ボード効果が発生します。
    • エクスポートされたデータはファイルに保存され、インポートは依然としてシングルスレッドであるため、効率は低くなります。
    • 現在のバックアップに対応するバイナリログの位置を取得できません。

総括する

mysqlpump にはまだ多くの欠点がありますが、元の mysqldump と比較すると大きな進歩を遂げています。このツールのリリースは、Oracle がようやく MySQL のエコロジカル ツールに注目し始めたことを示しています。公式がより多くの、より優れたエコロジカル ツールを提供することを期待しています。

上記はMySQL公式エクスポートツールmysqlpumpの使用に関する詳細内容です。mysqlpumpの使用に関する詳細については、123WORDPRESS.COMの他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • 知らないかもしれないmysqldumpパラメータ
  • MySQL5.7 mysqldump バックアップとリカバリの実装
  • Linuxでmysqlの定期的なコールドバックアップを実装するためにmysqldump+expect+crontabを使用するアイデアの詳細な説明
  • mysqldump を使用した MySql のインポートおよびエクスポート方法の概要
  • MySQL mysqldump の使い方の詳しい説明
  • 完全バックアップとポイントインタイムバックアップにmysqldumpを使用する方法
  • Dockerはmysqldumpコマンドを使用してプロジェクト内のmysqlデータをバックアップおよびエクスポートします。
  • MySQLdump コマンドを使用した MySQL データの移行
  • PHP スケジュールバックアップ MySQL および mysqldump 構文パラメータの詳細
  • mysql バックアップ スクリプト mysqldump の使い方の詳細な説明
  • Linux mysqldump によるデータベース、データ、テーブル構造のエクスポートの詳細な説明
  • mysqldumpデータエクスポートの問題に関する詳細な議論

<<:  VMware ESXi CLI の一般的なコマンドを調べる

>>:  Reactプロジェクトで要素を使用する方法

推薦する

uniapp WeChatミニプログラムのグローバル共有を実装するためのサンプルコード

目次グローバル共有コンテンツファイルを作成するファイルをインポートしてグローバルに登録するページ共有...

Vue.jsはアイコンをクリックしてズームインし、

前回の記事では、Vue で画像の切り抜きや拡大・縮小、回転を実現する方法を紹介しました。今回は、アイ...

MySQL メモリテーブルと一時テーブルの使用方法の詳細な説明

MySQL メモリ テーブルと一時テーブルの使用メモリテーブル: セッション 1 $ mysql -...

Firefox で Flash を再生するためのオブジェクトとパラメータの書き方

コードをコピーコードは次のとおりです。 <object classid="clsid...

mysqldump を使用した MySql のインポートおよびエクスポート方法の概要

データベースデータをエクスポートします:まずcmdを開いてMySQLのbinフォルダに入ります1. ...

Dockerイメージ送信コマンドcommitの動作原理と使い方の詳細な説明

ローカルでコンテナを作成した後、このコンテナに基づいてローカル イメージを作成し、このイメージを D...

LinuxでのMySQLのインストール手順

1. mysql tar ファイルをダウンロードします。参考: 2. インストールパッケージがあるデ...

9999px に別れを告げる新しい CSS 画像置換テクニック (背景表示と画面外へのテキストの移動)

-9999 ピクセルの画像置換技術は、ここ 10 年近く人気があります。テキスト要素を画像に置き換え...

MySQLシリーズ マルチテーブル結合クエリ92および99構文例詳細チュートリアル

目次1. デカルト積現象2. 接続クエリの知識ポイントのまとめ1) 結合クエリとは何ですか? 2) ...

Dockerプライベートライブラリの実装

プライベート Docker レジストリのインストールとデプロイは、Docker テクノロジーを導入、...

初心者向け入門チュートリアル: ドメイン名の解決とバインディング

では、ドメイン名を登録して仮想ホストを購入した後、IE でドメイン名を入力して Web サイトを開く...

Linux で SSH サーバー エイリアスを作成する 2 つの方法

序文SSH 経由でさまざまなリモート システムに頻繁にアクセスする場合は、このトリックを使用すると時...

泡の小さな鋭角効果を実現するCSS

効果画像(境界線の色が薄すぎるので、{} で囲みます): { }参考リンク Pure CSS バブル...

Linux で ss コマンドと zabbix を組み合わせてソケットを監視する方法の詳細な説明

目次序文1. ssコマンド2. Zabbix監視マシンの全体的なソケットステータス2.1. スクリプ...

MySQLテーブルをコピーする方法

目次1.mysqlダンプ実行プロセス:特徴2. CSVファイルをエクスポートする(最も柔軟性が高い)...