程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> Slave_SQL_Running: No mysql同步故障解決方法

Slave_SQL_Running: No mysql同步故障解決方法

編輯:MySQL綜合教程

Slave_SQL_Running: No mysql同步故障解決方法   Slave_SQL_Running: No mysql同步故障解決      今天檢查數據庫發現一台MySQL Slave未和主機同步,查看Slave狀態: mysql> show slave status\G 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 status\G: 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 status\G;            在這裡主要是看log-bin的文件是否相同。     show slave status\G;     在這裡主要是看:                    Slave_IO_Running=Yes                    Slave_SQL_Running=Yes    如果都是Yes,則說明配置成功. 2,在master上輸入show processlist\G;      mysql> SHOW PROCESSLIST\G      *************************** 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'
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved