pos機(jī)報(bào)99錯誤,GTID復(fù)制錯誤的修復(fù)

 新聞資訊2  |   2023-06-23 17:45  |  投稿人:pos機(jī)之家

網(wǎng)上有很多關(guān)于pos機(jī)報(bào)99錯誤,GTID復(fù)制錯誤的修復(fù)的知識,也有很多人為大家解答關(guān)于pos機(jī)報(bào)99錯誤的問題,今天pos機(jī)之家(www.afbey.com)為大家整理了關(guān)于這方面的知識,讓我們一起來看下吧!

本文目錄一覽:

1、pos機(jī)報(bào)99錯誤

pos機(jī)報(bào)99錯誤

這是學(xué)習(xí)筆記的第 1971 篇文章

前幾天碰到一個MySQL服務(wù)器掉電,重新啟動之后,主從復(fù)制出現(xiàn)了異常。

show slave status的報(bào)錯信息如下: Last_SQL_Error: Error \'@@SESSION.GTID_NEXT cannot be set to ANONYMOUS when @@GLOBAL.GTID_MODE = ON.\' on Query. Default database: \'\'. Query: \'CREATE TABLE IF NOT EXISTS infra.chk_masterha (`key` tinyint NOT NULL primary key,`val` int(10) unsigned NOT NULL DEFAULT \'0\') engine=MyISAM\'

可以從日志可以明顯看出來,這是MHA的心跳檢測機(jī)制,對于數(shù)據(jù)完整性來說,這個操作是可以彌補(bǔ)的。我們可以暫且忽略這一條。

于是使用如下的方法來跳過這個錯誤:

stop slave;

set session gtid_next=\'xxxxxxx\';

begin;commit;

SET SESSION GTID_NEXT = AUTOMATIC;

start slave;

本來以為這是一個常規(guī)的修復(fù),沒想到復(fù)制狀態(tài)出現(xiàn)了問題,

為了盡快修復(fù),我使用了reset slave all的方式,然后重新配置復(fù)制關(guān)系,

change master to MASTER_HOST=\'xx.124.67\',MASTER_USER=\'dba_repl\',MASTER_PASSWORD=\'xx\',MASTER_PORT=4306,master_auto_position=1;

沒想到拋出了如下的錯誤。

Got fatal error 1236 from master when reading data from binary log: \'The slave is connecting using CHANGE MASTER TO MASTER_AUTO_POSITION = 1, but the master has purged binary logs containing GTIDs that the slave requires.

從這個信息可以看出,應(yīng)該是日志的信息出了問題,但是查看主庫中,最近也沒做過purge binary logs操作,相關(guān)的日志都存在,為什么拋出這個錯誤呢。

經(jīng)過測試,發(fā)現(xiàn)有一個折中方案,那就是先臨時關(guān)閉GTID協(xié)議,使用偏移量的方式來重接復(fù)制,這個時候復(fù)制就正常了。

change master to MASTER_HOST=\'xx.124.67\',MASTER_USER=\'dba_repl\',MASTER_PASSWORD=\'xxx\',MASTER_PORT=4306,Master_Log_File=\'mysqlbin.000105\',MASTER_LOG_POS=428492286,master_auto_position=0;

一旦想重新啟用GTID協(xié)議,就又開始拋錯了。

change master to master_auto_position=1;

對于這個問題也著實(shí)下了功夫,發(fā)現(xiàn)還是對于GTID的理解不夠深入導(dǎo)致解決的時候困難重重。我們來理一下這個問題,看看這種情況下怎么修復(fù)。

為了能夠快速復(fù)選問題,并且進(jìn)行問題跟蹤,我把這個數(shù)據(jù)庫做了鏡像備份,如下是使用偏移量復(fù)制的狀態(tài)。

查看GTID的信息有些奇怪,這個內(nèi)容代表什么意思呢。

zExecuted_Gtid_Set: eb99e9de-c2cb-11e8-81e4-005056b7dfa4:1-4613465:6048714-6048731:6048837-6299932

從GTID的格式可以了解到,同一source_id的事務(wù)序號有多個范圍區(qū)間,各組范圍之間用冒號分隔,而這個時候查看mysql.gtid_executed的內(nèi)容如下:

查看GTID_purge變量的內(nèi)容如下:

從庫端的Executed_GTID狀態(tài)

通過這個內(nèi)容我們可以看出,目前的Executed_GTID_Set已經(jīng)是大于6299932了,但是在從庫端的GTID_Set中卻還是一個較大范圍的區(qū)間。

按照這種情況,開啟master_auto_position=1時,還是會嘗試去應(yīng)用舊的事務(wù)數(shù)據(jù),也就難怪會拋出錯誤了。

我們在主庫端做下驗(yàn)證,看看主庫端的Executed_GTID_Set是什么情況,是否也是保留了一個較大的范圍區(qū)間。

從以上的結(jié)果可以看出,主庫端是很清晰的,目前的GTID_Set值已經(jīng)超過了6300007

從現(xiàn)在起,我們就在從庫端操作了。

首先,停止從庫的復(fù)制進(jìn)程。這個時候Executed_GTID_Set是6300028

>>stop slave;

因?yàn)槟壳暗腉TID配置有些不一致,所以我們需要重置一下GTID的配置。

>>reset master;

這個時候查看mysql.gtid_executed是沒有數(shù)據(jù)的。

>> select *from gtid_executed;

Empty set (0.00 sec)

我們初始化的時候,選擇這個臨界點(diǎn)GTID值:6300028

>>SET @@GLOBAL.GTID_PURGED=\'eb99e9de-c2cb-11e8-81e4-005056b7dfa4:1-6300028\';

Query OK, 0 rows affected (0.00 sec)

這樣從庫端的GTID設(shè)置就是和主庫一樣的配置方式了。

使用show master status可以看到,這個配置是生效了。

接下來我們來配置下復(fù)制關(guān)系。

重置從庫的復(fù)制配置

>>reset slave all;

重新建立復(fù)制,使用master_auto_position=1來開啟GTID協(xié)議復(fù)制

>> CHANGE MASTER TO MASTER_HOST=\'xxx.124.67\',MASTER_USER=\'dba_repl\',MASTER_PASSWORD=\'xxx\',MASTER_PORT=4306,MASTER_AUTO_POSITION=1;

Query OK, 0 rows affected, 1 warning (0.01 sec)

啟動從庫

mysql--dba_admin@127.0.0.1:mysql 18:35:40>>start slave;

Query OK, 0 rows affected (0.00 sec)

這個時候查看從庫的狀態(tài),就達(dá)到了預(yù)期的效果了。

通過這個過程也著實(shí)對于GTID有了更進(jìn)一步的了解,對于一些異常情況的測試也在模擬測試中基本都碰到了。

以上就是關(guān)于pos機(jī)報(bào)99錯誤,GTID復(fù)制錯誤的修復(fù)的知識,后面我們會繼續(xù)為大家整理關(guān)于pos機(jī)報(bào)99錯誤的知識,希望能夠幫助到大家!

轉(zhuǎn)發(fā)請帶上網(wǎng)址:http://www.afbey.com/newsone/72293.html

你可能會喜歡:

版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請發(fā)送郵件至 babsan@163.com 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。