应安装compat-openssl10兼容包:先启用epel源(sudo dnf install epel-release),再执行sudo dnf install compat-openssl10,最后验证ls -l /usr/lib64/libssl.so.10存在。

因为 MySQL 二进制包在编译时绑定了特定版本的 OpenSSL ABI,而你的系统装的是不兼容的新版库(比如 MySQL 5.7 要 libssl.so.10,但 CentOS 8 只提供 libssl.so.1.1)。
ldd 显示 mysqld 找不到 libssl.so.10 或 libcrypto.so.10
这是最典型的症状,说明动态链接器在运行时无法解析依赖。不是文件丢了,而是名字或 ABI 对不上。
-
ldd $(which mysqld) | grep ssl会明确告诉你它在找哪个符号名(例如libssl.so.10) -
find /usr -name "libssl.so*"查你系统实际有啥(大概率是libssl.so.1.1或libssl.so.3) - 如果两者版本号不同(10 vs 1.1),直接软链接风险高——ABI 不兼容可能导致 mysqld 崩溃或加密行为异常
用 yum/dnf 安装 compat-openssl10 而不是 openssl-devel
很多用户误以为装 openssl-devel 就能解决,但它只提供头文件和 libssl.so.1.1,对老 MySQL 没用。
- RHEL/CentOS/AlmaLinux 8+:必须装
compat-openssl10(它真提供libssl.so.10和libcrypto.so.10) - 先确保 EPEL 源已启用:
sudo dnf install epel-release - 再执行:
sudo dnf install compat-openssl10 - 验证:
ls -l /usr/lib64/libssl.so.10应该存在且可读
源码编译时 CMake 报错 “Could NOT find OpenSSL”
这和二进制安装的缺失问题不同,是构建阶段找不到开发文件(头文件 + .so/.a),不是运行时缺库。
- 确认已装对应开发包:
openssl-devel(RHEL系)或libssl-dev(Debian系) - 删掉旧缓存:
rm -f CMakeCache.txt,否则 CMake 可能复用错误路径 - 显式指定 SSL 路径:
cmake . -DWITH_SSL=system(推荐)或-DWITH_SSL=/usr - 若系统有多个 OpenSSL 版本(如自编译装在
/opt/openssl),必须用-DWITH_SSL=/opt/openssl精确指向
真正容易被忽略的点是:compat-openssl10 和 openssl-devel 解决的是两类完全不同的问题——前者让老二进制跑起来,后者让新源码编译通过。混用或只装其一,都会卡住。











