首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 複製加密實戰:SSH 隧道替代 SSL 實現主從傳輸加密

     編輯:MySQL 資料庫相關知識

為什麼需要加密複製?

MySQL 原生複製協議明文傳輸,跨公網/非信任網路極易被竊聽、竄改。雖支援 SSL,但許多二進制套件未啟用(SHOW VARIABLES LIKE '%ssl%' 顯示 have_ssl=NO)。SSH 隧道提供零成本、零配置變更的透明加密方案。

架構原理

從庫 (Slave)                    主庫 (Master)
[應用] → 127.0.0.1:7777 ──SSH 隧道──→ 192.168.1.10:3306 [MySQL]
           本地回環                    真實 IP
  • 從庫建立 SSH 連線至主庫,將本地 7777 端口轉發至主庫 3306
  • MySQL 複製線程連線 127.0.0.1:7777,流量經 SSH 加密傳輸
  • 主庫視連線來源為主庫自身 IP(非 127.0.0.1),授權需綁定真實 IP

建立隧道步驟

  1. 主庫開啟 SSH 服務:確認 /etc/ssh/sshd_config 允許 TCP 轉發(預設開啟)
  2. 建立專用複製帳號(可選):
    useradd -s /bin/false -M mysql_repl
    passwd mysql_repl  # 設定強密碼或改用金鑰認證
  3. 從庫建立隧道(前台測試):
    ssh -f mysql_repl@master_ip -L 7777:master_ip:3306 -N
    • -f 背景執行、-N 不執行遠端命令、-L 本地轉發
  4. 驗證連通性:
    mysql -h 127.0.0.1 -P 7777 -u repl_user -p
    -- 注意:不可用 localhost,MySQL 會走 socket

配置 MySQL 複製(標準流程,僅 Master_Host/Port 不同)

主庫 my.cnf

[mysqld]
log-bin=mysql-bin
server-id=1
binlog_format=ROW  # 或 MIXED
CREATE USER 'repl'@'master_ip' IDENTIFIED BY 'strong_pass';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'master_ip';

從庫 my.cnf

[mysqld]
server-id=2
relay-log=relay-bin
skip-slave-start
replicate-ignore-db=mysql
CHANGE MASTER TO
  MASTER_HOST='127.0.0.1',
  MASTER_PORT=7777,
  MASTER_USER='repl',
  MASTER_PASSWORD='strong_pass';
START SLAVE;

生產級強化:高可用隧道

  • 金鑰認證替代密碼:ssh-keygen -t rsa -b 4096,公鑰放入主庫 ~/.ssh/authorized_keys
  • 看門狗腳本:每分鐘檢測隧道進程,斷線自動重連
  • 雙向心跳監控:主庫 Cron 寫入時間戳表,從庫檢測延遲超閾值發報警
  • autossh -M 0 -f -N -L 7777:master_ip:3306 mysql_repl@master_ip(自動重連)

兩大認知誤區提醒

  1. 複製 ≠ 備份:主庫誤執行 DELETE 無 WHERE,從庫同步執行,資料雙雙全無。仍需邏輯/物理備份。
  2. 從庫嚴禁寫入業務資料:應用層需檢測 @@read_only=ON,誤寫會導致複製中斷、資料分歧。

結語

SSH 隧道以系統級加密替代 MySQL 內建 SSL,部署簡單、相容性極佳。配合金鑰認證、自動重連、延遲監控,即可構建生產可用的加密複製鏈路。

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