You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MariaDB主从复制SSL证书验证失败问题求助

MariaDB主从复制SSL证书验证失败问题排查与解决

问题场景

搭建MariaDB主从复制架构时,从服务器通过mysql -h my_host -u my_user_replica -p远程连接主服务器正常,执行status;显示SSL已启用,但启动复制后执行SHOW REPLICA STATUS\G;发现Slave_IO线程无法连接主服务器,报错:

SSL connection error: SSL certificate validation failure

核心原因

远程连接使用的是mysql客户端程序,它会读取配置文件中的[client]段SSL参数;而Slave_IO线程是从库mysqld进程的一部分,它不会读取[client]段配置,默认只会使用[mysqld]段的SSL设置,或者需要在CHANGE MASTER TO命令中显式指定SSL参数。两者的配置来源完全独立,因此出现客户端能连接但复制线程失败的情况。

解决方法

方法1:修改从库mysqld配置文件

  1. 编辑从库的/etc/mysql/mariadb.conf.d/50-server.cnf,在[mysqld]段添加以下SSL配置:
ssl = on
ssl-ca=/etc/mysql/certs/ca-cert.pem
ssl-cert=/etc/mysql/certs/client-cert.pem
ssl-key=/etc/mysql/certs/client-key.pem

注意:确保配置中的证书路径和文件名与实际传输到从库的文件一致(比如你之前[client]段写的ca.pem,如果实际是ca-cert.pem,需要统一)

  1. 调整证书文件权限,确保mysql用户能读取:
chown -R mysql:mysql /etc/mysql/certs/
chmod 600 /etc/mysql/certs/*.pem
  1. 重启从库MariaDB服务:
systemctl restart mariadb
  1. 重新启动复制:
START REPLICA;

方法2:在CHANGE MASTER TO命令中显式指定SSL参数

如果不想修改配置文件重启服务,可以在初始化复制时直接在命令中指定SSL参数:

CHANGE MASTER TO
MASTER_HOST='my_ip_server_address',
MASTER_USER='my_user_replica',
MASTER_PASSWORD='your_replica_password',
MASTER_LOG_FILE='mysql-bin.000001', -- 替换为主库当前的binlog文件名
MASTER_LOG_POS=154, -- 替换为主库当前的binlog位置
MASTER_SSL=1,
MASTER_SSL_CA='/etc/mysql/certs/ca-cert.pem',
MASTER_SSL_CERT='/etc/mysql/certs/client-cert.pem',
MASTER_SSL_KEY='/etc/mysql/certs/client-key.pem';

执行完成后启动复制:

START REPLICA;

额外排查点

  • 证书序列号冲突:你生成服务器证书和客户端证书时都用了-set_serial 01,这会导致证书序列号重复,可能触发验证失败。重新生成客户端证书时改为:
openssl x509 -sha1 -req -in client-req.pem -days 730 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 02 > client-cert.pem
  • 证书有效期:确认所有证书的有效期在正常范围内,避免过期导致验证失败。

内容的提问来源于stack exchange,提问作者Aodren BARY

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 05:54:19