4

У меня есть виртуальная машина Azure, содержащая систему Ubuntu, с сервером MySQL, и я хочу получить доступ к базе данных из веб-приложения. Когда я установил MySQL-сервер, я выполнил

$ iptables -I INPUT -p tcp --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
$ iptables -I OUTPUT -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT

разрешить TCP-соединения. В файле /etc/mysql/my.cnf я добавил bind-address = 168.63.178.87 , который представляет собой «Виртуальный IP-адрес», который мне сообщает панель Azure.

В mysql пользователь, которого я использую для подключения, имеет все необходимые права доступа к базе данных (я думаю):

mysql> SHOW GRANTS FOR 'user'@'%';
+-------------------------------------------------------------------------------------------------------------------+
| Grants for user@%                                                                                            |
+-------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' IDENTIFIED BY PASSWORD 'pass_ommited' |
| GRANT ALL PRIVILEGES ON `database`.* TO 'user'@'%'                                                          |
+-------------------------------------------------------------------------------------------------------------------+

Но когда приложение пытается подключиться к базе данных, я получаю сообщение об ошибке:

 CDbConnection failed to open the DB connection: SQLSTATE[HY000] [2003] Can't connect to MySQL server on '168.63.178.87' (4) 

(Это приложение для фреймворка Yii, на случай, если оно имеет значение).

У меня полный SSH-доступ к виртуальной машине, используя указанный IP-адрес и определенный порт. Azure также сообщает мне «Внутренний IP-адрес», то есть 10.78.28.85 . Я пытался привязать сервер MySQL к этому адресу и к 0.0.0.0 , но ни один не помог.

Я подозреваю, что проблема заключается в перенаправлении для доступа к моему конкретному экземпляру на сервере, но я не знаю, как его решить.

2 ответа2

6

Я наконец решил это. Проблема заключалась в том, что у меня не было конечной точки в Azure.

Я создал конечную точку с портом 3306 и перезапустил mysql-сервер с sudo restart mysql

Другая ошибка, с которой я столкнулся, заключается в том, что мне нужно было установить адрес привязки в качестве внутреннего IP-адреса сервера.

0

Конечной точки недостаточно! Просто потратил 4 часа на решение этой проблемы. Вам также необходимо убедиться, что на вашем сервере есть правило брандмауэра для порта MySql, и, самое главное, это правило PUBLIC:

как показано здесь

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .