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配置文件
- 编辑从库的
/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,需要统一)
- 调整证书文件权限,确保mysql用户能读取:
chown -R mysql:mysql /etc/mysql/certs/ chmod 600 /etc/mysql/certs/*.pem
- 重启从库MariaDB服务:
systemctl restart mariadb
- 重新启动复制:
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
相关产品推荐
相关产品推荐

