web-dev-qa-db-ja.com

mysqldumpとmysqlpump

mysqlpump について聞いたところ、MySQL 5.7でリリースされたようですが、MySQL 5.7には mysqldump がまだ含まれています。どちらもバックアッププログラムですが、主な違いを要約できますか?それらの1つがよりうまく機能する可能性のあるシナリオはありますか? mysqldumpはmysqlpumpで段階的に廃止されますか?

21
Ryan Foley

たまたま自分で調べていたので、ここに私が見つけたものの要約があります。

MySQL開発チームの2015年のブログ投稿 によると、mysqlpumpの主な利点は、複数のスレッドを並行して使用してダンプを高速化できることと、mysqldumpの後方互換性要件を共有しないことです。これはさらなる改善の扉を開くはずです。

ただし、個々のスレッドがデータベースの異なる状態からダンプのセクションを生成する可能性があるため、mysqlpumpは「現在、汎用バックアップの代替として安全ではない」と警告しています。 mysqldumpを廃止する計画については触れられていません。

Giuseppe Maxia 2015年にmysqlpumpで遊んだ で、ダンプのスピードアップはかなり小さいことがわかりました。彼は、ダンプするオブジェクトを正確に選択する新しい機能を高く評価しましたが、ダンプのロードはシングルスレッドでしか実行できず、(mysqldumpとは異なり)ダンプは同じ名前のデータベースにしかロードできないことに注意してください。

19
Neil P. Quinn

私はこれら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 indump== --skip-dump-rows inpump
  • dump--no-set-namespumpには存在しませんが、その同義語---skip-set-charset-は存在します両者に
  • --ignore-table= indumpは、ほとんどが--exclude-tables= inpumpですが、--exclude-tablesはすべてのテーブルを指定できます、カンマで区切られ、ワイルドカード文字(%および_)を使用できます
  • --tables indumpは、ほとんどが--include-tables= inpumpですが、--include-tablesはすべてのテーブルを指定できます、カンマで区切られ、ワイルドカード文字(%および_)を使用できます。また、--tablesdump--databasesをオーバーライドしますが、--include-tables= inpumpはオーバーライドしません。
  • dumppumpの両方の--databasesは、ほとんどが--include-databases= inpumpです--include-databasesを除いて、すべてのデータベースをコンマで区切って指定でき、ワイルドカード文字(%および_)を使用できます。
12
Solomon Rutzky

以下は、両方のバックアップツール間で理解したことの概要です。

マニュアルページにある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システムデータベースの挿入としてではなく、create、grantステートメント)

デフォルトでは、mysqlpumpは、明示的に言及されていない限り、情報スキーマ、パフォーマンススキーマ、一部のMySQLシステムテーブルなどのシステムデータベースのバックアップを作成しません。

また、オプション–include-database、–exclude-database、–include-table、–exclude-table、およびパターンマッチング(%)があります。

これらのオプションは、データセット全体から少数のオブジェクトのみをバックアップしたいユーザーにとってより便利です。

一般に、mysqlpumpは作業をチャンクに分割し、それぞれをマルチスレッドキューに割り当てます。

  • このマルチスレッドキューはNスレッドで処理されます(デフォルトでは2スレッドを使用します)。

  • このオプション–default-parallelismおよび–parallel-schemasを使用して、多数のスレッドを定義できます。

  • 復元中は、mysqldumpと同じ単一のスレッドを使用しますが、並列復元はありません。

アドオンとして、バックアップと復元(mysqlpumpとmysqldumpがない場合)の両方で並列化を実行するもう1つのツールがあり、これはmydumperとmyloaderと呼ばれます。 。これは、巨大なデータセットを復元するときに非常に使用されます。

このブログ mysqldump vs mysqlpump vs mydumper で、これらのツールのいくつかの詳細とその便利なオプションを見つけることができます。