Hi Bruce,
only some hints. It sounds to me like a shared object mess which may be possible after upgrading.
If DBD::mysql ist installed via CentOS repository than you should find the package
wit a
rpm -q -a | grep -i mysql
When you've found that package, you can do a
rpm -q -l perl-DBD-MySQL where perl-DBD-MySQL is the found package above.
Therein you should find the file which is the shared object to bind the mysql client
library, e.g. /usr/lib64/perl5/vendor_perl/auto/DBD/mysql/mysql.so
Now you can have a look into that shared object to see which names have to
be resolved:
objdump -T /usr/lib64/perl5/vendor_perl/auto/DBD/mysql/mysql.so
In the output you can see external references to other shared libraries, especially
these ones which are the building blocks of the mysql/mariadb driver.
Then you have to look into your filesystem whether there are different
incarnations of these so-Files.
But on the distance without having CentOS8 under my fingers just a guess.
Happy digging
Andreas
P.S.: Contraprove would be to install DBD::mysql into a local directory.
cpanm (App::cpanminus) makes it simple. Put "use lib 'thatdirectory';" in front of a testscript
and let DBI grab that version of the driver binding for you.
Von: Bruce Johnson <joh...@Pharmacy.Arizona.EDU>
Gesendet: Dienstag, 2. Juni 2020 19:56
An: dbi users <dbi-...@perl.org>
Betreff: frustrating error DBD::mysql CentOS8
I’ve copied a working script from one server to another (upgrading a web application server from Cnetos6 to centos8) and I keep getting the error:
[Tue Jun 02 10:29:32.289698 2020] [:error] [pid 3729:tid 140210163652352] DBD::mysql initialisation failed: Can't locate object method "driver" via package "DBD::mysql" at /usr/lib64/perl5/vendor_perl/DBI.pm line 827.\n\nPerhaps the capitalisation of DBD 'mysql' isn't right. at /home/allwebfiles/perl/badges/choose.pl line 54.\n
Mysql (actually MariaDB) is installed and working. both DBI and DBD::MySQL were installed via the CentOS repositories. (perl-DBI perl-DBD-MySQL packages)
DBI itself is functional since other DB methods are working Oracle, for example.
This is the (working on the other server!) code to establish the database handle:
my $dsn = "DBI:mysql:database=$dbname;host=$dbhost;port=$dbport" or die $DBI::errstr;
my $dbh = DBI->connect($dsn, $dbuser, $dbpass,{'RaiseError' => 1});
Pretty standard stuff. I'm not sure why this is happening. It is NOT the error being reported...
--
Bruce Johnson
University of Arizona
College of Pharmacy
Information Technology Group
Institutions do not have opinions, merely customs