MySQL 5.7的主从复制架构中,当开启SSL加密传输时,若主从节点的SSL证书配置存在不一致的情况,就会触发1593报错,导致从库的IO线程无法正常连接主库,同步进程中断。这个问题需要从证书文件本身和MySQL配置两个维度进行排查修复。

1593报错的原因分析
MySQL 5.7主从复制的1593报错全称为ER_SLAVE_FATAL_ERROR,在开启SSL的场景下,常见触发原因有以下几种:
- 主从节点使用的SSL证书不是同一套,比如主库用了A证书,从库用了B证书
- 从库配置的证书路径和实际存放证书的路径不匹配
- SSL证书已经过期,或者证书的颁发对象、域名和当前节点不匹配
- 主库开启了SSL强制验证,但从库的SSL相关配置参数没有正确设置
排查1593报错的具体步骤
1. 查看从库复制状态
首先登录从库MySQL,执行以下命令查看复制报错详情:
SHOW SLAVE STATUSG
在输出结果中找到Last_IO_Error字段,确认报错信息是否包含SSL相关的提示,比如证书验证失败、找不到证书文件等内容。
2. 检查主从SSL配置参数
分别登录主库和从库,执行以下命令查看SSL相关配置:
SHOW VARIABLES LIKE '%ssl%';
需要重点对比的参数包括ssl_ca、ssl_cert、ssl_key,确认两个节点的这三个参数指向的证书文件是否同源。
3. 验证证书文件一致性
到服务器上查看主从节点的证书文件,对比文件的MD5值是否一致:
# 主库执行 md5sum /path/to/ca.pem /path/to/server-cert.pem /path/to/server-key.pem # 从库执行 md5sum /path/to/ca.pem /path/to/server-cert.pem /path/to/server-key.pem
如果MD5值不一致,说明证书文件不同步,需要重新同步证书。
同步SSL证书并修复配置的步骤
1. 生成或获取统一的SSL证书
如果还没有统一的SSL证书,可以在主库节点生成一套CA证书和服务器证书:
# 生成CA私钥 openssl genrsa 2048 > ca-key.pem # 生成CA证书 openssl req -new -x509 -nodes -days 3650 -key ca-key.pem -out ca.pem -subj "/CN=MySQL_CA" # 生成服务器私钥 openssl req -newkey rsa:2048 -days 3650 -nodes -keyout server-key.pem -out server-req.pem -subj "/CN=MySQL_Server" # 用CA证书签名服务器证书 openssl x509 -req -in server-req.pem -days 3650 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem
2. 同步证书到从库节点
将主库生成的ca.pem、server-cert.pem、server-key.pem三个文件拷贝到从库的指定目录,比如/etc/mysql/ssl/,并修改文件权限避免权限过高导致MySQL无法读取:
chmod 644 /etc/mysql/ssl/ca.pem /etc/mysql/ssl/server-cert.pem chmod 600 /etc/mysql/ssl/server-key.pem chown mysql:mysql /etc/mysql/ssl/*
3. 修改从库MySQL配置
编辑从库的MySQL配置文件my.cnf,添加或修改SSL相关配置:
[mysqld] ssl_ca=/etc/mysql/ssl/ca.pem ssl_cert=/etc/mysql/ssl/server-cert.pem ssl_key=/etc/mysql/ssl/server-key.pem
修改完成后重启从库的MySQL服务使配置生效。
4. 重新配置从库复制连接
登录从库MySQL,先停止复制进程,然后重新配置主库连接信息,指定使用SSL加密:
STOP SLAVE; CHANGE MASTER TO MASTER_HOST='主库IP', MASTER_USER='复制账号', MASTER_PASSWORD='复制账号密码', MASTER_LOG_FILE='主库当前binlog文件', MASTER_LOG_POS=主库当前binlog位置, MASTER_SSL=1, MASTER_SSL_CA='/etc/mysql/ssl/ca.pem', MASTER_SSL_CERT='/etc/mysql/ssl/server-cert.pem', MASTER_SSL_KEY='/etc/mysql/ssl/server-key.pem'; START SLAVE;
验证修复结果
重新启动从库复制后,再次执行SHOW SLAVE STATUSG命令,查看Slave_IO_Running和Slave_SQL_Running两个字段是否都为Yes,同时Last_IO_Error字段为空,说明1593报错已经修复,主从复制恢复正常运行。
也可以在主库执行写入操作,观察从库是否能正常同步数据,进一步确认SSL加密传输和复制功能都正常。