政府合規、跨公網同步、多租戶隔離等場景要求MySQL複寫流量加密。本文演示利用SSH隧道實現透明加密複寫,無需重新編譯OpenSSL支援,涵蓋隧道建立、RSA免密認證、複寫配置、看門狗監控全流程。
SHOW VARIABLES LIKE '%ssl%'顯示have_ssl=NO)127.0.0.1:7777映射至master:3306ssh -f replication_user@master_ip -L 7777:master_ip:3306 -N
-f:後台運行-L 7777:master_ip:3306:本地7777轉發至Master的3306-N:不執行遠程命令,僅轉發known_hostsmysql -h 127.0.0.1 -P 7777 -u repl_user -p
# ⚠️ 必須用127.0.0.1,不能用localhost(MySQL會走Unix socket)
轉發連接來源IP為Master真實IP,非127.0.0.1,授權需綁定真實IP:
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'master_real_ip' IDENTIFIED BY 'password';
ssh-keygen -t rsa -b 2048ssh-copy-id replication_user@master_ipssh replication_user@master_ip "echo ok"ssh -f -i ~/.ssh/id_rsa replication_user@master_ip -L 7777:master_ip:3306 -N[mysqld]
log-bin=mysql-bin
server-id=1
[mysqld]
server-id=2
master-host=127.0.0.1
master-user=replicationuser
master-password=replicationpassword
master-port=7777
mysqldump --master-data=2)SELECT驗證主從數據一致性#!/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
CREATE TABLE heartbeat (ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);UPDATE heartbeat SET ts=NOW();SELECT TIMESTAMPDIFF(SECOND, ts, NOW()) FROM heartbeat; 超過閾值(如60秒)觸發告警DELETE同步執行,需延遲從庫(MASTER_DELAY=3600)或邏輯備份SSH隧道方案以「零代碼改造、原生加密、運維可控」三大優勢,成為跨網段MySQL複寫加密的首選落地方案。