复制链路加密是什么
跨公网或跨安全域的复制必须在传输层加密,否则账号口令与全部行数据都以明文在网络里流动。MySQL 8.0 在 CHANGE REPLICATION SOURCE TO 里提供 SOURCE_SSL 系列参数:只写 SOURCE_SSL=1 可以开启加密但不校验服务端身份,加上 CA 文件与 SOURCE_SSL_VERIFY_SERVER_CERT=1 才能防中间人。8.0 默认认证插件 caching_sha2_password 还要求安全传输,加密链路同时解决了认证握手的兼容问题。
基本信息
| 基础开关 | SOURCE_SSL=1,启用加密但不校验证书 |
|---|---|
| CA 校验 | SOURCE_SSL_CA='/路径/ca.pem' |
| 身份校验 | SOURCE_SSL_VERIFY_SERVER_CERT=1,校验证书主机名是否匹配 |
| 客户端证书 | SOURCE_SSL_CERT / SOURCE_SSL_KEY 用于双向认证 |
| 检查方式 | SHOW REPLICA STATUS 无 SSL 相关错误;连接上的 Ssl_cipher 非空 |
典型使用场景
- 跨公网复制:两地机房经专线或加密隧道互联时,链路层再叠加 TLS
- 跨安全域同步:生产与测试网络有防火墙隔离,认证与数据都需加密
- 合规要求:审计要求明确禁止明文传输数据库流量
- 证书轮换准备:把证书有效期纳入统一监控,避免过期导致复制中断
- 云上实例互联:云厂商要求加密连接时按说明配置 CA 与校验参数
启用 TLS 复制
启用 TLS 复制
-- 最小可用:加密但不校验服务端身份
CHANGE REPLICATION SOURCE TO
SOURCE_HOST='10.0.0.10', SOURCE_USER='repl', SOURCE_PASSWORD='***',
SOURCE_SSL=1,
SOURCE_AUTO_POSITION=1;
-- 推荐做法:提供 CA 并开启服务端证书校验
CHANGE REPLICATION SOURCE TO
SOURCE_HOST='10.0.0.10', SOURCE_USER='repl', SOURCE_PASSWORD='***',
SOURCE_SSL=1,
SOURCE_SSL_CA='/etc/mysql/certs/ca.pem',
SOURCE_SSL_VERIFY_SERVER_CERT=1,
SOURCE_AUTO_POSITION=1;
-- 检查复制状态与是否报出 TLS 相关错误
SHOW REPLICA STATUS\G配置强度对照
| 配置 | 加密 | 防中间人 | 适用场景 |
|---|---|---|---|
| 不配 SOURCE_SSL | 无 | 无 | 仅限完全可信的内网 |
| SOURCE_SSL=1 | 有 | 无 | 临时过渡,证书体系未就绪时 |
| + SOURCE_SSL_CA | 有 | 校验 CA 签发链 | 自建 CA 的内部环境 |
| + VERIFY_SERVER_CERT=1 | 有 | 校验证书主机名 | 跨公网、跨安全域的标准做法 |
8.0 默认的 caching_sha2_password 首次认证需要安全通道(RSA 密钥交换或 TLS),复制链路启用 TLS 后这类认证报错通常一并消失。
证书过期会让复制戛然而止,且在证书有效期临近时往往先表现为间歇性失败。把 CA 与服务端证书的到期时间纳入监控,并预留轮换演练时间。