尝试执行 perl 脚本(用于 LVM 备份)时出现以下错误。发现缺少某些 DBD 模块。我该如何解决它?
[root@localhost mylvmbackup-0.13]# ./mylvmbackup
20120804 02:26:06 Info: Connecting to database...
Uncaught exception from user code:
install_driver(mysql) failed: Can't locate DBD/mysql.pm in @INC (@INC contains: /usr/share/mylvmbackup /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/5.8.8 .) at (eval 17) line 3.
Perhaps the DBD::mysql perl module hasn't been fully installed,
or perhaps the capitalisation of 'mysql' isn't right.
Available drivers: DBM, ExampleP, File, Proxy, Sponge.
at ./mylvmbackup line 202
at /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi/DBI.pm line 756
DBI::install_driver('DBI', 'mysql') called at /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi/DBI.pm line 600
DBI::connect('DBI', 'DBI:mysql:database=mysql;mysql_read_default_group=client', 'root', '') called at ./mylvmbackup line 202
当我尝试通过安装 perl-DBD-MYSQL 来解决这个问题时,它也会产生一些冲突?
yum install perl-DBD-MySQL
--> Finished Dependency Resolution
mysql-5.0.95-1.el5_7.1.x86_64 from updates has depsolving problems
--> mysql conflicts with MySQL-server-community
Error: mysql conflicts with MySQL-server-community
答案1
看来您从第三方源安装了与 MySQL 不兼容的 RPM 包。这些包可能来自 mysql.org。不幸的是,它们集成得不太好,导致出现这样的问题。
目前我所知道的最好的集成 MySQL RPM 包是remi 存储库。使用这些包将可以避免将来出现类似的问题。
答案2
通常我不建议覆盖 rpm 依赖项。我建议您尝试留在完全托管的软件包系统范围内(即 rpm 安装并控制一切)。
构建 mysql 软件包的人(应该)始终还构建一个单独的共享库软件包,其中包含“兼容的共享库”。这意味着他们知道他们正在构建的 mysql 版本可能无法直接与您的发行版提供的二进制文件一起使用,因此他们还构建了一些额外的(通常是较旧的)mysql 共享库,这些库将提供您的发行版提供的二进制文件所期望的正确版本的共享库。从 mysql.org 站点查找并下载与您安装的版本相同的 MySQL-shared-compat rpm,然后安装它。测试您的脚本,如果它有效,您就大功告成了。
现在,如何可能破坏你的 perl DBI 系统:
话虽如此,我以前也遇到过这种情况,当时我正在尝试使用 CentOS 本身提供的 mysql 包以外的其他包。由于依赖项未得到满足,yum 不会安装此 perl 模块,但这些依赖项通常只是命名约定。在大多数情况下,它所需的实际共享库是存在且可用的。您可以通过从镜像下载 perl DBD mysql rpm 并运行以下命令来强制 rpm 忽略这些依赖项:
rpm -ivh --force perl-DBD-MySQL*.rpm
然后通过运行以下两个命令进行快速测试,查看共享库是否存在问题:
# Should print out nothing, nor any errors
CentOS58[root@stats ~]# perl -e 'use DBD::mysql'
CentOS58[root@stats ~]#
CentOS58[root@stats ~]# ldd /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi/auto/DBD/mysql/mysql.so
libmysqlclient.so.15 => /usr/lib64/mysql/libmysqlclient.so.15 (0x00002aaaaacd6000)
<snip>
如果上述两个都正常工作,那么您的脚本很可能运行良好。如果它们不能正常工作,您可以通过删除(手动)rpm 将系统恢复到原来的状态,其方式几乎与安装方式相同:
# May need to add --nodeps and/or --force
rpm -e perl-DBD-MySQL