Подключение к mysql на Amazon EC2 с удаленного сервера

Я хочу подключиться к db на EC2 с моей локальной машины, я не могу это сделать и попробовал все - Я использую эту команду для подключения к EC2:

mysql -uUSERNAME -hEC2_IP -pPASSWORD

Эта ошибка генерируется

ERROR 2003 (HY000): невозможно подключиться к серверу MySQL на "IP" (110)

Я изменил my.cnf с помощью

skip networking
bind-address            = 0.0.0.0

Не удается подключиться к базе данных

Ответ 1

Может быть одна из следующих причин:

  • Вам нужно сделать запись в группе безопасности Amazon, чтобы разрешить удаленный доступ с вашей машины к экземпляру Amazon EC2.: - Я считаю, что это сделана вами, так как из вашего вопроса кажется, что вы уже сделали запись с 0.0.0.0, которая позволяет всем получить доступ к машине.
  • MySQL не позволяет пользователю подключаться с удаленной машины: - By default MySql создает идентификатор пользователя root с доступом администратора. Но корень доступ к идентификатору ограничен только локальным хостом. Это означает, что пользователь root id с правильным паролем не будет работать, если вы попытаетесь получить доступ к MySql с удаленной машины. Чтобы решить эту проблему, вам необходимо разрешить либо пользователю root, либо другому пользователю БД обращаться к MySQL с удаленного машина. Я бы не рекомендовал разрешать доступ к базе данных пользователя root от удаленной машины. Вы можете использовать символ подстановки% для указания любой удаленной машины.
  • Проверьте, не включен ли локальный межсетевой экран машины. И если его включить затем убедитесь, что порт 3306 открыт.

Пожалуйста, перейдите по следующей ссылке: Как включить удаленный доступ к серверу базы данных MySQL?

Ответ 2

как указано в ответах выше, это может быть связано с группами безопасности AWS и другими вещами. но если вы создали пользователя и дали ему удаленный доступ "%" и все еще получаете эту ошибку, проверьте конфигурационный файл mysql на debian, вы можете найти его здесь:/etc/mysql/my.cnf и найти строку:

bind-address            = 127.0.0.1

и измените его на:

bind-address            = 0.0.0.0

и перезапустите mysql.

на debian/ubuntu:

/etc/init.d/mysql restart

Я надеюсь, что это сработает для вас.

Ответ 3

Обновление: февраль 2017

Вот ПОЛНЫЕ ШАГИ для удаленного доступа к MySQL (развернуты на Amazon EC2):

1. Добавьте MySQL во входящие правила.

Перейдите в группу безопасности вашего экземпляра ec2 → отредактируйте входящие правила → добавьте новое правило → выберите MySQL/Aurora и источник в Anywhere.

2. Добавьте bind-address = 0.0.0.0 в my.cnf

В консоли консоли:

sudo vi /etc/mysql/my.cnf

это откроет редактор vi.
в файле my.cnf после [mysqld] добавьте новую строку и напишите:

bind-address = 0.0.0.0

Сохраните файл, введя :wq (введите)

Теперь перезапустите MySQL:

sudo /etc/init.d/mysqld restart

3. Создайте удаленного пользователя и предоставьте права.

войти в MySQL:

mysql -u root -p mysql (введите пароль после этого)

Теперь напишите следующие команды:

CREATE USER 'jerry'@'localhost' IDENTIFIED BY 'jerrypassword';

CREATE USER 'jerry'@'%' IDENTIFIED BY 'jerrypassword';

GRANT ALL PRIVILEGES ON *.* to [email protected] IDENTIFIED BY 'jerrypassword' WITH GRANT OPTION;

GRANT ALL PRIVILEGES ON *.* to [email protected]'%' IDENTIFIED BY 'jerrypassword' WITH GRANT OPTION;

FLUSH PRIVILEGES;

EXIT;

После этого к MySQL dB можно получить удаленный доступ, введя общедоступный dns/ip вашего экземпляра в качестве адреса хоста MySQL, имя пользователя в качестве jerry и пароль в качестве jerrypassword. (Порт по умолчанию установлен на 3306)

Ответ 4

Возможно, вы не настроили Amazon Security Group, назначенный вашему экземпляру EC2, чтобы принимать входящие запросы на порт 3306 (порт по умолчанию для баз данных).

Если это так, вы можете легко открыть порт для группы безопасности несколькими нажатиями кнопок:

1) Войдите в систему AWS Console и перейдите в "EC2"

2) В меню слева в разделе "Сеть и безопасность" перейдите в раздел "Группы безопасности"

3) Проверьте интересующую группу безопасности

4) Нажмите "Входящая вкладка"

5) Выберите "MYSQL" из выпадающего списка и нажмите "Добавить правило"

Не может быть причины, но стоит того...

Ответ 5

Полезным шагом в отслеживании этой проблемы является определение того, какой бит-адрес MySQL фактически установлен. Вы можете сделать это с помощью netstat:

netstat -nat |grep :3306

Это помогло мне разобраться в моей проблеме, потому что есть несколько конфигурационных файлов mysql, и я отредактировал не тот. Netstat показал, что mysql все еще использует неправильную конфигурацию:

[email protected]:~$  netstat -nat |grep :3306
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN

Итак, я grepped каталоги config для любых других файлов, которые могли бы переопределить мой параметр и нашли:

[email protected]:~$  sudo grep -R bind /etc/mysql
/etc/mysql/mysql.conf.d/mysqld.cnf:bind-address         = 127.0.0.1
/etc/mysql/mysql.cnf:bind-address = 0.0.0.0
/etc/mysql/my.cnf:bind-address = 0.0.0.0

D'ах! Это показало, что настройка, которую я настроил, была неправильным конфигурационным файлом, поэтому на этот раз я редактировал файл RIGHT, подтвердил его с netstat и был в бизнесе.

Ответ 6

Несмотря на то, что этот вопрос, как представляется, отвечает, еще одна распространенная проблема, которую вы можете получить, - пользователь БД был неправильно настроен. Это проблема администрирования и разрешений mysql:

  • EC2_DB запущен с IP 10.55.142.100
  • EC2_web запущен с IP 10.55.142.144
  • EC2_DB и EC2_WEBare в той же группе безопасности с доступом через ваш порт DB (3306)
  • EC2_DB имеет базу данных mysql, доступную локально пользователем root ('root'@'localhost')
  • EC2_DB mysql DB имеет удаленного пользователя 'my_user'@'%' IDENTIFIED BY PASSWORD 'password'
  • A bash вызов mysql из EC2_WEB завершается с ошибкой: mysql -umy_user -p -h ip-10-55-142-100.ec2.internal, а также ссылки на хост-ссылки на явный IP-адрес, общедоступный DNS и т.д.

Шаг 6 завершается с ошибкой, потому что у DB mysql есть неправильные пользовательские разрешения. Он нуждается в этом:

GRANT ALL PRIVILEGES ON *.* TO 'my_user'@'ip-10-55-142-144.ec2.internal' IDENTIFIED BY PASSWORD 'password'

Мне хотелось бы думать, что % будет работать на любом удаленном сервере, но я не нашел, что это так.

Пожалуйста, дайте мне знать, если это поможет вам.

Ответ 7

Для некоторых конфигураций ubuntu в этом файле необходимо изменить адрес привязки:

/etc/mysql/mysql.conf.d/mysqld.cnf 

Ответ 8

Измените /etc/mysql/my.cnf:

bind-address            = 127.0.0.1 to 0.0.0.0

Создайте пользователя с '%' host и перезапустите:

/etc/init.d/mysql restart

Работает для меня!:)

Ответ 9

Войдите в систему управления AWS. Перейдите к RDS, затем выберите экземпляр db и перейдите в раздел "Группы безопасности". Добавление CIDR/IP в группе безопасности устранило проблему.

Ответ 10

Решение этого состоит из трех шагов:

  • В MySQL файл my.ini/my.cnf изменяет адрес привязки для приема соединения со всех хостов (0.0.0.0).

  • В консоли aws - специальная группа безопасности ec2 открывает ваш порт mysql (по умолчанию - 3306), чтобы принимать соединения со всех хостов (0.0.0.0).

  • В брандмауэре Windows добавьте порт mysql (по умолчанию 3306) к исключениям.

И это начнет принимать удаленные подключения.

Ответ 11

  • START MYSQL с помощью администратора
    • mysql -u admin-user -p (ВВЕДИТЕ ПАРОЛЬ НА ПРОМПТ)
  • Создайте нового пользователя:
    • СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ 'newuser' @'%' IDENTIFIED BY 'password'; (% → anyhost)
  • Привилегии гранта:
    • GRANT SELECT, DELETE, INSERT, UPDATE ON db_name. * TO 'newuser' @'%';
    • ПРИВИЛЕГИИ FLUSH;

Если вы используете экземпляр EC2, не забудьте добавить входящие правила в группу безопасности с помощью MYSQL/Aurura.

Если эти шаги не работают, проверьте файл /etc/mysql/my.cnf и отредактируйте параметр bind_address как

bind_address = 0.0.0.0

Ответ 12

Я знаю, что это старый пост, но...

Я испытываю эту проблему, и я установил, что моя проблема на самом деле не является экземпляром EC2. Похоже, что это может быть ошибкой в ​​программном обеспечении драйвера клиента MySQL. Я еще не проводил тщательных исследований, но я дошел до того, что установил MySQL Workbench на экземпляр EC2, и ИТ также неустойчив - он прерывается с ошибкой (ошибка "соединение отменено" ). Эта ссылка предлагает возможную ошибку ниже стека, а не EC2.

Конечно, я не делал исчерпывающих исследований, и мой пост мог быть на самом деле не знаком, но стоит отметить и/или исследовать в любом случае ИМХО.

Ответ 13

Я прошел все предыдущие ответы (и ответы на подобные вопросы) без успеха, так вот вот что, наконец, помогло мне. Основной шаг заключался в том, чтобы явно предоставлять привилегии на сервере mysql локальному пользователю (для сервера), но с моим локальным IP-адресом, присоединенным к нему ([email protected]*.*.*.*). Полное пошаговое решение выглядит следующим образом:

  • Прокомментируйте строку bind_address в /etc/mysql/my.cnf на сервере (т.е. экземпляр EC2). я полагаю bind_address=0.0.0.0 также будет работать, но он не нужен как другие упомянули.

  • Добавьте правило (как уже упоминалось в других источниках) для MYSQL в группу безопасности экземпляра EC2 с портом 3306 и либо My IP, либо Anywhere в качестве источника. Оба работают нормально после выполнения всех этапов.

  • Создайте нового пользователя myuser с ограниченными правами на один конкретный база данных mydb (в основном следуя инструкциям в этом учебнике Amazon):

    $EC2prompt> mysql -u root -p
    [...omitted output...]
    mysql>  CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'your_strong_password';
    mysql>  GRANT ALL PRIVILEGES ON 'mydb'.* TO 'myuser'@'localhost';`
    
  • Здесь ключевой шаг, без которого мой локальный адрес был отклонен при попытке удаленного подключения (ERROR 1130 (HY000): Host '*.*.*.23' is not allowed to connect to this MySQL server):

    mysql> GRANT ALL PRIVILEGES ON 'mydb'.* TO 'myuser'@'*.*.*.23';
    mysql> FLUSH PRIVILEGES;`
    

    (замените '*.*.*.23' на ваш локальный IP-адрес)

  • Для хорошей меры я вышел из mysql в оболочку и перезапустил сервер msyql:

    $EC2prompt> sudo service mysql restart

  • После этих шагов я смог с радостью подключиться с моего компьютера с помощью:

    $localprompt> mysql -h myinstancename.amazonaws.com -P 3306 -u myuser -p

    (замените myinstancename.amazonaws.com на общий адрес вашего экземпляра EC2)

Ответ 14

При создании пользователя, такого как "myuser" @ "localhost", пользователь ограничивается подключением только от localhost. Создайте пользователя только для удаленного доступа и используйте IP-адрес удаленного клиента, с которого вы будете подключаться к серверу MySQL. Если вы несете риск разрешить соединения со всех удаленных хостов (обычно при использовании динамического IP-адреса), вы можете использовать "myuser" @ "%". Я сделал это, а также удалил bind_address из /etc/mysql/mysql.cnf(Ubuntu), и теперь он подключается безупречно.

mysql> select host,user from mysql.user;
+-----------+-----------+
| host      | user      |
+-----------+-----------+
| %         | myuser    |
| localhost | mysql.sys |
| localhost | root      |
+-----------+-----------+
3 rows in set (0.00 sec)

Ответ 15

Ip Mysql по умолчанию в экземпляре EC2 Ubuntu - 127.0.0.1 если вы хотите изменить его, просто следуйте ответам, которые уже были даны здесь.