Подключитесь к mysql на Amazon EC2 с удаленного сервера - PullRequest
58 голосов
/ 19 марта 2012

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

mysql -uUSERNAME -hEC2_IP -pPASSWORD

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

ОШИБКА 2003 (HY000): не удается подключиться к серверу MySQL по «IP» (110)

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

skip networking
bind-address            = 0.0.0.0

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

Ответы [ 15 ]

84 голосов
/ 03 апреля 2012

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

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

51 голосов
/ 21 марта 2012

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

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

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

38 голосов
/ 07 февраля 2017

Обновление: Фев 2017

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

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

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

2. Добавьте адрес привязки = 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 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 можно получить удаленный доступ, введя public dns / ip вашего экземпляра в качестве адреса хоста MySQL, имя пользователя в качестве jerry и пароль в качестве jerrypassword. (Порт по умолчанию установлен на 3306)

27 голосов
/ 19 марта 2012

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

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

1) Войдите в свою консоль AWS и перейдите к «EC2»

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

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

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

5) Выберите«MYSQL» из выпадающего списка и нажмите «Add Rule»

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

8 голосов
/ 19 июня 2017

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

netstat -nat |grep :3306

Это помогло мне сосредоточиться на моей проблеме, потому что есть несколько конфигурационных файлов mysql, и я отредактировал неправильный. 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

D'Oh! Это показало, что я установил неправильный файл конфигурации, поэтому на этот раз я отредактировал ПРАВЫЙ файл, подтвердил его с помощью netstat и занялся бизнесом.

6 голосов
/ 22 апреля 2017

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

/etc/mysql/mysql.conf.d/mysqld.cnf 
5 голосов
/ 19 мая 2013

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

  1. EC2_DB запущен с IP 10.55.142.100
  2. EC2_web запущен с IP 10.55.142.144
  3. EC2_DB и EC2_WEB находятся в одной группе безопасности с доступом через порт БД (3306)
  4. EC2_DB имеет базу данных mysql, доступ к которой может получить локальный пользователь root ('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'

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

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

4 голосов
/ 08 мая 2014

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

bind-address            = 127.0.0.1 to 0.0.0.0

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

/etc/init.d/mysql restart

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

2 голосов
/ 18 января 2014

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

1 голос
/ 24 октября 2016
  • НАЧАТЬ MYSQL с помощью пользователя-администратора
    • mysql -u admin-user -p (ВВЕДИТЕ ПАРОЛЬ НА ВЫПУСК)
  • Создать нового пользователя:
    • СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ 'newuser' @ '%' ИДЕНТИФИЦИРОВАНО 'паролем';(% -> anyhost)
  • Предоставление привилегий:
    • GRANT SELECT, DELETE, INSERT, UPDATE ON db_name. * TO 'newuser' @ '%';
    • PRUSILEGES FLUSH;

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

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

bind_address = 0.0.0.0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...