一、 硬件環境
Master: Dell R720 Intel(R)Xeon(R) CPU E5-2640 v2 @ 2.00GHz
MEM 64G,disk 4*2.5 SAS 網絡4* 千兆
Slave: Dell R720 Intel(R)Xeon(R) CPU E5-2640 v2 @ 2.00GHz
MEM 64G,disk 4*2.5 SAS 網絡4* 千兆
二、 軟件環境
系統軟件:
Master: cento5.8
Slave: cento5.8
數據庫軟件:mysql-5.5.10
三、 問題現象
3.1收到報警,發現問題
2014年XX月XX日收到mysql主從同步監控報警,登陸Slave,用show slavestatus \G; 查看結果如下,錯誤代碼為1146,錯誤描述為 “庫名.表名不存在,插入語句”
圖1
3.2 分析解決問題
有上述slave截圖中的錯誤描述,表不存在。我們需要進一步驗證,在slave上執行show databases; 查看發現庫存在,如圖2,繼續輸入命令,
use 庫名;
show tables;
發現表也存在,既然都存在,那為什麼會報錯“表不存在呢”,邊思考,邊檢查,google了一番,有類似情況,但是解決辦法不通用。
冷靜,回頭仔細看錯誤提示,有新的發現,錯誤提示中的表名是大寫的,實際庫中的表名是小寫的。好吧,動手驗證一下,
select * from 庫名.表名; 表名同樣大寫,執行完畢,報錯信息圖2和 圖1 的報錯信息相同“表不存在”。
select * from 庫名.表名; 表名小寫,執行完畢,輸出正確結果,如圖2。
圖2
找到原因就好解決問題了。
解決:
stop slave;
show slavestatus \G;
從新克隆一個secureCRT連接,編輯my.cnf配置文件,
在[mysqld]節點下,加入一行:lower_case_table_names=1
保存退出。
/etc/init.d/mysqldrestart
回到數據庫操作命令行,執行 start slave;show slave status\G;開啟同步,發現報錯信息消失,同步恢復。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
登陸master端,發現master 的my.cnf配置中有lower_case_table_names=1
最後總結原因:slave端my.cnf配置缺少lower_case_table_names=1導致。