Character set ‘#45’ 導致主從停止問題

今天有同學在搭建主從環境的時候發現一個問題,簡單說明一下。感謝 @年代80s. 現象: 從庫上Slave_IO_Running停止,Last_Error顯示如下: bin/mysqlbinlog: Character set #45 is not a compiled character set and is not specified in the /u01/dingqi.lxb/

今天有同學在搭建主從環境的時候發現一個問題,簡單說明一下。感謝 @年代80s.

現象:

從庫上Slave_IO_Running停止,Last_Error顯示如下:

bin/mysqlbinlog: Character set ‘#45′ is not a compiled character set and is not specified in the ‘/u01/dingqi.lxb/transfer2/master/share/mysql/charsets/Index.xml’ file

分析:

此時用mysqlbinlog 執行對應的relaylog文件,也會出現上面這個錯誤提示。

查看這個提示位置的Index.xml,這里記錄了這個server提供的所有字符集。我們發現,其實沒有id為45的字符集。

也就是這個原因,導致slave在同步時,解析出錯,導致同步停止。

SET @@Session.character_set_client=45,@@session.collation_connection=45,@@session.collation_server=33

從這個命令中看,是有用戶連接進master以后,執行了一個set names xxx (xxx是某個字符集名字),而這個xxx被翻譯成45.

復現:

我們要找出編號45的字符集。在5.5上執行如下命令:

發現原來是這個叫做utf8mb4的字符集,這個字符集在5.1里面是還沒有的。

解決:

給我們的提示就是在高版本對低版本的主從中,要注意不要用到低版本不支持的字符集(所以官方并不建議高版本的master同步到低版本的slave)。

對于已經在Master的里面已經存在的binlog,要讓主從能夠繼續同步,只能在slave_skip_errors里加上 22這個錯誤號.

? 版權聲明
THE END
喜歡就支持一下吧
點贊5 分享