Perl DBI/DBD MySQL User Authentication Error

Do you have a question? Post it now! No Registration Necessary.  Now with pictures!

Threaded View

Just trying to start learning a little MySQL (version 5.0) and wanted to
interact with my database via perl (version 5.6).  I have the latest DBI and
latest DBD-Mysql modules downloaded from the ActiveState website, and I
receive the following error message when I attempt to run my perl script.

Quoted text here. Click to load it
Cannot connect to server<<<

Google searches have helped me understand that MySql has changed their
password scheme for users starting at version 4.1.  And, I pulled the below
snippet that lists the suggested ways to resolve this problem.  If I want to
pursue the option described in bullet number 1 - what do I need to upgrade?
I've looked all over and that seems to be missing from all the discussions I
can find.  I'd appreciate any help here.

To solve this problem, you should use one of the following approaches:

  a.. Upgrade all client programs to use a 4.1.1 or newer client library.

  b.. When connecting to the server with a pre-4.1 client program, use an
account that still has a pre-4.1-style password.

  c.. Reset the password to pre-4.1 style for each user that needs to use a
pre-4.1 client program. This can be done using the SET PASSWORD statement
and the OLD_PASSWORD() function:

    -> 'some_user'@'some_host' = OLD_PASSWORD('newpwd');
Alternatively, use UPDATE and FLUSH PRIVILEGES:

mysql> UPDATE mysql.user SET Password = OLD_PASSWORD('newpwd')
    -> WHERE Host = 'some_host' AND User = 'some_user';
Substitute the password you want to use for "newpwd" in the preceding
examples. MySQL cannot tell you what the original password was, so you'll
need to pick a new one.

  d.. Tell the server to use the older password hashing algorithm:

    1.. Start mysqld with the --old-passwords option.

    2.. Assign an old-format password to each account that has had its
password updated to the longer 4.1 format. You can identify these accounts
with the following query:

mysql> SELECT Host, User, Password FROM mysql.user
    -> WHERE LENGTH(Password) > 16;
For each account record displayed by the query, use the Host and User values
and assign a password using the OLD_PASSWORD() function and either SET
PASSWORD or UPDATE, as described earlier.

Re: Perl DBI/DBD MySQL User Authentication Error

Quoted text here. Click to load it

With a) a new driver is required I guess since the DBI driver acts like a
client. I would recommend to give c) a try.

Quoted text here. Click to load it

John Bokma          Freelance software developer
                    Experienced Perl programmer:

Site Timeline