国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

如何恢復MySQL主從數據一致性

2024-07-24 12:44:55
字體:
來源:轉載
供稿:網友

最近被告知,MySQL主從數據庫的數據不一致,猜測備庫在同步過程中出現了問題,于是,登上備庫,使用 mysql> show slave status/G查看,果然,備庫在insert語句中因違反主鍵約束,導致備庫停止了同步。現在的問題很明確,就是如何恢復主從庫數據的一致性。

可選方案如下:

一、查看Master最新的Position,將其作為Slave復制的起點。

這種思路體現的是過去的不一致既往不咎,現在保持同步即可。看起來,這個思路和恢復主從庫數據的一致性的初衷有所違背,但這種方法,簡單,高效,在測試環境,對歷史數據要求不高的場景中可使用。

二、必須嚴格的恢復主從庫數據的一致性。

在這里,也有兩種思路:

1. 備份主庫數據,并在從庫上恢復,在歷史數據一致性的基礎上開啟同步,但這種方法比較麻煩,必須在主庫上執行鎖表操作,阻止客戶端對于表數據的更新操作,而且在數據量大的情況下,備份也是個耗時的工程。其實,這種方法在實際生產環境中也很少用。

2. Skip掉相關錯誤

其實,這個說活不是很嚴謹,準備的說,是跳過相關的事務。在我今天這種情況下,就是skip掉因違反主鍵約束而失敗的insert語句。

如何跳過相關事務

一、停止slave服務

二、SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;

三、開啟slave服務。

這里跳過的是一個事務。當然,也可以跳過多個事務,但要謹慎,畢竟,你并不知道跳過的是什么事務。

建議:可反復執行上述步驟,仔細查看導致從庫不能同步的語句。有的時候,阻止從庫的事務太多,這種方法就顯得略為低效。

可分析主庫日志的事務,來確定SQL_SLAVE_SKIP_COUNTER的合適值。具體步驟如下:

1、在備庫中執行show slave status/G,確認以下兩個參數

根據上述兩個參數的值,在主庫中查看當前阻礙從庫復制的事務以及之后的事務。

mysql> SHOW BINLOG EVENTS in 'mysql-bin.000217' from 673146776;

這個是查看日志文件mysql-bin.000217中事務ID為673146776后的所有事務。

當然,SHOW BINLOG EVENTS的用法還是相當靈活的,下述方式均可。

mysql> SHOW BINLOG EVENTS in 'mysql-bin.000217' from 673146776/G

mysql> SHOW BINLOG EVENTS in 'mysql-bin.000217' from 673146776 limit 10;

也可在主機環境下通過mysqlbinlog命令查看

復制代碼 代碼如下:
# mysqlbinlog mysql-bin.000217 --start-position=673146776

如何查詢語句的執行情況

在從庫跳過相關事務,重新啟動Slave后,Slave_IO_Running,Slave_SQL_Running兩項均顯示“YES”,但Seconds_Behind_Master并沒有馬上下降,反而緩慢上升。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 保靖县| 池州市| 武穴市| 辰溪县| 宝山区| 怀仁县| 丹寨县| 朔州市| 乐至县| 安西县| 丰镇市| 如皋市| 汨罗市| 大渡口区| 彰化市| 红原县| 女性| 江门市| 遵化市| 罗江县| 大余县| 轮台县| 隆安县| 青海省| 峡江县| 平顶山市| 新野县| 沂水县| 花垣县| 方城县| 宁德市| 虎林市| 怀仁县| 兴义市| 奉化市| 卫辉市| 贺州市| 石阡县| 翁源县| 奉化市| 敦化市|