首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

SSH隧道加密MySQL主從複寫實戰:透明加密、RSA認證與高可用監控

     編輯:MySQL 綜合教學

政府合規、跨公網同步、多租戶隔離等場景要求MySQL複寫流量加密。本文演示利用SSH隧道實現透明加密複寫,無需重新編譯OpenSSL支援,涵蓋隧道建立、RSA免密認證、複寫配置、看門狗監控全流程。

為什麼選擇SSH隧道

  • MySQL二進制版常未啟用SSL(SHOW VARIABLES LIKE '%ssl%'顯示have_ssl=NO)
  • 重新編譯OpenSSL支援成本高、維護難
  • SSH原生支援端口轉發、RSA金鑰認證、壓縮傳輸
  • 透明加密:應用層無感知,127.0.0.1:7777映射至master:3306

隧道建立全流程

1. Slave端建立隧道(密碼認證)

ssh -f replication_user@master_ip -L 7777:master_ip:3306 -N
  • -f:後台運行
  • -L 7777:master_ip:3306:本地7777轉發至Master的3306
  • -N:不執行遠程命令,僅轉發
  • 首次連接需輸入密碼,驗證known_hosts

2. 驗證隧道連通性

mysql -h 127.0.0.1 -P 7777 -u repl_user -p
# ⚠️ 必須用127.0.0.1,不能用localhost(MySQL會走Unix socket)

3. Master授權關鍵點

轉發連接來源IP為Master真實IP,非127.0.0.1,授權需綁定真實IP:

GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'master_real_ip' IDENTIFIED BY 'password';

RSA金鑰免密認證(生產必備)

  1. Slave生成金鑰對:ssh-keygen -t rsa -b 2048
  2. 公鑰推送至Master:ssh-copy-id replication_user@master_ip
  3. 驗證免密:ssh replication_user@master_ip "echo ok"
  4. 隧道命令簡化:ssh -f -i ~/.ssh/id_rsa replication_user@master_ip -L 7777:master_ip:3306 -N

複寫配置(隧道模式)

Master (my.cnf)

[mysqld]
log-bin=mysql-bin
server-id=1

Slave (my.cnf)

[mysqld]
server-id=2
master-host=127.0.0.1
master-user=replicationuser
master-password=replicationpassword
master-port=7777

啟動與驗證

  1. 重啟雙端MySQL
  2. 新環境需手動同步基線數據(mysqldump --master-data=2)
  3. 執行SELECT驗證主從數據一致性
  4. Master寫入測試 → 等待同步 → Slave查詢驗證

高可用監控:看門狗腳本

#!/bin/bash
# ssh_tunnel_watchdog.sh

TUNNEL_CMD="ssh -f -i /home/repl/.ssh/id_rsa repl_user@master_ip -L 7777:master_ip:3306 -N"
CHECK_CMD="mysql -h 127.0.0.1 -P 7777 -u repl_user -ppass -e 'SELECT 1'"

if ! pgrep -f "7777:master_ip:3306" >/dev/null; then
    log "Tunnel down, restarting..."
    $TUNNEL_CMD
fi

if ! $CHECK_CMD >/dev/null 2>&1; then
    log "Replication check failed, alerting..."
    # 發送告警:郵件/短信/企業微信
    curl -X POST "https://alert.api/notify" -d "msg=MySQL replication tunnel broken"
fi

加入crontab每分鐘檢查:* * * * * /path/ssh_tunnel_watchdog.sh

進階監控:心跳檢測機制

  1. Master建立心跳表:CREATE TABLE heartbeat (ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);
  2. Master Cron每分鐘:UPDATE heartbeat SET ts=NOW();
  3. Slave Cron每分鐘檢查:SELECT TIMESTAMPDIFF(SECOND, ts, NOW()) FROM heartbeat; 超過閾值(如60秒)觸發告警

兩大複寫核心誤區(重申)

  1. 複寫≠備份:誤DELETE同步執行,需延遲從庫(MASTER_DELAY=3600)或邏輯備份
  2. 從庫不可寫業務數據:應用層必須區分讀寫路由,防止分歧

SSH隧道方案以「零代碼改造、原生加密、運維可控」三大優勢,成為跨網段MySQL複寫加密的首選落地方案。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved