mysqlpump ユーティリティは MySQL 5.7 で導入され、以前のバージョンで利用可能な従来の mysqldump ユーティリティよりも高速な代替手段です。mysqlpump ユーティリティは mysqldump と同様の機能を備えていますが、並列処理を活用して大規模なデータベースのバックアップを取得できる点が特徴です。この並列処理は、従来の mysqldump にはない機能です。データベース全体のバックアップを取ることも、一部のオブジェクトのみをバックアップすることもできます。
mysqlpump とは
MySQL 5.7 で導入された mysqlpump は、元のデータベース・オブジェクトをリストアするために実行可能な SQL ステートメントのセットを生成する論理バックアップを実行するクライアント・ユーティリティです。mysqldump では、並列処理とマルチスレッドのサポートにより、低速バックアップの問題を解決します。データベースによってはテラバイトのデータが含まれているため、データを単純なテキスト・ファイルにエクスポートするには時間がかかりすぎる場合があります。mysqlpump ユーティリティは、複数のスレッドを並行して使用し、データをテキスト・ファイルに転送します。数年前に導入された MySQL データベース開発者は、近年、より安定した mysqlpump ユーティリティを提供し、より多くのオプションを提供するために改善されています。mysqlpump ユーティリティには、mysqldump で利用できるオプションが全てないため、管理者が MySQL データベースとそのデータの高速エクスポートを必要とする場合にのみ使用されます。
mysqlpump のインストール方法
MySQL 5.7 以降をお持ちの場合は、mysqlpump に既にアクセスできます。ユーティリティには MySQL データベース・エンジンが付属しているため、インストールは不要です。MySQL の以前のバージョンをお持ちの場合は、mysqlpump を使用することはできませんが、mysqldump は実行可能な代替手段です。
Windows でも Linux でも、MySQL データベース・エンジンでは mysqlpump MySQL ユーティリティを利用できます。Windows または Linux でコマンド・ライン・ユーティリティを開き、多数のパラメータ・オプションで "mysqlpump" と入力することで、ユーティリティによるデータのエクスポート方法をカスタマイズできます。
mysqlpump の基本的な用途と例
MySQL をサーバーにインストールすると、コマンドラインから mysqlpump にアクセスできます。Windows または Linux でコマンドラインを開くと、次のコマンドを使用してデータベーススキーマをエクスポートできます。
mysqlpump --all-databases --user=root --password > full_backup.sql
上記のコマンドは、全てのデータベーススキーマをファイル full_backup.sql にエクスポートします。ユーザー名とパスワードは、エクスポートするデータベースにアクセスできる必要があります。mysqlpump ユーティリティを使用する際は、必ず高権限アカウントが必要です。
MySQL で既に認証されている場合は、ユーザー名とパスワードを指定せずにデータベーススキーマをダンプすることもできます。
mysqlpump --all-databases > full_backup.sql
単一のデータベースをダンプする場合は、次のコマンドを使用します。
mysqlpump myDB
上記のコマンドは、myDB のデータベーススキーマとそのデータをエクスポートします。各データベース名をスペースで区切ることで、複数のデータベースをエクスポートできます。
管理者は、データベース内の特定のテーブルのみをエクスポートする場合があります。mysqlpump を使用したテーブルデータのダンピングは、次のコマンドを使用して実行できます。
mysqlpump myDB Customer Order
上記の例では、mysqlpump ステートメントは、myDB データベースから顧客テーブルと注文テーブルをエクスポートします。テーブル名はスペースで区切られていることに注意してください。
エンタープライズ管理者は、差分バックアップと増分バックアップを使用して、毎回フル・バックアップを実行しないようにします。差分バックアップには、前回のフル・バックアップ以降に変更された全てのデータが含まれます。増分バックアップは、最後のバックアップ以降に変更された全てのデータを増分または完全のいずれかで保存します。これらの 2 つのバックアップタイプは mysqlpump では実行できないため、ユーティリティはデータベースとそのオブジェクトの完全または部分的なバックアップにのみ使用できます。
mysqlpump の高度な使用
mysqlpump ユーティリティは、高度な使用のためのいくつかのオプションを提供します。1つ目は圧縮出力です。大規模なデータベースでは、圧縮出力を使用することで、バックアップ・ファイルの保存に必要なドライブ容量を削減できます。これは、1 か月を通じて複数の大容量ファイルがフルバックアップ用に格納されるエンタープライズ環境で特に便利です。
mysqlpump を使用する際は、圧縮アルゴリズムを指定する必要があります。LZ4 は、主に速度に使用されます。zlib アルゴリズムは、gzip や zlib ラッパーを使用する管理者に人気があります。この例では、zlib アルゴリズムを使用して gzip ファイルを出力します。
mysqlpump --compress --compress-output=zlib myDB > myDB_compressed.sql.gzip
コンプライアンスを維持するには、保存されたバックアップを暗号化する必要があります。保管中のデータは、個人を特定できる機密情報(PII)、財務データ、またはコンプライアンス規制の対象となるデータである場合は、ドライブに保存されることを意味します。この例では、mysqlpump コマンドがパイプされ、OpenSSL を使用して暗号化された出力を作成します。
mysqlpump --all-databases | openssl enc -aes-256-cbc -k yourpassword > backup.xb.enc
mysqlpump は、テーブルやデータベースを並行してダンプできることから、複数のコンピュータ・プロセスを使用してデータをエクスポートできます。並列ダンプとは、各オブジェクトが 1 つずつ完了するのを待つ代わりに、複数のエクスポートが同時に発生することを意味します。並列処理を使用することで、管理者はバックアップ手順を高速化できます。
mysqlpump で並列処理を使用するには、エクスポート時に使用するスレッド数を定義する必要があります。デフォルトは 2 ですが、定義はさらにできます。次の記述では、myDB データベースから 4 つのスレッドを使用して、Customer と Order の 2 つのテーブルをエクスポートします。
Mysqlpump -default-parallelism=4 myDB Customer Order > full_backup.sql
mysqlpump 対 mysqldump
mysqlpump の並列処理オプションは mysqldump では利用できないため、mysqlpump ではバックアップ速度が速くなります。mysqlpump の利点は、大規模なエンタープライズ環境での高速バックアップです。mysqlpump の並列処理は、バックアップの実行に数分かかることなく、データのバックアップにかかる時間を数分に短縮する可能性があります。
mysqldump の全てのオプションが新しい mysqlpump で利用できるわけではなく、それを使用するには少なくとも MySQL 5.7 がインストールされている必要があります。インポートには並列性がないため、データのインポートが高速になることはありません。管理者は、データのインポートに代替ユーティリティを使用することを選択できます。
まとめ
バックアップはデータベース管理に不可欠な要素であり、mysqlpump ユーティリティはプロセスをはるかに高速化します。データベース全体またはデータベース内のオブジェクトの迅速なバックアップのために、mysqlpump はスキーマとデータをエクスポートし、それを暗号化して圧縮し、並列性を持つ複数のスレッドを使用します。データベースのフル・バックアップを作成したり、複数のテーブルをエクスポートしたりする必要がある場合は、いつでも使用できます。