如何解決Slave_SQL_Running: No MySQL同步故障問題,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。
站在用戶的角度思考問題,與客戶深入溝通,找到郾城網(wǎng)站設(shè)計(jì)與郾城網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都做網(wǎng)站、成都網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名申請(qǐng)、網(wǎng)頁空間、企業(yè)郵箱。業(yè)務(wù)覆蓋郾城地區(qū)。
主從服務(wù)器模式,從服務(wù)器重啟后發(fā)現(xiàn)備份停止,手動(dòng)啟動(dòng)mysql>start slave;出現(xiàn)下面的錯(cuò)誤:
ERROR 1201(HY000): Could not initialize master info structure; more error messages can be found in the MySQL error log
處理方法:
1.處理 vim /etc/my.cnf
加上relay-log=xxx #(relay-log=fb-relay) 即可
2.刪除從服務(wù)器上的master.info 和relay-log.info 文件,重啟mysql服務(wù)
備注:
relay-log日志記錄的是從服務(wù)器I/O線程將主服務(wù)器的二進(jìn)制日志讀取過來記錄到從服務(wù)器本地文件,然后SQL線程會(huì)讀取relay-log日志的內(nèi)容并應(yīng)用到從服務(wù)器
mysql slave不能同步Last_SQL_Error: Error ‘Duplicate entry ‘
發(fā)表于54 天前 ? 數(shù)據(jù)庫應(yīng)用 ? 暫無評(píng)論? 被圍觀 394 次+
昨天一臺(tái)mysql slave 重啟后,出現(xiàn)了 Last_SQL_Error: Error 'Duplicate entry ' 錯(cuò)誤,不能同步更新
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.10.100
Master_User: slave_user
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000773
Read_Master_Log_Pos: 63325
Relay_Log_File: server122-relay-bin.000002
Relay_Log_Pos: 165661
Relay_Master_Log_File: mysql-bin.000771
Slave_IO_Running: Yes
Slave_SQL_Running: No
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 1062
Last_Error: Error 'Duplicate entry '1438019' for key 'PRIMARY'' on query. Default database: 'otrs'. Query: 'INSERT INTO ticket (tn, title, create_time_unix, queue_id, ticket_lock_id, user_id, group_id, ticket_priority_id, ticket_state_id, ticket_answered, escalation_start_time, timeout, valid_id, create_time, create_by, change_time, change_by) VALUES ('2012061310001851', 'Your order ORD201205A000016 was bounced back', 1339585744, 44, 1, 43, 1, 3, 4, 0, 1339585744, 0, 1, current_timestamp, 43, current_timestamp, 43)'
Skip_Counter: 0
Exec_Master_Log_Pos: 41969067
Relay_Log_Space: 625695
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 1062
Last_SQL_Error: Error 'Duplicate entry '1438019' for key 'PRIMARY'' on query. Default database: 'otrs'. Query: 'INSERT INTO ticket (tn, title, create_time_unix, queue_id, ticket_lock_id, user_id, group_id, ticket_priority_id, ticket_state_id, ticket_answered, escalation_start_time, timeout, valid_id, create_time, create_by, change_time, change_by) VALUES ('2012061310001851', 'Your order ORD201205A000016 was bounced back', 1339585744, 44, 1, 43, 1, 3, 4, 0, 1339585744, 0, 1, current_timestamp, 43, current_timestamp, 43)'
1 row in set (0.00 sec)ERROR:
No query specified
上網(wǎng)查詢資料,解決的辦法是:
mysql> slave stop;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> slave start;
上面那種方法我沒試過,不過我用的是下面這種方法:
修改mysql配置文件 /etc/my.cnf 在 [mysqld]下加一行 slave_skip_errors = 1062 ,保存.重啟mysql. mysql slave可以正常同步了.
Slave_SQL_Running: No mysql同步故障解決
今天檢查數(shù)據(jù)庫發(fā)現(xiàn)一臺(tái)MySQL Slave未和主機(jī)同步,查看Slave狀態(tài):
mysql> show slave status\G
Slave_IO_Running: Yes
Slave_SQL_Running: No
Last_Errno: 1062
....
Seconds_Behind_Master:NULL
原因:
1.程序可能在slave上進(jìn)行了寫操作
2.也可能是slave機(jī)器重起后,事務(wù)回滾造成的.
解決辦法I:
1.首先停掉Slave服務(wù):slave stop
2.到主服務(wù)器上查看主機(jī)狀態(tài):
記錄File和Position對(duì)應(yīng)的值。
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服務(wù)器上執(zhí)行手動(dòng)同步:
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狀態(tài)發(fā)現(xiàn):
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;
自己的使用體會(huì):方法一是強(qiáng)制性從某一個(gè)點(diǎn)開始同步,會(huì)有部分沒有同步的數(shù)據(jù)丟失,后續(xù)主服務(wù)器上刪除記錄同步也會(huì)有一些錯(cuò)誤信息,不會(huì)影響使用.方法二不一定會(huì)有效果.
=======================================================================================]
1,主從不能同步:
show slave status;報(bào)錯(cuò):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會(huì)和Master去同步 主要看:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master是否為0,0就是已經(jīng)同步了
2,還需要做的一些優(yōu)化與監(jiān)視:
show full processlist; //查看mysql當(dāng)前同步線程號(hào)
skip-name-resolve //跳過DNS名稱查詢,有助于加快連接及同步的速度
max_connections=1000 //增大Mysql的連接數(shù)目,(默認(rèn)100)
max_connect_errors=100 //增大Mysql的錯(cuò)誤連接數(shù)目,(默認(rèn)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
如果出現(xiàn)Command: Binlog Dump,則說明配置成功.
stop slave #停止同步
start slave #開始同步,從日志終止的位置開始更新。
SET SQL_LOG_BIN=0|1 #主機(jī)端運(yùn)行,需要super權(quán)限,用來開停日志,隨意開停,會(huì)造成主機(jī)從機(jī)數(shù)據(jù)不一致,造成錯(cuò)誤
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=n # 客戶端運(yùn)行,用來跳過幾個(gè)事件,只有當(dāng)同步進(jìn)程出現(xiàn)錯(cuò)誤而停止的時(shí)候才可以執(zhí)行。
RESET MASTER #主機(jī)端運(yùn)行,清除所有的日志,這條命令就是原來的FLUSH MASTER
RESET SLAVE #從機(jī)運(yùn)行,清除日志同步位置標(biāo)志,并重新生成master.info
雖然重新生成了master.info,但是并不起用,最好,將從機(jī)的mysql進(jìn)程重啟一下,
LOAD TABLE tblname FROM MASTER #從機(jī)運(yùn)行,從主機(jī)端重讀指定的表的數(shù)據(jù),每次只能讀取一個(gè),受timeout時(shí)間限制,需要調(diào)整timeout時(shí)間。執(zhí)行這個(gè)命令需要同步賬號(hào)有 reload和super權(quán)限。以及對(duì)相應(yīng)的庫有select權(quán)限。如果表比較大,要增加net_read_timeout 和 net_write_timeout的值
LOAD DATA FROM MASTER #從機(jī)執(zhí)行,從主機(jī)端重新讀入所有的數(shù)據(jù)。執(zhí)行這個(gè)命令需要同步賬號(hào)有reload和super權(quán)限。以及對(duì)相應(yīng)的庫有select權(quán)限。如果表比較大,要增加net_read_timeout 和 net_write_timeout的值
CHANGE MASTER TO master_def_list #在線改變一些主機(jī)設(shè)置,多個(gè)用逗號(hào)間隔,比如
CHANGE MASTER TO
MASTER_HOST='master2.mycompany.com',
MASTER_USER='replication',
MASTER_PASSWORD='bigs3cret'
MASTER_POS_WAIT() #從機(jī)運(yùn)行
SHOW MASTER STATUS #主機(jī)運(yùn)行,看日志導(dǎo)出信息
SHOW SLAVE HOSTS #主機(jī)運(yùn)行,看連入的從機(jī)的情況。
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'
看完上述內(nèi)容,你們掌握如何解決Slave_SQL_Running: No mysql同步故障問題的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
標(biāo)題名稱:如何解決Slave_SQL_Running:Nomysql同步故障問題
分享URL:http://jinyejixie.com/article12/iissgc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊(cè)、服務(wù)器托管、標(biāo)簽優(yōu)化、定制網(wǎng)站、自適應(yīng)網(wǎng)站、企業(yè)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)