Как установить соединение MYSQL с экземпляром AWS ec2 с локальной машины? - PullRequest
0 голосов
/ 22 мая 2019

Я закончил работу над своим проектом и пытаюсь развернуть его в AWS. В качестве веб-сервера у меня есть экземпляр ec2 со следующими деталями конфигурации:

  • NodeJS, использующий порт 5000
  • PM2 (постоянная поддержка сервера)
  • NGINX как чтение веб-сервера из моего файла сборки
  • MySQL в экземпляре ec2 в качестве базы данных. (используя порт 3306)

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

Мне удалось успешно подключиться к БД в рабочей среде MYSQL, но как я могу подключиться к ней сейчас из строки подключения nodejs?

Я уже попробовал следующее:

1) В группе безопасности AWS открытие правила TCP для всего входящего трафика через порт 5000
2) В группе безопасности AWS открываем правило MYSQL / Aurora для всего входящего трафика через порт 3306
3) Предоставление пользователю всех прав на . , а также сброс и перезапуск сервера MySQL.

Ошибка выдает меня в консоли.

`{ Error: connect ECONNREFUSED 14.54.xxx.xx:3306
    at Object._errnoException (util.js:1019:11)
    at _exceptionWithHostPort (util.js:1041:20)
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1175:14)
--------------------
  code: 'ECONNREFUSED',
  errno: 'ECONNREFUSED',
  syscall: 'connect',
  address: '14.54.xxx.xxx',
  port: 3306,
  fatal: true }`

Вот мой код, пытающийся установить соединение:

```var mysql = require("mysql");

// Local Works just fine

// var connection = mysql.createConnection({
//   host: "localhost",
//   user: "root",
//   password: "xxx",
//   database: "devdb",
//   charset: "utf8mb4"
// });

// Production Connection to AWS MYSQL instance (stuck on)

var connection = mysql.createConnection({
  host: "14.54.xxx.xxx",
  port: "3306",
  user: "jordan",
  password: "xxx",
  database: "productiondb"
  charset: "utf8mb4"
});

// Test the db connection

connection.connect(function(err) {
  if (err) {
    console.log(err);
  } else {
    console.log("Connected!");
  }
});

module.exports = connection;
```

Я ожидаю, что смогу успешно подключиться к экземпляру БД из моего NodeJS

Ответы [ 3 ]

1 голос
/ 22 мая 2019

Существует несколько причин, по которым это может происходить -

  • Настройка базы данных MySQL
   #start MySQL server sudo service mysqld start
   #run configuration sudo mysql_secure_installation

В приглашении выполните следующие действия:

Enter current password for the root account: press Enter key
Set root password? Y
New password: yourpassword
Re-enter new password: yourpassword
Remove anonymous users? Y
Disallow root login remotely? n
Remove test database and access to it? Y
Reload privilege tables now? Y
  • Если вы используете RDS, вам придется предоставить NAT-доступ к VPC, который содержит вашу базу данных.Для получения дополнительной информации, пожалуйста, обратитесь здесь
1 голос
/ 22 мая 2019

Убедитесь еще раз, я думаю, что в ваших группах безопасности что-то не так, возможно, ваш сервер прослушивает внутренне, так что это происходит.Перейдите на EC2 security group и выберите Входящие и добавьте правила как type=mysql, proto=tcp, port range=3306, source=0.0.0.0/0,::/0 (разрешить все)

0 голосов
/ 22 мая 2019

На самом деле, я думаю, что только что понял это.

Так что в файле конфигурации mysql по умолчанию ip привязан к 127.0.0.1.Однако я изменил привязку к своему общедоступному IP-адресу ec2, а также изменил «mysql» по умолчанию на «jordan», сохранил файл конфигурации, перезапустил службу mysql, и теперь она работает.

Спасибо за предложенияЯ запишу это в своей документации, чтобы проверить в будущем.

...