install_driver (mysql) falhou: Não é possível localizar o DBD / mysql.pm em @INC

2

Tendo o seguinte erro ao tentar executar um script perl (para backup LVM). Vendo algum módulo DBD está faltando. Como eu iria resole isso?

[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

Quando tentei resolvê-lo instalando o perl-DBD-MYSQL, ele também gera algum conflito?

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
    
por Ahn 03.08.2012 / 23:07

2 respostas

1

Parece que você instalou pacotes RPM incompatíveis para o MySQL de uma fonte de terceiros. Provavelmente estes vieram do mysql.org. Infelizmente eles não estão bem integrados e causam problemas como este.

Atualmente, os pacotes RPM atuais mais integrados do MySQL que eu conheço são aqueles fornecidos no repositório remi . Usar esses pacotes evitará problemas como esse no futuro.

    
por 03.08.2012 / 23:16
0

Normalmente, não aconselho substituir as dependências do rpm. Eu aconselho você a tentar permanecer dentro dos limites do sistema de pacotes completamente gerenciado (ou seja, o rpm instala e controla tudo).

As pessoas que criam pacotes mysql (devem) sempre também constroem um pacote libs compartilhado separado que contenha "bibliotecas compartilhadas compatíveis". O que isto significa é que eles sabem que estão construindo uma versão do mysql que provavelmente não funcionará diretamente com seus binários fornecidos pela distribuição, então eles também constroem algumas bibliotecas compartilhadas mysql extras (geralmente mais antigas) que fornecerão as bibliotecas compartilhadas da versão correta Os binários fornecidos pela distribuição estão esperando. Encontre e faça o download do MySQL-shared-compat rpm que é a mesma versão que você instalou do site mysql.org, e depois instale-o. Teste seu roteiro, se funcionar, está feito.

Agora, como possivelmente quebrar seu sistema perl DBI:

Tendo dito tudo isso, estive exatamente nesta situação antes de experimentar outros pacotes do mysql além daqueles fornecidos pelo CentOS propriamente dito. yum não instalará este módulo perl devido a dependências não atendidas, mas essas dependências são geralmente apenas convenções de nomenclatura. Na maioria dos casos, a biblioteca compartilhada de que ela precisa está presente e utilizável. Você pode forçar o rpm a ignorar essas dependências baixando o perl DBD mysql rpm de um mirror e executando:

rpm -ivh --force perl-DBD-MySQL*.rpm

Em seguida, faça um teste rápido para ver se há algum problema com as bibliotecas compartilhadas executando os dois comandos a seguir:

# 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>

Se ambos funcionarem corretamente, é provável que o script seja executado corretamente. Se eles não funcionarem corretamente, você pode retornar seu sistema ao estado que estava apagando (manualmente) o rpm, praticamente da mesma maneira que você o instalou:

# May need to add --nodeps and/or --force
rpm -e perl-DBD-MySQL
    
por 04.08.2012 / 18:16