知らなかったのでメモる。
ネタ提供は @kenjiskywalker さん。
5.5, 5.1, 5.0のマスターに5.6のスレーブをぶら下げてSTART SLAVEすると、こんなワーニングが出る。
これ自体はWarningで動作に問題はないけど、なんでMySQL 5.6で追加されたbinlog_checksumと
SERVER_UUIDが`MySQL 5.6のエラーログ'に出るんだろうとふと思って調べてみる。
取り敢えず覗いてみると、sql/rpl_slave.cc:get_master_version_and_clock にこんなところを発見。
マスターに向かって、"SET @master_binlog_checksum= @@global.binlog_checksum"を放って、
リターンコードでものによってはワーニングにしたりFatalでI/Oスレッドとめたり。
MySQL 5.5以前はbinlog_checksum変数がないから、ER_UNKNOWN_SYSTEM_VARIABLEで必ずエラーになるはず。
SERVER_UUIDのところは sql/rpl_slave.cc:get_master_uuid から
マスターに向かって"SHOW VARIABLES LIKE 'SERVER_UUID'"を放って、結果セットを空っぽでもらってこのワーニングになる、と。
で、この2つの関数は sql/rpl_slave.cc:handle_slave_ioからこんな風に
呼ばれていて、呼び出し元をたどっていくと sql/rpl_slave.cc:start_slave_threads にたどり着く。
OK、START SLAVEすると毎回出るのね。
しかしこんな処理追加になってたのか。。
楽しかった。
PlanetMySQL Voting: Vote UP / Vote DOWN
ネタ提供は @kenjiskywalker さん。
5.0から5.6でレプリケーション、Unknown system variable 'binlog_checksum', Error_code: 119 って言われててつらい感じする
— 私の頭の中の弥勒菩薩さん (@kenjiskywalker) 2013年5月10日
今日もありがとうございます(*-人-)5.5, 5.1, 5.0のマスターに5.6のスレーブをぶら下げてSTART SLAVEすると、こんなワーニングが出る。
2013-05-10 12:45:45 15820 [Warning] Slave I/O: Notifying master by SET @master_binlog_checksum= @@global.binlog_checksum faile
d with error: Unknown system variable 'binlog_checksum', Error_code: 1193
2013-05-10 12:45:45 15820 [Warning] Slave I/O: Unknown system variable 'SERVER_UUID' on master. A probable cause is that the v
ariable is not supported on the master (version: 5.5.31-log), even though it is on the slave (version: 5.6.11-log), Error_code
: 1193
これ自体はWarningで動作に問題はないけど、なんでMySQL 5.6で追加されたbinlog_checksumと
SERVER_UUIDが`MySQL 5.6のエラーログ'に出るんだろうとふと思って調べてみる。
取り敢えず覗いてみると、sql/rpl_slave.cc:get_master_version_and_clock にこんなところを発見。
2047 const char query[]= "SET @master_binlog_checksum= @@global.binlog_checksum";
2048 master_res= NULL;
2049 mi->checksum_alg_before_fd= BINLOG_CHECKSUM_ALG_UNDEF; //initially undefined
..
2056 rc= mysql_real_query(mysql, query, strlen(query));
2057 if (rc != 0)
..
2063 if (mysql_errno(mysql) == ER_UNKNOWN_SYSTEM_VARIABLE)
2064 {
2065 // this is tolerable as OM -> NS is supported
2066 mi->report(WARNING_LEVEL, mysql_errno(mysql),
2067 "Notifying master by %s failed with "
2068 "error: %s", query, mysql_error(mysql));
マスターに向かって、"SET @master_binlog_checksum= @@global.binlog_checksum"を放って、
リターンコードでものによってはワーニングにしたりFatalでI/Oスレッドとめたり。
MySQL 5.5以前はbinlog_checksum変数がないから、ER_UNKNOWN_SYSTEM_VARIABLEで必ずエラーになるはず。
SERVER_UUIDのところは sql/rpl_slave.cc:get_master_uuid から
1541 if (!mysql_real_query(mysql,
1542 STRING_WITH_LEN("SHOW VARIABLES LIKE 'SERVER_UUID'")) &&
1543 (master_res= mysql_store_result(mysql)) &&
1544 (master_row= mysql_fetch_row(master_res)))
1545 {
..
1587 else if (!master_row && master_res)
1588 {
1589 mi->report(WARNING_LEVEL, ER_UNKNOWN_SYSTEM_VARIABLE,
1590 "Unknown system variable 'SERVER_UUID' on master. "
1591 "A probable cause is that the variable is not supported on the "
1592 "master (version: %s), even though it is on the slave (version: %s)",
1593 mysql->server_version, server_version);
1594 }
マスターに向かって"SHOW VARIABLES LIKE 'SERVER_UUID'"を放って、結果セットを空っぽでもらってこのワーニングになる、と。
で、この2つの関数は sql/rpl_slave.cc:handle_slave_ioからこんな風に
4056 connected:
..
4067 mysql_mutex_lock(&mi->run_lock);
4068 mi->slave_running= MYSQL_SLAVE_RUN_CONNECT;
4069 mysql_mutex_unlock(&mi->run_lock);
4070
4071 thd->slave_net = &mysql->net;
4072 THD_STAGE_INFO(thd, stage_checking_master_version);
4073 ret= get_master_version_and_clock(mysql, mi);
4074 if (!ret)
4075 ret= get_master_uuid(mysql, mi);
4076 if (!ret)
4077 ret= io_thread_init_commands(mysql, mi);
呼ばれていて、呼び出し元をたどっていくと sql/rpl_slave.cc:start_slave_threads にたどり着く。
OK、START SLAVEすると毎回出るのね。
しかしこんな処理追加になってたのか。。
楽しかった。
PlanetMySQL Voting: Vote UP / Vote DOWN