MySQL主从复制默认明文传输,必须显式配置SSL证书及参数(如MASTER_SSL=1、MASTER_SSL_CA等)并验证Master_SSL_Cipher非空才真正加密;仅设require_secure_transport会断连,且需注意证书有效期、系统时间同步与性能影响。

MySQL主从复制默认不加密,明文传输密码和数据
主从流量走的是 MySQL 的复制协议(基于 binlog event),默认完全不加密——包括用户名、密码、SQL 内容、表结构变更,全在 TCP 层裸奔。哪怕只在内网,一旦有中间节点(比如被入侵的宿主机、共享交换机、云平台虚拟网络劫持),就能直接抓包还原所有写操作。
真正起作用的只有 ssl_mode 和配套证书配置;光开 require_secure_transport=ON 会直接断掉从库连接,因为从库自己没配 SSL 就连不上。
- 主库必须生成并加载服务器证书:
ssl_ca、ssl_cert、ssl_key - 从库连接时必须显式指定
MASTER_SSL=1,且提供自己的MASTER_SSL_CA(至少要能验证主库身份) - 不要复用应用连接的证书;复制通道建议用专用 CA 签发的证书,避免私钥泄露波及业务连接
如何让 CHANGE MASTER TO 使用 SSL 连接主库
不是加个 MASTER_SSL=1 就完事。MySQL 要求 SSL 参数成对出现,漏一个就会回退到非加密模式,还不报错——你得查 SHOW SLAVE STATUS\G 里的 Seconds_Behind_Master 正常,但 Master_SSL_Allowed: No 却可能被忽略。
执行前先确认主库已启用 SSL:SHOW VARIABLES LIKE 'have_ssl'; 返回 YES,且 ssl_ca 非空。
- 从库执行
CHANGE MASTER TO必须带全 SSL 相关参数:MASTER_SSL=1、MASTER_SSL_CA='/path/to/ca.pem'(必需)、MASTER_SSL_CERT='/path/to/client-cert.pem'(可选,但推荐)、MASTER_SSL_KEY='/path/to/client-key.pem'(同上) - 路径必须是**从库本地文件系统路径**,不是主库上的路径;且 MySQL 进程要有读权限(常见坑:SELinux 或 AppArmor 拦截)
- 如果只传
MASTER_SSL_CA,MySQL 会用它验证主库证书,但不会双向认证;如需双向(即主库也验从库证书),主库要配置require_secure_transport=ON+ssl_ca,且从库证书需由同一 CA 签发
SSL 加密后复制延迟是否明显升高
实测在千兆内网中,开启 SSL 后单线程复制延迟增加约 0.5–2ms/事件,对大多数 OLTP 场景无感;但在高并发大事务场景(比如批量导入、DDL 同步),CPU 成为瓶颈,SHOW PROCESSLIST 可能观察到 Slave_IO_Running: Yes 但 Seconds_Behind_Master 持续上涨。
- 优先用硬件加速:Linux 内核 ≥ 4.13 + OpenSSL ≥ 1.1.1 支持 AES-NI 指令集,MySQL 8.0.26+ 自动启用
- 避免在从库上同时开启
binlog和 SSL 复制——双重加密解密叠加,性能折损明显 - 若主库 CPU 已超 70%,别硬上 SSL;先压测,用
mysqlslap模拟复制流量对比openssl speed aes-128-cbc基线
常见报错与排查路径
ERROR 2026 (HY000): SSL connection error: protocol version mismatch 这类错误往往不是版本不兼容,而是证书链不完整或时间戳越界——MySQL 对证书有效期极其敏感,过期 1 秒就拒绝握手。
- 检查证书有效期:
openssl x509 -in ca.pem -text -noout | grep -A2 Validity - 确认系统时间同步:
timedatectl status,NTP 不稳会导致证书“未生效”或“已过期” -
Master_SSL_Allowed: No但CHANGE MASTER TO语句里写了 SSL 参数?立刻查SHOW SLAVE STATUS\G中的Master_SSL_Cipher是否为空,空值 = 实际未启用 - 抓包确认:
tcpdump -i any port 3306 -w mysql-rep.pcap,用 Wireshark 打开,过滤ssl.handshake,看有没有Encrypted Handshake Message
最麻烦的不是配不起来,而是配完了以为起了作用,其实一直 fallback 到非加密通道——务必以 Master_SSL_Cipher 非空为准绳,其他都是参考。


















