Node.js Ошибка mysql: ECONNREFUSED

Почему я не могу подключиться к серверу mysql?

На том же сервере запущен сервер Apache/PHP, и он подключается без проблем!?

var mysql_link = {
    host : 'localhost',
    port : 3308,
    database: 'nodetest',
    user : 'root',
    password : 'xxx'
};

var connection = mysql.createConnection(mysql_link);

connection.connect(function(err){
    console.log(err);
    if(err != null){
        response.write('Error connecting to mysql:' + err+'\n');
    }
});

connection.end();

Ошибка

{ [Error: connect ECONNREFUSED]
  code: 'ECONNREFUSED',
  errno: 'ECONNREFUSED',
  syscall: 'connect',
  fatal: true }

Обновление

[email protected] /var/www/node/dyntest # ps ax | grep mysqld
 7928 pts/0    S+     0:00 grep mysqld
28942 ?        S      0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/var/lib/mysql --pid-file=/var/run/mysqld/mysqld.pid
29800 ?        Sl    17:31 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/var/lib/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/lib/mysql/mysql-error.log --open-files-limit=65535 --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306

Ответ 1

Если это сработало до этого, я предполагаю, что у вас уже есть копия вашего node.js script, работающего в фоновом режиме, который поддерживает соединение.

Я считаю, что соединение отказалось, это сообщение об ошибке tcp/ip, а не что-то из MySQL, которое предполагает, что он либо не работает, либо работает на другом порту или с сокетами.

Не могли бы вы попытаться подключиться к порту 3308? Чтобы узнать, работает ли сервер на этом порту?

telnet localhost 3308

Вы также можете попробовать:

mysql -hlocalhost -uroot -pxxx

Ответ 2

Я знаю, что на этот вопрос был дан ответ, но для меня проблема заключалась в том, что сервер mysql прослушивается в Unix-сокете, а не на tcp-сокете. Таким образом, решение заключалось в том, чтобы добавить:

port: '/var/run/mysqld/mysqld.sock'

к параметрам подключения.

Ответ 3

обзор

Для всех, кто имеет эту проблему и работает . Я подозревал, что проблема связана с сетью, а не с MySQL или Node.js

Решение

Если вы откроете MAMP и MAMP MySQL на левой панели навигации, откроется страница настроек MySQL. В центре страницы вы увидите флажок, который говорит:

Msgstr "Разрешить сетевой доступ к MySQL ".

Установите этот флажок и перезапустите свой MAMP. Теперь вы можете проверить ваше соединение с MySQL с помощью telnet или скрипта node.js

намек

Помните, что вы можете проверить, на каком port работает MySQL, открыв MAMP и щелкнув ссылку портов на левой навигационной панели.

Визуальная помощь

enter image description here

Ответ 4

По какой-то очень странной причине мой компьютер разрешил мне иметь порт 3306 как порт по умолчанию для моего подключения, чтобы он работал.

Screenshot

Ответ 5

У меня также есть эта проблема, когда я пытаюсь подключиться и отключить много времени, Я решил эту проблему путем конечного соединения и запуска сервера, после закрытия соединения, теперь я могу подключиться без проблем

Как показано ниже:

mysql.createConnection() connection.end(); после успешного запуска сервера, удалите функцию connection.end() из вашего кода и запустите сервер

Ответ 6

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

Я получал эту ошибку, потому что я правильно установил пакет mysql NPM, но я не установил никакой реализации MySQL на свой компьютер (я не знал, что должен был).

Я использую Arch Linux, поэтому, в моем случае, с пакетом NPM, уже установленным в моем проекте, я сделал pacman -Syu mariadb (MariaDB - стандартная реализация MySQL в Arch Linux), а затем настроил его, следуя руководству.

Затем вы можете использовать только что настроенного пользователя root или создать нового для использования в своем проекте. Для последнего:

И тогда, в моем проекте, я бы имел:

let connection = mysql.createConnection({
    host: "localhost",
    user: "test",
    password: "testpass",
    database: "mydatabase"
});