У меня есть 2 сервера с digitalocean - веб-сервер (nginx) и сервер базы данных (mysql) - и я не могу получить подключение из Интернета к серверу mysql.
Из того, что я читал в других сообщениях SO по этой теме, ошибка, которую я получаю, является «хорошей», поскольку она показывает, что mysql пытается аутентифицировать соединение, и проблема, скорее всего, связана с пользователем mysql, в частности связанный с хостом или вариантом предоставления.
Вот mysql.user:
mysql> SELECT User,Host FROM mysql.user;
+-------+--------------+------------+
| User | Host | Grant_priv |
+-------+--------------+------------+
| root | localhost | Y |
| root | dev-db01 | Y |
| root | 127.0.0.1 | Y |
| root | ::1 | Y |
| | localhost | N |
| | dev-db01 | N |
| admin | % | N |
| admin | localhost | N |
| admin | xx.xxx.x.xxx | N |
+-------+--------------+------------+
В некоторых руководствах указано, что удаленному пользователю нужен только ввод удаленного хоста, в других - подстановочный знак «%», а в других - «%» и localhost. Я бы предпочел не использовать хост с подстановочными знаками, а только внутренний IP-адрес веб-сервера xx.xxx.x.xxx. Как вы можете видеть выше, я пробовал все три, а до этого пробовал каждый по отдельности.
Я также предоставил администратору права root-like:
mysql> GRANT ALL PRIVILEGES ON *.* TO 'admin'@'xx.xxx.x.xxx' WITH GRANT OPTION;
mysql> GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION;
mysql> GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
Я не совсем уверен, что должен означать столбец Grant_priv, в частности «Нет» против пользователя-администратора - означает ли это, что «WITH GRANT OPTION» не сработало? Даже в этом случае я бы не ожидал, что это помешает пользователю аутентифицироваться.
Я еще не настроил брандмауэр, поэтому могу telnet с веб-сервера на сервер mysql и подключаться до отказа:
telnet xx.xxx.x.xx 3306
Trying xx.xxx.x.xx...
Connected to xx.xxx.x.xx.
Escape character is '^]'.
EHost 'xx.xxx.x.xx' is not allowed to connect to this MySQL serverConnection closed by foreign host.
Моя цель - создать базу данных через удаленное соединение от веб-сервера к серверу mysql, используя доктрину как часть приложения Symfony. Вот соответствующая часть app / config / parameters.yml, если она вам нужна:
sudo vi app/config/parameters.yml
parameters:
database_driver: pdo_mysql
database_host: xx.xxx.x.xx
database_port: 3306
database_name: appdatabasename
database_user: admin
database_password: ~
Как видите, я оставил пароль пустым (~ интерпретируется как пустой), но также попытался ввести пароль (при обновлении пользователя admin в mysql с тем же паролем).
Детали настройки:
Я действительно смущен. Любые идеи?
Спасибо!
Вы пробовали обновить БД?
Вы можете использовать следующие команды, изменяя xx.xxx.x.xxx на IP-адрес сервера nginx, а заполнители для реальных значений:
mysql> update db set Host='xx.xxx.x.xxx' where Db='placeholder_db';
mysql> update user set Host='xx.xxx.x.xxx' where user='placeholder_user';