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
обзор
Для всех, кто имеет эту проблему и работает mamp. Я подозревал, что проблема связана с сетью, а не с 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
или создать нового для использования в своем проекте. Для последнего:
-
Введите mysql
CLI, запустив mysql -u root -p
.
-
Введите пароль для пользователя root
.
-
Создайте новую базу данных с CREATE DATABASE mydatabase;
,
-
Создайте нового пользователя с CREATE USER test IDENTIFIED BY "testpass";
,
-
Предоставьте права на test
пользователя для использования вашей новой базы данных с GRANT ALL PRIVILEGES ON mydatabase.* TO [email protected] IDENTIFIED BY "testpass";
, Смотрите для получения дополнительной информации об этом.
И тогда, в моем проекте, я бы имел:
let connection = mysql.createConnection({
host: "localhost",
user: "test",
password: "testpass",
database: "mydatabase"
});