一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

如何处理MySQL主从复制中由于SSL证书过期导致的中断?

时间:2026-08-12 09:56:49 编辑:袖梨 来源:一聚教程网

SSL证书过期是主从复制中断的常见原因,表现为IO线程卡在Connecting或报certificate verify failed;需用openssl检查ca.pem等证书的Not After时间,并确认路径、权限、subjectAltName及TLS重载等配置正确。

主从复制中断若由SSL证书过期引发,问题一定出在主库或从库的证书文件本身——不是配置写错,也不是网络不通,而是ca.pemserver-cert.pem已过期。MySQL不会明确报“证书过期”,只会卡在IO线程连接阶段,表现为Slave_IO_Running: Connecting或直接报SSL connection error: certificate verify failed

怎么确认是证书过期而不是其他原因

别改配置、别重试连接,先登主库(或从库,看哪边启用了SSL)查证书有效期:

  1. 运行openssl x509 -in /var/lib/mysql/ca.pem -text -noout | grep -E "(Not Before|Not After)",如果Not After早于2026-07-02(当前日期),就是它了
  2. 主库和从库各自可能用不同证书:主库看ssl_ca/ssl_cert指向的路径;从库看MASTER_SSL_CA/MASTER_SSL_CERT参数值
  3. MySQL 8.0.29+ 可执行SHOW VARIABLES LIKE 'ssl_cert_expire_date';,返回空或旧日期也说明证书失效
  4. 云数据库(RDS/AWS/腾讯云)不提供文件访问,直接去控制台「SSL设置」页查ValidTill字段

为什么换了新证书从库还是连不上主库

常见坑不在证书内容,而在加载环节被静默跳过:

  1. ssl-ca必须写在[mysqld]段(主库)或CHANGE MASTER TO语句里(从库),放[client]段无效
  2. 路径必须是绝对路径:/etc/mysql/ssl/ca.pem ✅,./ca.pem~/ssl/ca.pem
  3. 文件权限必须是600,属主必须是mysql用户;644或属主为root会导致MySQL启动时不加载,have_ssl显示DISABLED
  4. 新证书必须含subjectAltName:用localhost连?加DNS:localhost;用10.0.1.5?加IP:10.0.1.5;否则MySQL 8.0+直接忽略证书
  5. 自签时漏掉keyUsage=digitalSignature,keyEnciphermentextendedKeyUsage=serverAuth也会导致握手失败

更新证书后必须执行的关键操作

光换文件不够,MySQL进程和客户端上下文都得刷新:

  1. 主库执行ALTER INSTANCE RELOAD TLS;(MySQL 5.7.36+/8.0.16+),比重启mysqld更快;老版本只能service mysql restart
  2. 从库需重新执行CHANGE MASTER TO,显式传入新MASTER_SSL_CA路径,不能依赖旧配置缓存
  3. Java应用要重启JVM(truststore在启动时加载);Python若代码里硬编码了ssl_ca路径,得改代码或环境变量
  4. 命令行测试用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连接或直接失败。

热门栏目