现在的情况
我想在运行主数据库的 VPS(Centos 5)上安装 XtraBackup。在 rpm 安装过程中,它告诉我缺少一个名为 的依赖项perl(DBD::mysql)
。
当我尝试yum install
这种依赖关系时,它告诉我:
Error: Missing Dependency: libmysqlclient.so.15(libmysqlclient_15)(64bit) is needed by package perl-DBD-MySQL-3.0007-2.el5.x86_64 (base) Error: Missing Dependency: libmysqlclient.so.15()(64bit) is needed by package perl-DBD-MySQL-3.0007-2.el5.x86_64 (base)
我检查时发现/usr/lib/mysql
有几个不存在的符号链接,名为 libmysqlclient.so.15。唯一有效的符号链接是libmysqlclient.so
和libmysqlclient_r.so
,它们链接到的/usr/lib64/libmysqlclient.so
是指向的符号链接libmysqlclient.so.18
。
看来我只安装了 18 版本。
先前的情况
我还在我的另一台 VPS(Centos 6)上安装了 XtraBackup。那里发生了完全相同的错误。最后通过下载 mysql 的共享兼容 5.1 库(MySQL-shared-compat-5.1)解决了这个问题,该库涵盖了不同版本的库,我相信是 12 到 16。
之后,我可以顺利安装MySQL-shared-compat-5.1
。XtraBackup
唯一剩下的问题是 PHP 使用该libmysqlclient.so.18
文件,因此 httpd 服务将无法启动。我使用(我认为)肮脏的修复程序修复了这个问题...只需创建一个符号链接libmysqlclient.so.18 -> libmysqlclient.so.16
。之后,apache 加载没有问题。但仍然感觉不对劲。
我对这些东西大部分都不太有经验,所以我希望有人能向我解释正确的解决方法,以便让 Apache 和 XtraBackup 都能使用它们的 libmysqlclient 版本运行(如果可能的话)。
答案1
MySQL 客户端库与构建它们的 MySQL 版本相关。Perl 的 DBD::mysql 库是根据构建时可用的 MySQL 客户端库进行编译的。当 Redhat(以及 CentOS)构建 RPM 时,它们会从构建时提供的源代码构建它们。
CentOS 5 默认安装的 MySQL 是 MySQL 5.0.95,它提供了 libmysqlclient.so.15。看来您的系统安装了较新版本的 MySQL。如果您使用的是 Percona 的 XtraBackup,则可能正在运行 Percona Server(Percona Server 是 Percona 推出的 MySQL 更新版本)。
您有以下几种选择:
如果 Percona Server 是通过 RPM 安装的:
从 Percona 的存储库安装 Percona-Server-shared-compat RPM如果通过 RPM 安装了较新版本的 MySQL:
尝试找到与在 CentOS 6 下所做的类似的兼容库。如果手动安装了较新版本的 MySQL:
在具有 libmysqlclient.so.18 文件和相关开发头文件的系统上重新编译 perl-DBD-mysql 源 RPM,然后安装生成的二进制文件。CentOS 提供从源 RPM 重建的说明。或者,您也可以从源代码下载并安装 Percona XtraBackup。
CentOS(和 RHEL)希望您安装的所有软件都使用 RPM 和 yum 安装。如果您不这样做,则可能会面临无法再使用 RPM 安装链接到自定义安装的软件的风险。听起来这里的情况就是这样,因为您不仅没有合适的 perl-DBD-mysql 版本,而且您还将 PHP 链接到较新版本的 MySQL。