Не удается подключиться к MySQL с локального хоста с помощью сценария Perl - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть скрипт perl на веб-сервере, который подключается к базе данных на удаленном сервере, используя этот код:

   my $dbusername='myname';
   my $dbpassword='mypassword';
   my $dbdatabasename='mydatabase';
   my $driver = "mysql"; 

   my $host='x.x.x.x'; # the actual ip of the mysql server
   my $port='1010'; # the port it listens on
   my $dsn = "DBI:$driver:database=$dbdatabasename;host=$host;port=$port";
   $dbh = DBI->connect($dsn,$dbusername,$dbpassword, {
           PrintError => 0, RaiseError => 1, });

Это все отлично работает. Теперь я хочу переместить скрипт Perl на тот же компьютер, что и база данных. Так что я заменил $ host ip выше на мой $ host = 'localhost';

Я также создал нового пользователя (с именем «webuser») в базе данных, который соответствует хостам «localhost» вместо «%», и я использую имя пользователя и пароль для этого соединения в моем новом скрипте. (Я могу подключиться к базе данных, используя этого пользователя из MySQL Workbench).

Но когда я запускаю scrpt, я всегда получаю "Доступ запрещен для пользователя 'webuser' @ 'localhost'"

Что еще мне нужно сделать?

Это похоже на проблему с разрешениями (спасибо ikegami), это та же ошибка, которую я ожидал бы, если бы пароль был неверным. Но я тщательно проверил это, и я могу успешно подключиться из командной строки, используя точно такие же параметры: mysql -u webuser -pMyPassword -h localhost -P 1010 MyDBname

Может ли быть небольшая разница между программой mysql.exe и драйвером mysql, используемым модулем DBI?

позже: Одно различие, которое я обнаружил, заключается в том, что при подключении из командной строки я должен указать номер порта, который прослушивает сервер. Если это не так, я получаю сообщение об ошибке «Не удается подключиться к MySQL Server на локальном хосте».

Но в программе Perl, которую я использую для номера порта, или, если я вообще не указываю порт, я получаю «Доступ запрещен для пользователя« webuser »@« localhost »». Фактически, я получаю то же самое, если указываю несуществующее имя базы данных.

Интересно, отказывает ли сервер sql в доступе, потому что запрос исходит от программы в области веб-сервера (public_html). Это возможно?

...