Slave_SQL_Running:Nomysql同步故障解決方法

shy丶gril發表於2016-05-25
原創作品,允許轉載,轉載時請務必以超連結形式標明文章 原始出處 、作者資訊和本宣告。否則將追究法律責任。http://kerry.blog.51cto.com/172631/277414
Slave_SQL_Running: No mysql同步故障解決
     今天檢查資料庫發現一臺MySQL Slave未和主機同步,檢視Slave狀態:

mysql> show slave statusG

Slave_IO_Running: Yes

Slave_SQL_Running: No

Last_Errno: 1062

….

Seconds_Behind_Master:NULL

原因:

1.程式可能在slave上進行了寫操作 

2.也可能是slave機器重起後,事務回滾造成的.
解決辦法I:

1.首先停掉Slave服務:slave stop
2.到主伺服器上檢視主機狀態:

記錄File和Position對應的值。

mysql> show master status;

+——————+———–+————–+——————+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+——————+———–+————–+——————+

| mysql-bin.000020 | 135617781 | | |

+——————+———–+————–+——————+

1 row in set (0.00 sec)
3.到slave伺服器上執行手動同步:

mysql> change master to 

> master_host=`master_ip`,

> master_user=`user`, 

> master_password=`pwd`, 

> master_port=3307, 

> master_log_file=`mysql-bin.000020`, 

> master_log_pos=135617781;

1 row in set (0.00 sec)

mysql> slave start;

1 row in set (0.00 sec)

再次檢視slave狀態發現:

Slave_IO_Running: Yes

Slave_SQL_Running: Yes



Seconds_Behind_Master: 0
解決辦法II:

mysql> slave stop;

mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;

mysql> slave start;
 
自己的使用體會:方法一是強制性從某一個點開始同步,會有部分沒有同步的資料丟失,後續主伺服器上刪除記錄同步也會有一些錯誤資訊,不會影響使用.方法二不一定會有效果.
 
 
=======================================================================================]
1,主從不能同步:
show slave status;報錯:Error xxx dosn`t exist

且show slave statusG:

Slave_SQL_Running: NO

Seconds_Behind_Master: NULL
解決方法:

stop slave;

set global sql_slave_skip_counter =1 ;

start slave;
之後Slave會和Master去同步 主要看:
Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Seconds_Behind_Master是否為0,0就是已經同步了
2,還需要做的一些優化與監視:

show full processlist; //檢視mysql當前同步執行緒號

skip-name-resolve       //跳過dns名稱查詢,有助於加快連線及同步的速度

max_connections=1000    //增大Mysql的連線數目,(預設100)

max_connect_errors=100 //增大Mysql的錯誤連線數目,(預設10)
 


檢視日誌一些命令

1,  show master statusG;

           在這裡主要是看log-bin的檔案是否相同。

    show slave statusG;

    在這裡主要是看:

                   Slave_IO_Running=Yes

                   Slave_SQL_Running=Yes

   如果都是Yes,則說明配置成功.
2,在master上輸入show processlistG;

     mysql> SHOW PROCESSLISTG

     *************************** 1. row ***************************

       Id: 2

       User: root

       Host: localhost:32931

       db: NULL

       Command: Binlog Dump

       Time: 94

       State: Has sent all binlog to slave; waiting for binlog to

         be updated

       Info: NULL
   如果出現Command: Binlog Dump,則說明配置成功.
 
 
stop slave    #停止同步 

start slave    #開始同步,從日誌終止的位置開始更新。 

SET SQL_LOG_BIN=0|1  #主機端執行,需要super許可權,用來開停日誌,隨意開停,會造成主機從機資料不一致,造成錯誤 

SET GLOBAL SQL_SLAVE_SKIP_COUNTER=n  # 客戶端執行,用來跳過幾個事件,只有當同步程式出現錯誤而停止的時候才可以執行。 

RESET MASTER  #主機端執行,清除所有的日誌,這條命令就是原來的FLUSH MASTER 

RESET SLAVE   #從機執行,清除日誌同步位置標誌,並重新生成master.info

雖然重新生成了master.info,但是並不起用,最好,將從機的mysql程式重啟一下, 

LOAD TABLE tblname FROM MASTER #從機執行,從主機端重讀指定的表的資料,每次只能讀取一個,受timeout時間限制,需要調整timeout時間。執行這個命令需要同步賬號有 reload和super許可權。以及對相應的庫有select許可權。如果表比較大,要增加net_read_timeout 和 net_write_timeout的值 

LOAD DATA FROM MASTER  #從機執行,從主機端重新讀入所有的資料。執行這個命令需要同步賬號有reload和super許可權。以及對相應的庫有select許可權。如果表比較大,要增加net_read_timeout 和 net_write_timeout的值 

CHANGE MASTER TO master_def_list  #線上改變一些主機設定,多個用逗號間隔,比如

CHANGE MASTER TO

  MASTER_HOST=`master2.mycompany.com`,

  MASTER_USER=`replication`,

  MASTER_PASSWORD=`bigs3cret` 

MASTER_POS_WAIT() #從機執行 

SHOW MASTER STATUS #主機執行,看日誌匯出資訊 

SHOW SLAVE HOSTS #主機執行,看連入的從機的情況。 

SHOW SLAVE STATUS (slave) 

SHOW MASTER LOGS (master) 

SHOW BINLOG EVENTS [ IN `logname` ] [ FROM pos ] [ LIMIT [offset,] rows ] 

PURGE [MASTER] LOGS TO `logname` ; PURGE [MASTER] LOGS BEFORE `date`

本文出自 “聆聽未來” 部落格,請務必保留此出處http://kerry.blog.51cto.com/172631/277414


相關文章