最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
如何处理MySQL主从复制中由于SSL证书过期导致的中断?
时间:2026-08-12 09:56:49 编辑:袖梨 来源:一聚教程网
SSL证书过期是主从复制中断的常见原因,表现为IO线程卡在Connecting或报certificate verify failed;需用openssl检查ca.pem等证书的Not After时间,并确认路径、权限、subjectAltName及TLS重载等配置正确。
主从复制中断若由SSL证书过期引发,问题一定出在主库或从库的证书文件本身——不是配置写错,也不是网络不通,而是ca.pem或server-cert.pem已过期。MySQL不会明确报“证书过期”,只会卡在IO线程连接阶段,表现为Slave_IO_Running: Connecting或直接报SSL connection error: certificate verify failed。
怎么确认是证书过期而不是其他原因
别改配置、别重试连接,先登主库(或从库,看哪边启用了SSL)查证书有效期:
- 运行
openssl x509 -in /var/lib/mysql/ca.pem -text -noout | grep -E "(Not Before|Not After)",如果Not After早于2026-07-02(当前日期),就是它了 - 主库和从库各自可能用不同证书:主库看
ssl_ca/ssl_cert指向的路径;从库看MASTER_SSL_CA/MASTER_SSL_CERT参数值 - MySQL 8.0.29+ 可执行
SHOW VARIABLES LIKE 'ssl_cert_expire_date';,返回空或旧日期也说明证书失效 - 云数据库(RDS/AWS/腾讯云)不提供文件访问,直接去控制台「SSL设置」页查
ValidTill字段
为什么换了新证书从库还是连不上主库
常见坑不在证书内容,而在加载环节被静默跳过:
-
ssl-ca必须写在[mysqld]段(主库)或CHANGE MASTER TO语句里(从库),放[client]段无效 - 路径必须是绝对路径:
/etc/mysql/ssl/ca.pem✅,./ca.pem或~/ssl/ca.pem❌ - 文件权限必须是
600,属主必须是mysql用户;644或属主为root会导致MySQL启动时不加载,have_ssl显示DISABLED - 新证书必须含
subjectAltName:用localhost连?加DNS:localhost;用10.0.1.5?加IP:10.0.1.5;否则MySQL 8.0+直接忽略证书 - 自签时漏掉
keyUsage=digitalSignature,keyEncipherment和extendedKeyUsage=serverAuth也会导致握手失败
更新证书后必须执行的关键操作
光换文件不够,MySQL进程和客户端上下文都得刷新:
- 主库执行
ALTER INSTANCE RELOAD TLS;(MySQL 5.7.36+/8.0.16+),比重启mysqld更快;老版本只能service mysql restart - 从库需重新执行
CHANGE MASTER TO,显式传入新MASTER_SSL_CA路径,不能依赖旧配置缓存 - Java应用要重启JVM(truststore在启动时加载);Python若代码里硬编码了
ssl_ca路径,得改代码或环境变量 - 命令行测试用
mysql --ssl-mode=VERIFY_CA --ssl-ca=/path/to/new-ca.pem -u repl -h master_ip -p,避免走默认系统CA路径
最容易被忽略的是:证书文件权限和subjectAltName覆盖范围。哪怕有效期再长,只要权限不对或缺IP:127.0.0.1这一项,MySQL就当它不存在——日志里连警告都不打,只默默降级为非SSL连接或直接失败。