天天看點

Mysql生産環境__主從同步修複案例

<b>一、    </b><b>硬體環境</b><b></b>

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)

<b>二、    </b><b>軟體環境</b><b></b>

系統軟體:

         Master: cento5.8

         Slave: cento5.8

資料庫軟體:mysql-5.5.10

<b>三、    </b><b>問題現象</b><b></b>

<b>3.1</b><b>收到報警,發現問題</b><b></b>

某天收到mysql主從同步監控報警,登陸Slave,用<b>show slave</b>

status \G; 檢視結果如下,錯誤代碼為1146,錯誤描述為 “<b>庫名</b><b>.</b><b>表名</b><b> </b><b>不存在,插入語句</b>”

Mysql生産環境__主從同步修複案例

圖1

<b>3.2 </b><b>分析解決問題</b><b></b>

有上述slave截圖中的錯誤描述,表不存在。我們需要進一步驗證,在slave上執行show databases; 檢視發現庫存在,如圖2,繼續輸入指令,

use 庫名;

show tables;

發現表也存在,既然都存在,那為什麼會報錯“表不存在呢”,邊思考,邊檢查,google了一番,有類似情況,但是解決辦法不通用。

   冷靜,回頭仔細看錯誤提示,有新的發現,錯誤提示中的表名是大寫的,實際庫中的表名是小寫的。好吧,動手驗證一下,

select * from 庫名.表名; 表名同樣大寫,執行完畢,報錯資訊圖2和 圖1 的報錯資訊相同“表不存在”。

     select * from 庫名.表名; 表名小寫,執行完畢,輸出正确結果,如圖2。

Mysql生産環境__主從同步修複案例

圖2

找到原因就好解決問題了。

<b>解決:</b><b></b>

stop slave;

show slave

status \G;

從新克隆一個secureCRT連接配接,編輯my.cnf配置檔案,

在[mysqld]節點下,加入一行: lower_case_table_names=1

儲存退出。

/etc/init.d/mysqld

restart

回到資料庫操作指令行,執行 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導緻。