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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

【20180202】使用iptables做MySQL的端口转发

發布時間:2024/4/14 数据库 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【20180202】使用iptables做MySQL的端口转发 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? 導讀:將一個實例上面的MySQL請求轉向另外一個MySQL實例上面。

? ? 源服務:172.16.3.6:3306 主庫

? ? 目標服務:172.16.3.7:3306 從庫

? ? 訪問賬戶: test_01@172.16.3.15

? ??新舊實例以及搭建主從

  • 在源服務上面開啟端口轉發服務:

  • shell>>?sudo?vim?/etc/sysctl.conf vim>>?net.ipv4.ip_forward=1?##在文件中修改這個選項為1 shell>>?sudo?sysctl?-p shell>>?sudo?/etc/ini.d/iptables?start shell>>?sudo?iptables?-t?nat?-A?PREROUTING?-d?172.16.3.6?-p?tcp?--dport?3306?-j?DNAT?--to-destination?172.16.3.7:3306 shell>>?sudo?iptables?-t?nat?-A?POSTROUTING?-j?MASQUERADE? 或者????sudo?iptables?-t?nat?-A?POSTROUTING?-d?172.16.3.7?-p?tcp?--dport?3306?-j?SNAT?-to-source?172.16.3.6 shell>>?sudo?service?iptables?save shell>>?sudo?service?iptables?restart

    ? 2. 在目標服務上面開啟3306服務和創建訪問賬戶:

    shell>>?sudo?iptables?-A?INPUT?-s?172.16.3.0/24?-m?state?--state?NEW??-m?tcp?-p?tcp?--dport?3306?-j?ACCEPT shell>>?sudo?service?iptables?save shell>>?sudo?service?iptables?restartmysql>>?grant?select,update,insert,delete?on?*.*?to?'test_01'@'172.16.3.6'?identified?by?'new_password'; mysql>>?flush?privileges; mysql>>?\q

    ? ? 切記:端口轉發設置完畢之后,在172.16.3.15上面使用賬號test_01@172.16.3.15 去連接172.16.3.6,這個時候172.16.3.6的iptables會將請求轉發到172.16.3.7上面的MySQL服務上面,這個時候連接的賬號由test_01@172.16.3.15變成了test_01@172.16.3.6,所以我才會在第二步的時候在172.16.3.7上面創建賬號test_01@172.16.3.6,并且這賬號的密碼必須和賬號test_01@172.16.3.15這個賬號的密碼一致。實際上在目標服務172.16.3.7:3306上面可以不需要創建test_01@172.16.3.15這個賬號,并且在源服務172.16.3.6:3306這個服務在做好端口轉發之后可以關掉這個實例。

    ? 3.總結

    ? ? 在整個業務遷移的過程中,存在的情況有如下:

    ? ? ? a.舊的MySQL實例上面存在多個業務。

    ? ? ? b.舊的MySQL實例上面存在長連接。

    ? ? ? c.不同的業務存在針對同一張表的修改操作。

    ? ? ? d.所有業務的連接使用都是精確匹配,即都是test@ip這種情況。

    ? ? ? e.binlog_format是statement格式,但是有寫SQL使用了類似與now()的函數,導致主從數據有些table的時間字段數據不一致。

    ? ? 使用iptables做轉發的目的和缺陷(新舊實例以及搭建主從):

    ? ? ? 目的:主要是為了在避免不同的業務針對同一張表的修改導致數據不一致。例如:業務A和業務B都可以針對表table_01有修改的權限,并且test_01的主鍵是自增主鍵,業務插入的時候不會顯示的插入主鍵鍵值。當業務A先切換過去的時候,業務B還沒有切換,這個時候業務先插入數據到table_01,然后一段時間之后業務B插入數據到table_01。這個時候就會出現1062主鍵沖突,并且這個時候是以舊的MySQL實例為主還是以新的MySQL實例為主。

    ? ? ? 缺陷:1.但是假如業務B是長連接的話,在沒有重啟業務B的情況下,業務B還是存在和舊的MySQL實例連接的情況,那么上訴所說的情況還是可能會發生;2.因為所有的業務的賬號都是精確匹配的,所以有在舊的實例上面有些業務的username是一樣的,但是ip可能不一樣,那么它們的權限和賬號也是不一樣的。但是在使用iptables轉發之后,所有的賬號的匹配的ip地址全部變更成了172.16.3.6,所以有些業務它們最后連接到172.16.3.7:3306實例的賬號就是一摸一樣的,但是又有一個問題出現了,就是所有業務的賬號密碼肯定存在不一樣的情況,這個時候它們發起請求的密碼也是不一樣的,但是它們最后連接到172.16.3.7:3306的賬號是一摸一樣,一個賬號只能對應一個賬號密碼信息,那么就會出現所有的業務只有密碼是一樣的才能正常的請求訪問,密碼不一致的請求就會被拒絕掉。

    ? ? ? 解決方案:重啟新的MySQL實例,重啟的時候加上--skip-grant-tables 。等所有的業務切換之后再次重啟新的MySQL實例。


    轉載于:https://blog.51cto.com/11819159/2068149

    總結

    以上是生活随笔為你收集整理的【20180202】使用iptables做MySQL的端口转发的全部內容,希望文章能夠幫你解決所遇到的問題。

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