今天有同學在搭建主從環境的時候發現一個問題,簡單說明一下。感謝 @年代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這個錯誤號.