You are right that this area is a bit more complicated, but the problems seem to be related to C mysql lib, not DBD :: mysql.
First pass the parameter as a driver option, and not as part of the DSN main line:
my @dsn = ("DBI:mysql:database=$db;host=$dbhost;mysql_ssl=$dbssl",
$user,
$pissword,
{ mysql_skip_secure_auth => 1 });
, .cnf .
.
my @dsn = ("DBI:mysql:"database=$db;host=$dbhost;mysql_ssl=$dbssl;"
. "mysql_read_default_file=$absolute_path.cnf",
undef,
undef,
{ mysql_skip_secure_auth => 1 });
, secure_auth, C lib , .
, , ()
secure_auth = FALSE
skip_secure_auth
( , , mysql mysqldump, -).
C lib , secure_auth = FALSE secure_auth = TRUE, , , , skip_secure_auth , .
http://dev.mysql.com/doc/refman/5.6/en/mysql-options.html secure_auth , , () .
"", , v4.0, . , C, .cnf , .
, , skip_secure_auth, secure_auth [client] secure_auth = FALSE , , [mysql], [mysqldump] .., .