2013年4月16日火曜日

MySQL 5.5.28とMariaDB 5.5.28aのmysqldumpを読み比べてみる(binlog_snapshot_%変数というのがある)

--master-dataのオプションの説明にこんなことが書いてある。

on servers before MariaDB 5.3 this will still take a global read lock for a short time at the beginning of the dump;

MariaDB 5.3以降だとFLUSH TABLE WITH READ LOCKしないのか?
 ⇒しない。START TRANSACTION WITH CONSISTENT SNAPSHOTの時に
  binlog_snapshot_fileセッション変数とbinlog_snapshot_positionセッション変数に
  値を自動的に格納してくれる。すご。
  https://kb.askmonty.org/en/enhancements-for-start-transaction-with-consistent-snapshot/
  ⇒対応していないバージョンの場合、オプション解析中にFLUSH TABLES WITH READ LOCKが
   必要な分岐に流れる。



527c531,532
< static const char *load_default_groups[]= { "mysqldump","client",0 };
---
> static const char *load_default_groups[]=
> { "mysqldump", "client", "client-server", "client-mariadb", 0 };

オリジナルのmysqldumpが各種my.cnfから読み取るのは[client]セクションと[mysqldump]セクション、
MariaDB版はそれに加えて[client-server]セクションと[client-mariadb]セクションも読む。

opt_no_create_infoがついてない時は、テーブルDROPして作り直してるんだからUNIQUE_CHECKS=0要らないだロって言ってる。

check_consistent_binlog_pos関数の追加。
START TRANSACTION WITH CONSISTENT SNAPSHOTの時に
binlog_snapshot_fileセッション変数とbinlog_snapshot_positionセッション変数格納した値をパースしてるぽい。
中身は"SHOW STATUS LIKE 'binlog_snapshot_%'"でアクセスしてるだけ。

このセッション変数が取れなかったら"SHOW MASTER DATA"する。
セッション変数が取れるかどうかはオプションを解析している間に一度チェックするので、
そこでダメならFLUSH TABLES WITH READ LOCKする分岐に流れる。


他には、
・ちょこちょこリソースの解放やってる
・my_printf_error関数使わずにfprintfでstderrに書いてる
くらいな感じ。

dump-slaveで要らないSTOP SLAVEが入るやつとかはマージされてないのか。。
まさか違うと思わなかったので結構楽しめた。ごちそうさまでした。

0 件のコメント :

コメントを投稿