Я могу удаленно подключиться к базе данных 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
для вашего локального сервера для доступа к базе данных