Я обновил mysql (клиент + сервер + dev) из rpms, доступных на mysql.com.
rpm -i MySQL-server-5.5.14-1.linux2.6.x86_64.rpm
rpm -i MySQL-client-5.5.14-1.linux2.6.x86_64.rpm
rpm -i MySQL-devel-5.5.14-1.linux2.6.x86_64.rpm
теперь сценарий, который использовался для подключения к другому серверу, говорит:
perl: symbol lookup error: /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/auto/DBD/mysql/mysql.so: undefined symbol: mysql_init
сценарий:
use DBI;
$dsn="db";
$host="my.host.ip";
$user="anonymous";
$password="";
# Connect to the database.
$dbh= DBI->connect("DBI:mysql:host=$host;database=$dsn",$user, $password,{'RaiseError' => 1});
Итак, я переустановил DBI-1.616 и DBD-mysql-4.019 из исходников. для DBD-mysql, Сделать тест говорит:
$ make test
PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/00base....................ok 1/6
# Failed test 'use DBD::mysql;'
# in t/00base.t at line 21.
# Tried to use 'DBD::mysql'.
# Error: Can't load '/usr/local/package/DBD-mysql-4.019/blib/arch/auto/DBD/mysql/mysql.so' for module DBD::mysql: /usr/local/package/DBD-mysql-4.019/blib/arch/auto/DBD/mysql/mysql.so: undefined symbol: mysql_get_server_version at /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/DynaLoader.pm line 230.
# at (eval 6) line 2
# Compilation failed in require at (eval 6) line 2.
# BEGIN failed--compilation aborted at t/00base.t line 21.
t/00base....................NOK 2FAILED--Further testing stopped: Unable to load DBD::mysql
make: *** [test_dynamic] Error 9
Как я могу исправить эту проблему?
Спасибо !
Хорошо, у меня есть решение. Насколько я понимаю, используемый мной дистрибутив mysql статически связан. Поэтому, когда DB: mysql установлен, его нужно скомпилировать с этими статическими библиотеками:
mkdir /tmp/mysql-static
cp /usr/lib64/mysql/*.a /tmp/mysql-static
perl Makefile.PL --libs="-L/tmp/mysql-static -lmysqlclient"
make
make test
make install
rm -rf /tmp/mysql-static
Тот факт, что DBD-mysql теперь не может найти символ mysql_get_server_version
предполагает, что в более новой клиентской библиотеке MySQL, которую вы установили, вероятно, не хватает этой конкретной функции (или она была переименована, или что-то в этом роде). Учитывая, что вы не предоставляете информацию о том, до чего вы обновились или от чего вы обновились, трудно исследовать и дать вам полный ответ, переданный вам на тарелке, но я был бы склонен попробовать обновление DBD-mysql на Основание для того, что может быть задействовано изменение API, не имеющее обратной совместимости, и более новая версия DBD-mysql может лучше справиться с этим.