Slave_SQL_Running: No mysql同步故障解決

Slave_SQL_Running: No mysql同步故障解決mysql

今天檢查數據庫發現一臺MySQL Slave未和主機同步,查看Slave狀態:sql

mysql> show slave status\G數據庫

Slave_IO_Running: Yes服務器

Slave_SQL_Running: No優化

Last_Errno: 1062線程

....日誌

Seconds_Behind_Master:NULLdns

緣由:進程

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'

相關文章
相關標籤/搜索