天天看點

資料庫外網ip binlog主從配置

作者:Java小熊

故事起因

上文說到資料庫挂了導緻了訂購業務生産事故。由于上次資料庫挂了(實體上),上司需要我們搞一個資料庫異地雙活,其實本來廣州多個機房就有做多活,可以用内網互相通訊,通過主從同步資料,但是異地機房沒做,因為走網際網路不穩定。但是還是怕整個廣州停電了,把流量切到異地機房去。一開始他們是想着用logstash、mq等中間件同步mysql資料到異地機房的資料庫,我越想越覺得不對勁,因為這樣業務侵入性很強,比如下單接口插入一條資料,logstash就要收集插入的日志,更新一條資料就要收集更新的日志......這樣業務拓展代碼也要拓展。我也查了很多資料,基本上異地機房的資料庫同步都是通過binlog同步,可以用canel中間件,也可以開啟主從同步方式。然後我就開始在測試環境搞兩個外網ip伺服器搭建資料庫主從。

準備工作

首先是搭建資料庫主從,步驟都是百度按照大佬們的代碼一步步敲的,但是偷懶踩了不少坑。。比如突然沒了mysql.pid檔案,後面發現是因為我省略了添加mysql使用者組。。用root賬号好像是會有這個問題,後面按照文檔敲就沒報錯了。binlog同步預設是關閉的,開啟binlog同步需要在/etc/my.cnf添加配置

ini複制代碼log-bin=mysql-bin
binlog-format=Row
#兩個資料庫server-id不一樣
server-id=100
           

登入主資料庫,添加從庫同步賬号并賦予權限

csharp複制代碼#第一個slave是賬号  第二個slave是密碼
grant replication slave on *.* to 'slave'@'%' identified by 'slave';
#檢視主庫binlog檔案和下标
show master status;
           
資料庫外網ip binlog主從配置

登入從庫,添加同步

js複制代碼#參數為ip 端口 賬号 密碼 binlog檔案 下标
change master to master_host='主庫ip', master_port=3306,master_user='root', master_password='root',master_log_file='binlog.000004',master_log_pos=156;
#檢視從庫同步狀态
show slave status;
           

後面發現同步不上,日志報錯了

資料庫外網ip binlog主從配置

一開始以為是賬号密碼錯誤問題,後面發現是主庫的端口設定白名單了,從庫連不上主庫的3306端口,然後我把主從兩個庫調轉設定就可以了。

主從測試

同步表 test

備庫鎖表

資料庫外網ip binlog主從配置

主庫把count=6改成7,添加一條資料備庫

資料庫外網ip binlog主從配置

由于鎖表了無法同步(模拟網絡波動)

資料庫外網ip binlog主從配置
資料庫外網ip binlog主從配置

主庫binlog下标更新到7814

資料庫外網ip binlog主從配置

備庫binlog同步到7284

資料庫外網ip binlog主從配置

rollback解鎖後,備庫同步成功

資料庫外網ip binlog主從配置

備庫binlog下标同步到7814,與主庫下标一緻

資料庫外網ip binlog主從配置

總結

接觸了binlog主從同步配置,感覺對binlog有更熟悉的認識,還記得之前一個大佬面試官問我binlog能不能關閉,我說不能吧,原來預設就是關閉的= =還有就是做資料庫資料同步和主從備份也是一定會用到binlog,因為可以直接同步dml操作。關于資料庫的知識還有很多東西要學(八股文),比如說索引結構,redolog和undolog日志,刷盤等等,後面有機會接觸的話也可以記錄下來~

連結:https://juejin.cn/post/7231804086383214647

繼續閱讀