mysqlpumpとは
- MySQL5.7(厳密には、MySQL5.7.8)から加わったmysqldumpにはない機能をいくつか持ったバックアップコマンドになっている
- 用途としては、データベースをダンプする、ダンプしたファイルを別サーバのDBにインポートすることが想定されている(mysqldumpと用途はほぼ同じ)
- mysqldumpの互換性を気にせず使えるように作られている
mysqlpumpができること
並列dump
- データベースに含まれるスキーマ及びテーブルに対して並列処理が可能なため、更新中に並列ダンプを行っても整合性のあるバックアップが取得できる
InnoDBの一貫したバックアップを取得するには、--single-transactionをmysqldump同様に指定する必要がある。
ユーザアカウント
- ユーザアカウント情報のテーブルをINSERT文で出力された権限テーブルではなく、CREATE USER, GRANTコマンドで出力ができる
データリストア
- 処理時間を削減するために、インデックス作成とデータリストアを同時に行わずに、データをINSERTしたからインデックスを作成している
出力の圧縮
- 別サーバにバックアップファイルを転送する必要がある場合、データ自体を圧縮することができる。--compressオプションで対応可能なため、転送時間・帯域の節約ができる。
バックアップの進捗出力
- 進捗状況を出力するコマンドがあるため、どのくらい完了しているか、あとどのくらいかかるかを表示してくれるので、とても便利。
イメージとしては、こんな感じで出力される。
Dump progress: 0/2 tables, 250/9213 rows
Dump progress: 0/2 tables, 1000/9213 rows
Dump progress: 0/2 tables, 3000/9213 rows
Dump completed in 1580 milliseconds
バックアップとリストア
- バックアップ
mysqlpump --single-transaction --users > dump.sql
- リストア
$ mysql -uroot -p < dump.sql
mysqlpumpのデータベース指定
全データベースをバックアップする
$ mysqlpump
(or)
$ mysqlpump --all-databases
バックアップ対象のデータベースをリスト化する
$ mysqlpump --databases=db1, db2, db3
ワイルドカードを使って、バックアップ"する"データベースを指定する
$ mysqlpump --include-databases=db%
ワイルドカードを使って、バックアップ"しない"データベースを指定する
$ mysqlpump --exclude-databases=db%
指定したデータベース以下のテーブルのみを指定する
$ mysqlpump db1 table1 table2
キューを増やして、mysqlpumpを実行する
キューはデフォルト1で実行されており、キューに対してのスレッド数は、デフォルト2になっている。
--parallel-schemasオプションを使用することでキューを増やすことができ、--default-parallelismオプションを使うと指定した数のスレッド数で実行することができる
例
- 全データベースを4スレッドでダンプする
$ mysqlpump --default-parallelism=4
- db1,db2に対しては、最初のキューで5スレッド、db3,db4,db5に対しては、2番目のキューで3スレッド、その他のテーブルについては、3スレッドでダンプをする
$ mysqlpump --parallel-schemas=5:db1,db2 --parallel-schemas=3:db3,db4,db5 --default-parallelism=3
注意点
1つのテーブルを複数スレッドでダンプすることはできないため、テーブル数がスレッド数よりも少ない場合は、余るスレッドが発生して活用することはできない。