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参数值SHOW VARIABLES LIKE 'ssl_cert_expire_date';,返回空或旧日期也说明证书失效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路径,不能依赖旧配置缓存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连接或直接失败。