首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 5 主從複寫字元集不匹配導致 Slave 報錯:Character set '#28' 解決實錄

     編輯:MySQL 綜合教學

錯誤現象

[ERROR] Slave: Error 'Character set '#28' is not a compiled character set 
and is not specified in the '.../charsets/Index.xml' file' on query.

Slave IO Thread 正常,SQL Thread 中斷,Seconds_Behind_Master 持續增長。

根因追蹤

  1. SHOW BINLOG EVENTS 發現 Master Binlog 含:
    SET @@session.character_set_client=28, @@session.collation_connection=33, @@session.collation_server=8
  2. 28 = gbk,8 = latin1_swedish_ci
  3. Master 為 Linux 來源連線(預設 latin1),Windows 客戶端工具(如 Navicat、Workbench)以 gbk 連線寫入
  4. Slave 為源碼編譯安裝,charsets/Index.xml 缺少 gbk 定義,無法解析事件

驗證指令

-- Master/Slave 對比
SHOW CHARACTER SET LIKE 'gbk';  -- Slave 無輸出,Master 有
SHOW VARIABLES LIKE 'character_set%';

解決方案:替換為官方二進制發布版

  1. 備份資料目錄:mv /usr/local/mysql /usr/local/mysql-old
  2. 下載官方預編譯包:
    wget https://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-5.0.37-linux-i686-glibc23.tar.gz
  3. 解壓替換:
    tar xzf mysql-5.0.37-linux-i686-glibc23.tar.gz -C /usr/local/
    mv /usr/local/mysql-5.0.37-linux-i686-glibc23 /usr/local/mysql
  4. 恢復資料目錄權限:
    chown -R mysql:mysql /usr/local/mysql/data
  5. 啟動驗證:
    /usr/local/mysql/bin/mysqld_safe --user=mysql &
  6. 確認 gbk 已載入:
    SHOW CHARACTER SET LIKE 'gbk'; → 顯示 gbk 行

深層原因總結

層面源碼編譯安裝官方二進制包
字元集支援預設最小集,需 --with-charset=gbk 等參數重編譯內建完整字元集(含 gbk, utf8mb4 等)
charsets/Index.xml可能缺失完整
生產建議不推薦強烈推薦

預防措施

  • 統一所有客戶端連線字元集為 utf8 或 utf8mb4,避免 gbk
  • 應用層連線字串顯式指定 characterEncoding=utf8
  • 生產環境僅使用官方二進制包或發布版套件管理器安裝
  • 監控 Last_SQL_Error 關鍵字 Character set 告警

SHOW CHARACTER SET 驗證 gbk 已載入

字元集不一致是跨平台複寫隱形殺手,統一編碼、使用官方發布版是根治之道。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved