日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

记一次阿里云RDS与自建数据库同步中断的补救过程

發布時間:2023/11/27 生活经验 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 记一次阿里云RDS与自建数据库同步中断的补救过程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

背景

2018年4月24日上午9點左右,小編在即將托管的服務器上建立數據庫,并通過openvpn建立加密隧道,從而實現阿里云RDS和本地自建數據庫之間同步。在托管服務器上配置openvpn后,重啟openvpn客戶端時,一直獲取不到ip,后面重啟了一下openvpn服務端,本地托管服務器獲取到了IP,之后小編很開心的配置著MySQL主從同步。但是到11:00左右,有同事反應線上自建數據庫無法訪問,小編通過查看,發現在阿里云虛擬機上的自建MySQL同步中斷,從而導致本地同步也中斷,并且已經同步停止了2個小時。為了保證業務的正常運行,小編做了如下操作。

當前數據庫同步架構圖

補救策略

  1. 在RDS上獲取gtid點,在從庫上從新設置同步點,使從庫正常運行起來,保證業務的流暢
  2. 通過解析RDS binlog,把binlog轉換成SQL語句,然后把SQL語句插入到從庫中
  3. 重新做RDS到自建庫的數據同步
  4. 數據庫同步架構改進,解決單點問題。

補救過程

1. 先讓同步正常運行,保證業務不中斷

1. 在RDS上獲取gtid節點?

  • 命令 :
 show master status\G
  • 結果 :?
*************************** 1. row *************************** File: mysql-bin.000886 Position: 324398134 Binlog_Do_DB: Binlog_Ignore_DB: Executed_Gtid_Set: 005304be-d260-11e7-b402-6c92bf475505:1-219538493, 759ccfb9-70d0-11e7-b7d5-6c92bf47591d:1-2572999, 936b4aea-70d0-11e7-b7d6-6c92bf4757fb:1-132842752, df8f8121-d25f-11e7-b401-6c92bf4757d1:1-44768267 共返回 1 行記錄,花費 5 ms.

2. 配置從節點過濾主鍵不存在的錯誤?編輯 從庫配置文件(小編的配置文件為/etc/my.cnf)

slave-skip-errors = 1062,1053,1032

3. 重啟數據庫?

service mysqld restart

4. 在從節點重新設置同步點?

  • 停止同步
stop slave
  • reset 同步
reset slave all; reset master;
  • 重新設置同步點
set global gtid_purged='005304be-d260-11e7-b402-6c92bf475505:1-219538493, 759ccfb9-70d0-11e7-b7d5-6c92bf47591d:1-2572999, 936b4aea-70d0-11e7-b7d6-6c92bf4757fb:1-132842752, df8f8121-d25f-11e7-b401-6c92bf4757d1:1-44768267'; CHANGE MASTER TO MASTER_HOST='xxxxxxxx', MASTER_USER='xxxxx', MASTER_PASSWORD='xxxxxxxx', MASTER_PORT=3306, MASTER_AUTO_POSITION=1, MASTER_CONNECT_RETRY=10;

5. 啟動同步?

start slave

6. 查看同步是否正常?

show slave status\G

2. 彌補數據

由于從庫無法通過運行RDS的binlog來修復數據,所以需要解析RDS的binlog,讓其轉換成SQL語句,然后再在各個從庫上執行解析出來的SQL語句,具體流程如下:

1. 下載binlog在阿里云控制臺,選擇RDS的日志備份,并獲取下載地址,在服務器上通過如下命令下載

wget  -c '日志地址' -O xxx.tar.gz

2. 獲取某一時間段的binlog并轉換成可識別語句

 mysqlbinlog --no-defaults --base64-output=decode-rows -v -v --start-datetime='2018-04-27 08:58:38' --stop-datetime='2018-04-27 11:58:37' mysql-bin.000797 > 797_10_11.txt

3. 使用下列腳本把上面轉換后的binlog解析成SQL語句?

  • 腳本binlog_parse_to_sql.py

小編千辛萬苦終于找到了一可以把binlog轉換成SQL語句的腳本,github地址為:https://github.com/yy1117/binlog_parse_to_sql。但是該腳本直接使用不適合小編的需求,所以小編對代碼進行了更改,滿足了自己的需求。

#!/usr/bin/python
# -*- coding:utf8 -*- #version_1.2 #######Comment:#################################################################### ## ?Author:GuiJiaoQi&XuYou ?MAIL:yinyi1117@126.com;QQ:85531861 ? ? ? ## ###### ?set global group_concat_max_len =1024000;避免group_concat ?默認長度不夠 ? ## ###### ?如果binlog文件的表在后面發生表結果變化,這個解析會報錯 ? ? ? ? ? ## ###### ?如果columns是二進制的解析會報錯,如果有二進制的還請換工具,抱歉 ? ? ? ? ? ? ? ## ################################################################################### import os,sys import re import MySQLdb import optparse def main(): p = optparse.OptionParser() p.add_option('-u','--user',type='string',dest='user',default='root', help='User for login ') p.add_option('-p','--password',type='string',dest='password', help='Password to use when connecting') p.add_option('-s','--socket',type='string',dest='socket', help='The socket file to use for connection.') p.add_option('-f','--file',type="string",dest='filename', 

轉載于:https://www.cnblogs.com/syncnavigator/p/10189638.html

總結

以上是生活随笔為你收集整理的记一次阿里云RDS与自建数据库同步中断的补救过程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。