尝试执行perl脚本时遇到以下错误(对于LVM备份)。 看到一些DBD模块丢失。 我将如何parsing它?
[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
看起来你已经从第三方来源为MySQL安装了不兼容的RPM软件包。 可能这些来自mysql.org。 不幸的是,他们没有很好地整合,并导致这样的问题。
目前我所知道的最好的集成的当前MySQL RPM软件包是在remi版本库中提供的。 使用这些软件包可以防止将来出现这样的问题。
通常我不build议覆盖rpm依赖项。 我build议你试图保持完全托pipe的包系统(即安装和控制一切)的范围。
构buildmysql包(应该)的人总是也会构build一个单独的包含“兼容共享库”的共享库包。 这意味着他们知道他们正在构build一个可能不会直接与分发提供的二进制文件一起工作的mysql版本,所以他们还会构build一些额外的(通常是较老的)mysql共享库,这些库会提供正确的版本共享库发行提供的二进制文件正在期待。 查找并下载与您从mysql.org网站安装的版本相同的MySQL-shared-compat rpm,然后进行安装。 testing你的脚本,如果有效的话,你就完成了。
现在,如何可能破坏你的DBI系统:
说完这一切之后,在我尝试其他mysql包(除了CentOS提供的那些包之外)之前,我一直处于这种确切的状况。 yum不会安装这个perl模块,由于未满足的依赖,但这些依赖通常只是命名约定。 在大多数情况下,它需要的实际共享库是存在和可用的。 您可以通过从镜像下载perl DBD mysql rpm来强制rpm忽略这些依赖关系,然后运行:
rpm -ivh --force perl-DBD-MySQL*.rpm
然后执行快速testing,通过运行以下两个命令来查看共享库是否有问题:
# 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