mysqlpumpについて聞いたばかりです。MySQL5.7でリリースされたようですが、MySQL 5.7にはmysqldumpがまだ含まれています。どちらもバックアッププログラムですが、主な違いを誰かが要約できますか?それらの1つがより適切に機能するシナリオはありますか?mysqldumpはmysqlpumpで段階的に廃止されますか?
mysqlpumpについて聞いたばかりです。MySQL5.7でリリースされたようですが、MySQL 5.7にはmysqldumpがまだ含まれています。どちらもバックアッププログラムですが、主な違いを誰かが要約できますか?それらの1つがより適切に機能するシナリオはありますか?mysqldumpはmysqlpumpで段階的に廃止されますか?
回答:
私がたまたまこれを研究しているので、ここで私が見つけたものの要約を示します。
MySQL開発チームによる2015年のブログ投稿によると、 mysqlpumpの主な利点は、複数のスレッドを並行して使用してダンプを高速化でき、mysqldumpの後方互換性要件を共有しないことです。改善。
ただし、この投稿では、個々のスレッドがデータベースのさまざまな状態からダンプのセクションを生成する可能性があるため、mysqlpumpは「現在、汎用バックアップの代替として安全ではない」と警告しています。mysqldumpを廃止する計画については言及していません。
Giuseppe Maxiaは2015年にmysqlpumpをいじくり回し、ダンプのスピードアップがかなり小さいことを発見しました。彼は、ダンプするオブジェクトを正確に選択する新しい機能を高く評価しましたが、ダンプのロードはシングルスレッドでしか行えず、(mysqldumpとは異なり)ダンプは同じ名前のデータベースにしかロードできないことに注意しました。
また、これら2つのユーティリティの違いを調べてきましたが、@ Neilの回答に記載されていることに加えて、mysqlpumpにはmysqldumpよりも少ないオプションがあり、次のようなことは許可されていません。
--compatible=--tab、およびそれに関連するオプション:
--fields-terminated-by=--fields-enclosed-by=--fields-optionally-enclosed-by=--fields-escaped-by=--lines-terminated-by=--quote-names--add-drop-trigger--allow-keywords--apply-slave-statements--comments--compact--compatible--create-options--delete-master-logs--disable-keys--dump-date--dump-slave--enable-cleartext-plugin--flush-logs--flush-privileges--force--ignore-error--include-master-host-port--lock-all-tables--lock-tables--master-data--no-autocommit--no-tablespaces--opt--order-by-primary--pipe--quick--quote-names--set-gtid-purged--shared-memory-base-name--skip-add-drop-table--skip-add-locks--skip-comments--skip-compact--skip-disable-keys--skip-extended-insert--skip-opt--skip-quick--skip-quote-names--skip-triggers--skip-tz-utc--verbose--where--xml一方、mysqlpumpには、mysqldumpでは使用できない次のオプションがあります
--compress-output--default-parallelism--defer-table-indexes--exclude-databases=--exclude-events=--exclude-routines=--exclude-triggers=--exclude-users=--include-events=--include-routines=--include-triggers=--include-users=--parallel-schemas=--skip-definer--users--watch-progress名前の変更または類似:
--no-dataでダンプ == --skip-dump-rowsでポンプ--no-set-namesでダンプに存在しないポンプが、その同義語は- --skip-set-charset-の両方に存在します--ignore-table=でダンプほとんどである--exclude-tables=にポンプを除いて--exclude-tables、カンマで区切られたすべてのテーブルを指定することができ、およびワイルドカード文字を可能にし(%と_)--tablesでダンプほとんどである--include-tables=にポンプを除いて--include-tables、カンマで区切られたすべてのテーブルを指定することができ、およびワイルドカード文字(することが可能%と_)。また、dumpでは--tablesオーバーライド--databasesしますが、pumpではオーバーライドしません。--include-tables=--databasesダンプとポンプの両方は、カンマで区切られたすべてのデータベースを指定でき、ワイルドカード文字(および)を許可することを除き--include-databases=、ほとんどがポンプ--include-databasesにあります。%_両方のバックアップツール間で理解したことの概要を以下に示します。
マニュアルページに記載されているmysqldumpの定義
mysqldumpクライアントユーティリティは論理バックアップを実行し、元のデータベースオブジェクト定義とテーブルデータを再現するために実行できる一連のSQLステートメントを生成します。バックアップまたは別のSQLサーバーへの転送のために1つ以上のMySQLデータベースをダンプします。mysqldumpコマンドは、CSV、その他の区切りテキスト、またはXML形式で出力を生成することもできます。
Mysqldumpは非常に使いやすく、構文も非常に簡単です。これを実行すると、すべての行がSQLクエリに変換され、標準出力に出力されます。この出力をoutfile(>)にリダイレクトするか、オプションのresult-fileを使用してリダイレクトできます。
デフォルトでは、mysqldumpはinformation_schemaテーブルをダンプせず、performance_schemaを使用しません。mysqldumpの主な欠点は、バックアップと復元中に1つのスレッドしか使用しないことです。
mysqlpumpはMySQL 5.7で導入されたもう1つのユーティリティで、mysqldumpと比べていくつかの機能が追加されています。
マニュアルページに記載されているmysqlpumpの定義
mysqlpumpクライアントユーティリティは論理バックアップを実行し、元のデータベースオブジェクト定義とテーブルデータを再現するために実行できるSQLステートメントのセットを生成します。バックアップまたは別のSQLサーバーへの転送のために1つ以上のMySQLデータベースをダンプします。
主な機能は
バックアップを高速化する並列処理(マルチスレッド)
進捗インジケータ
ユーザーアカウントのダンプ(MySQLシステムデータベースの挿入としてではなく、作成、許可ステートメント)
デフォルトでは、mysqlpumpは、明示的に言及されていない限り、情報スキーマ、パフォーマンススキーマ、一部のMySQLシステムテーブルなどのシステムデータベースのバックアップを取りません。
また、オプション-include-database、-exclude-database、-include-table、-exclude-table with pattern matching(%)もあります。
これらのオプションは、データセット全体から少数のオブジェクトのみをバックアップしたいユーザーにとってより便利です。
一般的に、mysqlpumpはその作業をチャンクに分割し、それぞれがマルチスレッドキューに割り当てられます。
このマルチスレッドキューはNスレッドによって処理されます(デフォルトでは2スレッドを使用します)。
このオプション-default-parallelismおよび-parallel-schemasを使用して、多数のスレッドを定義できます。
復元中、mysqldumpと同じ単一のスレッドを使用しますが、並列復元がありません。
アドオンとして、バックアップと復元(mysqlpumpとmysqldumpがない)の両方で並列化を実行するもう1つのツールがあります。これはmydumperとmyloaderです。これは、巨大なデータセットを復元する際に非常に使用されます。
このブログmysqldump vs mysqlpump vs mydumperでこれらのツールの詳細とその便利なオプションを見つけることができます 。