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


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

mysql -uUSERNAME -hEC2_IP -pPASSWORD

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

ошибка 2003 (HY000): не удается подключиться к серверу MySQL на 'IP' (110)

Я изменил мой.КНФ с

skip networking
bind-address            = 0.0.0.0

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

14 54

14 ответов:

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

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

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

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

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

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

здесь ЗАВЕРШИТЕ ШАГИ для удаленного доступа MySQL (развернуто на Amazon EC2): -

1. Добавить MySQL в правила для входящих подключений.

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

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

в экземпляр консоль:

sudo vi /etc/mysql/my.cnf

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

bind-address = 0.0.0.0

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

теперь перезапустите 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 jerry@localhost IDENTIFIED BY 'jerrypassword' WITH GRANT OPTION;

GRANT ALL PRIVILEGES ON *.* to jerry@'%' IDENTIFIED BY 'jerrypassword' WITH GRANT OPTION;

FLUSH PRIVILEGES;

EXIT;

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

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

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

1) Войдите в консоль AWS и перейдите в раздел 'EC2'

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

3) Проверяем Группа безопасности в вопросе

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

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

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

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

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

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

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

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

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

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

bind-address            = 127.0.0.1 to 0.0.0.0

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

/etc/init.d/mysql restart

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

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

netstat -nat |grep :3306

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

ubuntu@myhost:~$  netstat -nat |grep :3306
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN

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

ubuntu@myhost:~$  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

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

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

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

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

решение этой проблемы состоит из трех шагов:

  1. в MySQL my.ini / my.cnf-файл измените bind-адрес, чтобы принять соединение со всех хостов (0.0.0.0).

  2. в aws console - EC2-specific security group откройте порт mysql (по умолчанию 3306), чтобы принимать соединения со всех хостов (0.0.0.0).

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

и это позволит начать прием удаленных подключений.

  • запуск MYSQL с помощью администратора пользователя
    • mysql-u admin-user-p (введите пароль в командной строке)
  • создать нового пользователя:
    • создать пользователя 'newuser'@'%', идентифицированного 'password'; (%- >anyhost)
  • Привилегии Предоставлять :
    • предоставить выбор,удаление,вставка,обновление на db_name.* В 'новый_пользователь'@'%';
    • FLUSH ПРИВИЛЕГИИ;

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

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

bind_address=0.0.0.0

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

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

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

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

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

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

  3. создать нового пользователя 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';`
    
  4. вот ключевой шаг, без которого мой локальный адрес был отклонен при попытке удаленного подключения (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-адресу)

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

    $EC2prompt> sudo service mysql restart

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

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

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

при создании пользователя, такого как "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)