致使SQL線程故障緣由分析及解決方案
緣由
1. 版本差別,參數設定不一樣,好比:數據類型的差別,SQL_MODE影響
2. 要建立的數據庫對象已經存在
3. 要刪除或修改的對象不存在
4. DML語句不符合表定義及約束時.
緣由是因爲從庫發生了寫入操做.
Last_SQL_Error: Error 'Can't create database 'klvchen'; database exists' on query. Default database: 'klvchen'. Query: 'create database klvchen'
處理方法(以從庫爲核心的處理方案):
# 方法一:
stop slave;
set global sql_slave_skip_counter = 1;
# 將同步指針向下移動一個,若是屢次不一樣步,能夠重複操做。
start slave;
# 方法二:
vi /etc/my.cnf
# 在 [mysqld] 下添加
slave-skip-errors = 1032,1062,1007
# 常見錯誤代碼:
1007:對象已存在
1032:沒法執行DML
1062:主鍵衝突,或約束衝突
注意,以上操做有風險!最安全的作法就是從新構建主從。把握一個原則,一切以主庫爲主.
# 方法三:(最優解決方案)
1.設置從庫只讀.
vi /etc/my.cnf
# 在 [mysqld] 下添加
read-only
# 查看參數是否生效
show variables like '%read_only%';
注意:read-only 只會影響到普通用戶,對管理員用戶無效。
2.加中間件
讀寫分離。如 mycat