Я могу удаленно подключиться к базе данных MySQL в командной строке, но не с помощью сценария php

Ошибка: неустранимая ошибка: необработанное исключение "PDOException" с сообщением "SQLSTATE[28000] [1045] Доступ запрещен для пользователя" tech "@" localhost "(с использованием пароля: YES)" в.......

Я могу удаленно подключиться в командной строке, но не используя php, есть идеи, где искать?

Вот подробности:

Веб-сервер A: 1.1.1.1 содержит скрипт php:

$REGIS_DB_SERVER = "2.2.2.2"; //I've tried the IP as well as "pretendhostname.com"
$REGIS_DB_NAME = "db_name";
$REGIS_DB_USER = "tech"; // or any other user name
$REGIS_DB_PASSWORD = "password";

//connect to db
$db = new PDO("mysql:host = $REGIS_DB_SERVER; dbname=$REGIS_DB_NAME; charset=utf8", $REGIS_DB_USER, $REGIS_DB_PASSWORD);
print_r($db -> errorInfo());
echo "Connected<br>";

$sql = "CREATE TABLE Test(PersonID int,LastName varchar(255),FirstName varchar(255),Address varcha(255),City varchar(255))";
$result = $db->query($sql);

echo "$result <br>";

?>

Веб-сервер B: 2.2.2.2 содержит базу данных mySQL: работает Ubuntu 11.04

в /etc/mysql/my.cnf

# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#Commented out to allow remote connections to this database
#bind-address           = 216.70.81.240

я бегу mysql> select Host,User from user; и получить:

+-----------------------+------------------+
| Host                  | User             |
+-----------------------+------------------+
| %                     | root             |
| 127.0.0.1             | root             |
| 1.1.1.1               | tech             |
| localhost             | debian-sys-maint |
| localhost             | root             |
| localhost             | tech             |
+-----------------------+------------------+

Откройте порт 3306 в Ubuntu 12.04, чтобы разрешить подключения к mysql с любого ip, что подразумевает, что это неприемлемая проблема и для проверки соединения:

Я зашёл в Webserver A 1.1.1.1 и запустил:

mysql -u tech -p -h 2.2.2.2
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 200672
Server version: 5.1.63-0ubuntu0.11.04.1 (Ubuntu)

3 ответа

Решение

После обнаружения: PDO не может подключиться к удаленному серверу mysql, я понял, что если хост не "понят", соединение PDO по умолчанию будет host=localhost. Присмотревшись повнимательнее, я понял, что между заданием было 2 пробела. Я не осознавал пробелы, имеющие значение в синтаксисе.

В итоге это была синтаксическая ошибка:

Рабочий раствор (путем удаления пробелов):

$db = new PDO("mysql:host=$REGIS_DB_SERVER; dbname=$REGIS_DB_NAME; charset=utf8", $REGIS_DB_USER, $REGIS_DB_PASSWORD);

Вам нужно отключить SELinux, для запуска ниже CMD

setsebool httpd_can_network_connect = 1

Это определенно проблема с разрешениями / привилегиями базы данных. Попросите вашего dba/sysad GRANT privileges для вашего локального сервера для доступа к базе данных

Другие вопросы по тегам