2015年8月4日火曜日

mysqldumpじゃないよ、mysqlpumpだよ in MySQL 5.7.8 (mysqldumpとの違い編)

TL;DR

MySQL 5.7.8には、mysqlpumpなるmysqldumpの後継バックアップクライアントが同梱されている。インデックスの遅延ロードや進捗の出力、パラレルでのダンプなど魅力的な拡張機能が入っている。

ただし、mysqlpumpの方は「全テーブルがInnoDB」「master_info_repository= TABLE」「relay_log_info_repository= TABLE」「gtid_mode= ONの場合にはMySQL 5.7.5以降であること(OFFの場合はこの制約は入らない)」「パラレルでバックアップする場合は更新を自分で止めておかなくてはならない」であることを前提に作られているため、それを満たさない場合は mysql40dump のようなラッパーを何かしら作る必要があります(レプリケーションの情報はテーブルに保存されていてそれはダンプに含まれるから、SHOW SLAVE STATUSとかSHOW MASTER STATUSの情報は吐いてくれない)


mysqldumpとの機能の違いはこんな感じ。mysqlpumpだけの機能は別の記事で。

mysqldumpにあって、mysqlpumpにないオプション。


* --disable-keys
* --order-by-primary
  * MyISAMはもうおなかいっぱいですねわかります。

* --flush-privileges
  * --usersを使えってことかな。

* --ignore-table
  * --exclude-*があるからね。

* --tab
* --fields-*
* --lines-terminated-by
  * SELECT INTO OUTFILEを使ったダンプ出力はサポートしません、と。

* --force
* --ignore-error
  * エラー握りつぶしてバックアップなんて論外ってことですね。

* --delete-master-logs
* --dump-slave
* --master-data
* --include-master-host-port
* --set-gtid-purged
  * 今まで通りのやり方でレプリケーションスレーブを作るような情報は一切取れなくなっている。
  * MySQL 5.6.2からのmaster_info_repository= TABLE, relay_log_info_repository= TABLE, MySQL 5.7.5からのmysql.gtid_executeあたりからレプリケーション関連の情報は取ってくる。
    * ↑これを満たしていない場合、SHOW SLAVE STATUSとかは自分でラッパー書くなりして取ってこないとダメ。

* --opt
* --secure-auth
* --quote-names
* --dump-date
* --lock-tables
* --no-autocommit
* --no-set-names
* --quick
* --verbose


* --flush-logs
  * これはわざわざ移植する必要はないと思われたのであろう。たぶん。

* --lock-all-tables
  * FLUSH TABLES WITH READ LOCKなんて取る必要ないよ! mysql.slave_master_infoもmysql.slave_relay_log_infoもmysql.gtid_executedも全部InnoDBなんだから、--single-transactionで保護すればロックなんて要らないんだ! …ってことなんだろう、たぶん。
  * ↑この理屈で(だと思う)--single-transactionの場合もFLUSH TABLES WITH READ LOCKは取らない。


mysqldumpにもmysqlpumpにもあるけど、mysqlpumpではデフォルトで有効になっているオプション。

* --events
* --routines
* --triggers
  * ( ´-`).oO(mysqldumpでもデフォルト有効になってくれていいんですよ。。


mysqldumpとmysqlpumpで意味は同じだけど名前が変わっているオプション。

* --log-error => --log-error-file
* --no-data => --skip-dump-rows

0 件のコメント :

コメントを投稿