MySQL 5.6ではバイナリログのチェックサム(binlog_checksum)が追加され、
しかもそれが5.6.5以降デフォルトで有効になっているので、
5.5をスレーブにして構成するとI/O ThreadがErr:1236で止まる。
mysql55> SHOW SLAVE STATUS\Gワークアラウンドはもちろんbinlog_checksum = noneで起動することだけれども、
*************************** 1. row ***************************
Slave_IO_State:
Master_Host: localhost
Master_User: replicator
Master_Port: 64056
Connect_Retry: 60
Master_Log_File: bin.000007
Read_Master_Log_Pos: 4
Relay_Log_File: relay.000004
Relay_Log_Pos: 144
Relay_Master_Log_File: bin.000007
Slave_IO_Running: No
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 4
Relay_Log_Space: 327
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 1236
Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Slave can not handle replication events with the checksum that master is configured to log; the first event 'bin.000006' at 120, the last event read from './bin.000007' at 120, the last byte read from './bin.000007' at 120.'
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1056
1 row in set (0.00 sec)
mysql56> SHOW GLOBAL VARIABLES LIKE 'binlog_checksum';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| binlog_checksum | CRC32 |
+-----------------+-------+
1 row in set (0.00 sec)
mysql56> SHOW MASTER STATUS;
+------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------+----------+--------------+------------------+-------------------+
| bin.000007 | 462 | | | |
+------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
mysql56> SET GLOBAL binlog_checksum = none;
Query OK, 0 rows affected (0.03 sec)
mysql56> SHOW GLOBAL VARIABLES LIKE 'binlog_checksum';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| binlog_checksum | NONE |
+-----------------+-------+
1 row in set (0.00 sec)
mysql56> SHOW MASTER STATUS;
+------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------+----------+--------------+------------------+-------------------+
| bin.000008 | 120 | | | |
+------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
チェックサムはバイナリログ単位で有効/無効化されるため、SET GLOBALで変えるとバイナリログがスイッチする。
もちろん、今までbinlog_checksum = crc32で記録されたバイナリログはチェックサム有効の状態で記録されているので、mysqlbinlogで吸い上げて当てるしかない。
わざわざ互換性の無い方をデフォルトにしなくても…とも思いつつ、
そもそも基本的にスレーブに前のバージョンをぶら下げるな、ってのはおいておいて…
— ITOH Hiroyukiさん (@i_rethi) 2013年2月12日
おっしゃるとおりです。。
【2013/02/14 12:46】
これもともとは循環レプリケーション内で1台だけやったら…という話がMLに上がっていたので試したメモなのです。
http://lists.mysql.com/mysql/228945
あと、MariaDB10.0のマルチソースレプリを試そうとしたら、MariaDB10.0は5.5ベースなので5.6にそのままぶら下げたらエラったのもありました。
レアケースですよね。
【2013/02/18 10:57】
更に前方互換性をなくす、ROWモードでのバイナリ非互換もあったみたい。。
これだ。今日のお昼に上がったっぽい。 #68397: log_bin_use_v1_row_events undocumented in 5.6bugs.mysql.com/68397
— ts. yokuさん (@yoku0825) 2013年2月16日
@i_rethi これ、「デフォルトでは互換性がない」は正しい状態で、「互換性を保つためのオプションがあるのに記載されていない」が間違ってるといっている気がするので、本来CategoryがDocsなんだと思います。
— ts. yokuさん (@yoku0825) 2013年2月16日
@i_rethiさんがbinlog_rows_query_log_eventsのお試し中に気付いたそうな。
0 件のコメント :
コメントを投稿