在MySQL主從復(fù)制環(huán)境的搭建中,常常會(huì)遇到一種場(chǎng)景,主庫(kù)和從庫(kù)都要初始化用戶的賬號(hào)密碼,正常的情況下,需要在主庫(kù)和從庫(kù)都關(guān)閉session級(jí)別的binlog,然后再進(jìn)行用戶信息導(dǎo)入。
但是有時(shí)候會(huì)忽略關(guān)閉session級(jí)別binlog這個(gè)前置動(dòng)作,例如在基于GTID的復(fù)制模式下,主從庫(kù)都直接導(dǎo)入了用戶的賬號(hào)密碼信息,主庫(kù)和從庫(kù)都將賬號(hào)密碼的事務(wù)記錄到了自己的GTID中,此時(shí)我們?nèi)绻肎TID的方式搭建復(fù)制,會(huì)出現(xiàn)報(bào)錯(cuò),因?yàn)閺膸?kù)已經(jīng)有賬號(hào)了,所以主庫(kù)上同步到從庫(kù)的用戶信息會(huì)出現(xiàn)報(bào)錯(cuò)現(xiàn)象,提示用戶已經(jīng)存在,這種情況下,我們需要在從庫(kù)跳過(guò)從主庫(kù)復(fù)制過(guò)來(lái)的創(chuàng)建用戶的SQL語(yǔ)句。
在GTID模式下,通過(guò)下面的辦法可以跳過(guò)一個(gè)事務(wù):
stop slave;
set gtid_next=xxxxx;
begin;
commit;
set gtid_next=automatic;
start slave;
但是在事務(wù)數(shù)很多的情況下,我們不能一個(gè)一個(gè)跳過(guò),需要批量跳過(guò)同一個(gè)錯(cuò)誤,這里有幾種方式可以進(jìn)行處理;
MySQL復(fù)制問(wèn)題的三個(gè)參數(shù)介紹
分別是調(diào)整slave_skip_errors參數(shù)或者slave_exec_mode 參數(shù)
今天我們來(lái)看另外一種方法,就是利用pt-slave-restart工具來(lái)進(jìn)行事務(wù)跳過(guò),命令如下:
./pt-slave-restart -uroot -proot123 --error-numbers=1062
命令很容易理解,寫清楚錯(cuò)誤編碼,直接跳過(guò)就行,它會(huì)打印出來(lái)很多信息,默認(rèn)情況下打印內(nèi)容為:時(shí)間戳、連接信息、中繼日志文件、中繼日志位置以及上一個(gè)錯(cuò)誤號(hào)。例如:
2020-09-22T00:59:09 P=3306,h=192.168.7.194,p=...,u=root relay-bin.000005 369 1032
2020-09-22T00:59:09 P=3306,h=192.168.7.194,p=...,u=root relay-bin.000005 726 1032
2020-09-22T00:59:09 P=3306,h=192.168.7.194,p=...,u=root relay-bin.000005 1085 1032
2020-09-22T00:59:09 P=3306,h=192.168.7.194,p=...,u=root relay-bin.000005 1444 1032
2020-09-22T00:59:09 P=3306,h=192.168.7.194,p=...,u=root relay-bin.000005 1800 1032
你可以使用--verbose選項(xiàng)添加更多信息,也可以使用--quiet選項(xiàng)阻止所有輸出。
注意事項(xiàng):
當(dāng)采用多線程復(fù)制(slave_parallel_workers > 0)時(shí),pt-slave-restart不能跳過(guò)事務(wù)。pt-slave-restart不能確定GTID事件是哪個(gè)特定slave線程執(zhí)行失敗的事務(wù)。
如果需要使用,請(qǐng)暫時(shí)關(guān)閉多線程復(fù)制的workers
關(guān)于pt-slave-restart的其他參數(shù),可以使用pt-slave-restart --help的命令查看,也可以參考下面的常見參數(shù)列表:
--always :永不停止slave線程,手工停止也不行
--ask-pass :替換-p命令,防止密碼輸入被身后的開發(fā)窺屏
--error-numbers :指定跳過(guò)哪些錯(cuò)誤,可用,進(jìn)行分隔
--error-text :根據(jù)錯(cuò)誤信息進(jìn)行匹配跳過(guò)
--log :輸出到文件
--recurse :在主端執(zhí)行,監(jiān)控從端
--runtime :工具執(zhí)行多長(zhǎng)時(shí)間后退出:默認(rèn)秒,m=minute,h=hours,d=days
--slave-user --slave-password :從庫(kù)的賬號(hào)密碼,從主端運(yùn)行時(shí)使用
--skip-count :一次跳過(guò)錯(cuò)誤的個(gè)數(shù),膽大的可以設(shè)置大些,不指定默認(rèn)1個(gè)
--master-uuid :級(jí)聯(lián)復(fù)制的時(shí)候,指定跳過(guò)上級(jí)或者上上級(jí)事務(wù)的錯(cuò)誤
--until-master :到達(dá)指定的master_log_pos,file位置后停止,格式:”file:pos“
--until-relay :和上面一樣,但是根據(jù)relay_log的位置來(lái)停止
以上就是MySQL pt-slave-restart工具的使用簡(jiǎn)介的詳細(xì)內(nèi)容,更多關(guān)于MySQL pt-slave-restart工具的使用的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
您可能感興趣的文章:- The MySQL server is running with the --read-only option so it cannot execute this statement
- mysql數(shù)據(jù)庫(kù)mysql: [ERROR] unknown option ''--skip-grant-tables''
- mysql視圖之確保視圖的一致性(with check option)操作詳解
- MySQL存儲(chǔ)表情時(shí)報(bào)錯(cuò):java.sql.SQLException: Incorrect string value:‘\xF0\x9F\x92\xA9\x0D\x0A...’的解決方法
- Mysql中的NULL和Empty String
- javascript連接mysql與php通過(guò)odbc連接任意數(shù)據(jù)庫(kù)的實(shí)例
- ubuntu下apt-get安裝和徹底卸載mysql詳解
- MySQL利用AES_ENCRYPT()與AES_DECRYPT()加解密的正確方法示例
- mysql server is running with the --skip-grant-tables option
- 利用pt-heartbeat監(jiān)控MySQL的復(fù)制延遲詳解