Назад | Перейти на главную страницу

Django syncdb не может подключиться к MySQL на отдельном экземпляре EC2

Я пытаюсь развернуть приложение django на AWS с установкой, в которой у меня есть один экземпляр EC2, на котором запущен nginx / uwsgi, и второй экземпляр EC2, где у меня установлен MySQL 5.5. Оба принадлежат к группе по умолчанию (включены SSH, HTTP, HTTPS и MYSQL). В конце концов, я разделю группы для БД и приложения / веб-сервера, но пока я хочу, чтобы приложение работало.

Мои настройки django db выглядят так:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'db',         
        'USER': 'db_user',      
        'PASSWORD': 'db_pwd',
        'HOST': '<public dns of MySQL EC2 instance(tried also private ip)>',
        'PORT': '3306', 
    }
}

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

_mysql_exceptions.OperationalError: (1130, «Хосту 'ip-xx-xx-xx-xxx.ec2.internal' не разрешено подключаться к этому серверу MySQL»)

Обратите внимание, когда я устанавливаю MySQL в том же экземпляре EC2, что и сервер веб-приложений / приложений, приложение работает. В этом случае мой файл настроек db settings выглядел так:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'db',         
        'USER': 'db_user',      
        'PASSWORD': 'db_pwd',
        'HOST': '',
        'PORT': '', 
    }
}

Я закомментировал привязку 127.0.0.1 в файле /etc/mysql/my.cnf, как было предложено в одном сообщении, и даже установил его на 0.0.0.0 (перезапустил MySQL после изменений), но это не помогло.

Какие-либо предложения?

Спасибо

Бинарный лабиринт

[Составление этого ответа из потока комментариев.]

При настройке группы безопасности не включайте порт MySQL (3306) для общего Интернета (0.0.0.0/0), так как это опасно. Вместо этого включите порт 3306 только для группы безопасности в вашей учетной записи, чтобы к ней могли подключаться только ваши экземпляры.

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

"bind-address = 0.0.0.0" позволяет MySQL принимать соединения от других хостов (в соответствии с правилами группы безопасности и iptables).

Предоставление разрешений для 'someuser' @ '%' позволяет этому пользователю подключаться с любого хоста с учетом ограничений группы безопасности.