跨公網復制時,明文傳輸存在竊聽風險。啟用 SSL 加密復制鏈路,並通過證書雙向驗證防止暴力破解。本文詳細記錄 OpenSSL 證書體系構建、MySQL SSL 開啟、主從雙向配置、報錯排查全過程。
./config && make && make install-DWITH_SSL=system 或捆綁 yaSSL。/etc/my.cnf 在 [mysqld] 添加 ssl,重啟驗證 SHOW VARIABLES LIKE '%ssl%'; 顯示 have_ssl: YES。/etc/pki/CA/{certs,crl,newcerts,private},touch index.txt; echo 00 > serial(umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)openssl.cnf 區分名默認值,openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3650Master 證書:
mkdir /usr/local/mysql/ssl cd /usr/local/mysql/ssl (umask 077; openssl genrsa -out master.key 2048) openssl req -new -key master.key -out master.csr # CA 簽發 openssl ca -in master.csr -out master.crt -days 365
Slave 證書:同理生成 slave.key、slave.csr,CA 簽發 slave.crt。
將 cacert.pem 複製到主從 /usr/local/mysql/ssl/,設置權限 chown mysql:mysql; chmod 600。
Master my.cnf:
ssl ssl_ca = /usr/local/mysql/ssl/cacert.pem ssl_cert = /usr/local/mysql/ssl/master.crt ssl_key = /usr/local/mysql/ssl/master.key
Slave my.cnf:
ssl ssl_ca = /usr/local/mysql/ssl/cacert.pem ssl_cert = /usr/local/mysql/ssl/slave.crt ssl_key = /usr/local/mysql/ssl/slave.key
Master:GRANT REPLICATION SLAVE ON *.* TO slave@'192.168.216.133' IDENTIFIED BY 'slave' REQUIRE SSL;
查看 SHOW MASTER STATUS; 獲取 File、Position。
Slave:
CHANGE MASTER TO MASTER_HOST='192.168.216.132', MASTER_USER='slave', MASTER_PASSWORD='slave', MASTER_LOG_FILE='mysql-bin.000007', MASTER_LOG_POS=1015, MASTER_SSL=1, MASTER_SSL_CA='/usr/local/mysql/ssl/cacert.pem', MASTER_SSL_CERT='/usr/local/mysql/ssl/slave.crt', MASTER_SSL_KEY='/usr/local/mysql/ssl/slave.key'; START SLAVE;
SSL error: Unable to get private key,修正 chown mysql:mysql。mysql -uroot -proot -hMasterIP --ssl-ca=cacert.pem --ssl-cert=client.crt --ssl-key=client.key;非 SSL 連接應被拒絕(Access denied ... REQUIRE SSL)。
