Re: DBD::mysql failing to 'make test'



Ron Savage wrote:



Set DBI_DSN=dbi:mysql:test
and DBI_USER='xxx'
and DBI_PASS='yyy'
and export them if you're using that kind on shell.
Rerun make test and let us know.



I took your suggestion, but it still took many hours last night and today to get DBD::mysql installed. Here's how I ultimately did it.

But first, a tangent. Since my OP was not immediately posted to the list, I had several hours to think of possible explanations of the problem. I decided that, as a backup strategy for learning MySQL, I would install MySQL on my iBook. So I went to http://dev.mysql.com/downloads/mysql/5.0.html and downloaded a binary of MySQL v5.0 for Mac OS X 10.3. It installed like butter. I had previously installed DBI and upgraded it to v1.50. So I then decided to try to get DBD::mysql installed on the iBook. Again, it went in like butter.

Given that, I began to wonder whether the problem lay in the fact that I was using an older version of MySQL on my Linux server: v4.1, the default version for Debian stable. I decided to explore that hypothesis. So this morning I removed the Debian MySQL and DBI packages from my server (or, to be precise, as many of the packages as 'apt-get remove' could locate; some it claimed it could not locate). I then downloaded and installed a non-RPM binary of MySQL 5.0 for Linux from a MySQL mirror.

At that point, of course, I had to spend an hour configuring my new MySQL server installation. For the record, I consulted the following pages in the MySQL docs:

http://dev.mysql.com/doc/refman/5.0/en/linux-rpm.html
# 2.4 Installing MySQL on Linux

http://dev.mysql.com/doc/refman/5.0/en/unix-post-installation.html
# 2.9.2. Unix Post-Installation Procedures

http://dev.mysql.com/doc/refman/5.0/en/option-files.html
# 4.3.2. Using Option Files

http://dev.mysql.com/doc/refman/5.0/en/access-denied.html
# 5.8.8. Causes of Access denied Errors

http://dev.mysql.com/doc/refman/5.0/en/can-not-connect-to-server.html
# A.2.2. Can't connect to [local] MySQL server

http://dev.mysql.com/doc/refman/5.0/en/problems-with-mysql-sock.html
# A.4.5. How to Protect or Change the MySQL Unix Socket File

In the configuration process, I deleted the anonymous user accounts, created MySQL accounts for 'root' and myself, and -- most importantly -- created .my.cnf files for both root and myself. I don't think the DBD::mysql installation would ultimately have succeeded without them.

So, nearly a day later, I was ready to return to ~/.cpan/build/DBD-mysql-3.0002 and try anew. I tried 'perl Makefile.PL' and 'make', then held my breath and called 'make test'.

And the test failed again. But with a new error:

> PERL_DL_NONLAZY=1 /usr/local/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
> t/00base.............ok
> t/10dsnlist..........DBI connect('test','',...) failed: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) at t/10dsnlist.t line 45
> Cannot connect: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
> Either your server is not up and running or you have no
> permissions for acessing the DSN DBI:mysql:test.
> This test requires a running server and write permissions.
> Please make sure your server is running and you have
> permissions, then retry.
> t/10dsnlist..........dubious
> Test returned status 10 (wstat 2560, 0xa00)
> DIED. FAILED tests 1-9

I had seen a posting about the "Can't connect ... through socket" error on Google somewhere. From the doc pages cited above, I learned that I could call:

# netstat -ln | grep mysql

to determine the location of the mysql.sock file. In the distribution I got from MySQL, it turns out that the socket is found at /tmp/mysql.sock, not at /var/run/mysqld/mysqld.sock . In a moment of inspiration, I decided to create a /var/run/mysqld directory and create a link therein to /tmp/mysql.sock.

# cd /var/run
# mkdir mysqld
# cd mysqld
# ln -s /tmp/mysql.sock mysqld.sock

I then returned the .cpan/build/DBD-mysql-3.0002 directory and tried 'make test' again. Still no luck, but it was at this point that I began to try to implement your suggestions.

# DBI_USER=root
# DBI_PASS=secret
# DBI_DSN=dbi:mysql:test

Tried 'make test' again. Again, it failed. To cut to the chase, I consulted the DBD::mysql documentation (http://search.cpan.org/dist/DBD-mysql/lib/DBD/mysql/INSTALL.pod#Configuration) and realized that what I had to do was to provide $DBI_USER and $DBI_PASS as command-line arguments to 'perl Makefile.PL'. Then, and only then, did I get the desired results:

# perl Makefile.PL --testuser=$DBI_USER \
> --testpassword=$DBI_PASS
I will use the following settings for compiling and testing:

cflags (mysql_config ) = -I/usr/include/mysql -DBIG_JOINS=1
embedded (mysql_config ) =
libs (mysql_config ) = -L/usr/lib -lmysqlclient -lz -lcrypt -lnsl -lm
mysql_config (guessed ) = mysql_config
nocatchstderr (default ) = 0
nofoundrows (default ) = 0
ssl (guessed ) = 0
testdb (default ) = test
testhost (default ) =
testpassword (User's choice) = secret
testsocket (default ) =
testuser (User's choice) = root

To change these settings, see 'perl Makefile.PL --help' and
'perldoc INSTALL'.

Using DBI 1.50 (for perl 5.008007 on i686-linux) installed in /usr/local/lib/perl5/site_perl/5.8.7/i686-linux/auto/DBI/
Writing Makefile for DBD::mysql

I then called 'make' and, holding my breath even tighter, 'make test'. At last:

# make test
PERL_DL_NONLAZY=1 /usr/local/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/00base.............ok
t/10dsnlist..........ok
t/20createdrop.......ok
t/30insertfetch......ok
t/35limit............ok
t/40bindparam........ok
t/40blobs............ok
t/40listfields.......ok
t/40nulls............ok
t/40numrows..........ok
t/41blobs_prepare....ok
t/50chopblanks.......ok
t/50commit...........ok
t/60leaks............skipped
all skipped: $ENV{SLOW_TESTS} is not set or Proc::ProcessTable not installed
t/ak-dbd.............ok
t/akmisc.............ok
t/dbdadmin...........ok
t/insertid...........ok
t/mysql..............ok
t/mysql2.............ok
All tests successful, 1 test skipped.
Files=20, Tests=903, 29 wallclock secs ( 3.57 cusr + 1.68 csys = 5.25 CPU)

(Huge exhale.) This was the most difficult Perl module installation I've ever faced. Thanks for your assistance.

jimk
.


Quantcast