Как получить доступ к mysql V8 в Windows V10 с помощью perl?

Я озадачен тем, что это так сложно.

(1) При активации состояния perl v5.26.3 я использую ppm.bat, а поиск mysql и DBD-mysql отсутствует. Согласно https://code.activestate.com/ppm/DBD-mysql/ я пытаюсь

ppm install DBD-mysql

Я получил:

ppm install failed: Can't find any package that provides DBD-mysql

(2) С тем же ppm.bat perl активного состояния я вижу mysqlPP, и это также не работает с MySQL V8:

perl -MDBI -e '$cat=$ENV{"MYSQLDATABASECATALOG"}; $svr=$ENV{"MYSQLHOST"}; $user=$ENV{"DATABASEUSER"}; $pass=$ENV{"DATABASECATALOGPASSWORD"}; my $dbh=DBI->connect("dbi:mysqlPP:database=$cat;host=$svr",$user,$pass,{ RaiseError => 1 }) or die "Cannot connect to $data_source: $DBI::errstr"; my $q=$ARGV[0]; my $sth=$dbh->prepare($q) or die "Cannot prepare statement: $DBI::errstr"; $sth->execute(); ... $sth->finish(); $dbh->disconnect;'  "<query goes here>"

DBI connect('database=sqlpocket;host=localhost','sqlpocket',...) failed: #08004Client does not support authentication protocol requested by server; consider upgrading MySQL client at C:/Perl64/site/lib/DBD/mysqlPP.pm line 116.

(3) Предполагается, что в Strawberry perl уже установлен DBD для mysql, и это тоже не работает:

perl -MDBI -e '$cat=$ENV{"MYSQLDATABASECATALOG"}; $svr=$ENV{"MYSQLHOST"}; $user=$ENV{"DATABASEUSER"}; $pass=$ENV{"DATABASECATALOGPASSWORD"}; my $dbh=DBI->connect("dbi:mysql:dbname=$cat",$user,$pass,{ RaiseError => 1 }) or die "Cannot connect to $data_source: $DBI::errstr"; my $q=$ARGV[0]; my $sth=$dbh->prepare($q) or die "Cannot prepare statement: $DBI::errstr"; $sth->execute(); ... $sth->finish(); $dbh->disconnect;'  "<sql query goes here>"

я получил

install_driver(mysql) failed: Can't load 'C:/perlstrawberry/5.30.0.1/perl/vendor/lib/auto/DBD/mysql/mysql.xs.dll' for module DBD::mysql: load_file:The specified module could not be found at C:/Users/2207458/Documents/AppBin/perlstrawberry/5.30.0.1/perl/lib/DynaLoader.pm line 193.
Perhaps a required shared library or dll isn't installed where expected.

Это странно, потому что «C:/perlstrawberry/5.30.0.1/perl/vendor/lib/auto/DBD/mysql/mysql.xs.dll» существует и доступен.

Обновление от 30 августа 2019 г.:

Извините, я пытался быть менее многословным и поступил небрежно: я удалил «Users/2207458/Documents/AppBin» из вышеуказанного имени файла (но я не был последователен). Итак, C:/perlstrawberry/5.30.0.1/perl/vendor/lib/auto/DBD/mysql/mysql.xs.dll на самом деле был c:/Users/2207458/Documents/AppBin/perlstrawberry/5.30.0.1/perl/vendor/ lib/авто/DBD/mysql/mysql.xs.dll.

PERL5LIB никогда не был определен. Это должно быть?


person user3477493    schedule 27.08.2019    source источник
comment
Насколько я понимаю, вы пробовали несколько установок Perl, что могло привести к ошибкам. Первое, что нужно проверить: действительно ли C:/perlstrawberry/5.30.0.1/perl/vendor/lib находится в @INC (PERL5LIB в среде)?   -  person Holli    schedule 29.08.2019
comment
Я позаботился о том, чтобы избежать такой возможности. Поскольку Strawberry perl дает мне возможность отказаться от установщика Windows в пользу zip-файла, я использовал zip-файл в своем пользовательском каталоге. ActiveState по умолчанию использует установщик Windows для установки в c:\perl64.   -  person user3477493    schedule 29.08.2019
comment
Еще более важно убедиться, что PERL5LIB указывает на правильные пути. Ты сделал это?   -  person Holli    schedule 29.08.2019
comment
Я делаю $SBPERLBIN/perl -e print qq(@INC), и пути выглядят правильно для клубничного perl. У меня есть .../perl/site/lib и .../perl/vender/lib и .../perl/lib. Я подтвердил, что все они существуют.   -  person user3477493    schedule 30.08.2019
comment
Я использую ту же команду для Perl ActiveState, а @INC содержит .../site/lib и .../lib, и эти каталоги существуют.   -  person user3477493    schedule 30.08.2019
comment
После поиска в Google мне все еще нужна помощь с PERL5LIB. Это переменная окружения? Я не определил его. Что это должно быть определено?   -  person user3477493    schedule 30.08.2019
comment
Да, он живет в среде, как и PATH, и указывает, где Perl ищет модули. Но я снова прочитал вопрос, и похоже, что вы звоните не тому Perl. Смотрите, он ищет модули в C:/perlstrawberry/5.30.0.1/..., но код, который это делает, находится в C:/Users/2207458/Documents/AppBin/perlstrawberry/5.30.0.1. Это кажется очень подозрительным.   -  person Holli    schedule 30.08.2019


Ответы (1)


Ответ для Windows (и, видимо, для Linux) находится здесь: Блог Лефреда

Я ввел эту команду и сбросил пароль:

alter user 'fred' identified   with 'mysql_native_password' by 'mysecurepasswd';

Это сработало для меня, используя ActiveState Perl v5.4 и mysql 8.0.17-winx64.

Очевидно, это нарушение безопасности, потому что мы используем старый плагин для сравнения паролей?

person user3477493    schedule 19.11.2019