2014-01-18 7 views
12

Почему я не могу подключиться к серверу mysql?node.js mysql error: ECONNREFUSED

На том же сервере работает сервер 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 
+0

Можете ли вы опубликовать вывод 'ps ax | grep mysqld' Я хотел бы посмотреть, какие теги mysql запущены с –

+1

'--port = 3306' против' port: 3308, '. Измените порт в своем скрипте на 3306, и он должен работать. – darthmaim

ответ

6

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

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

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

telnet localhost 3308 

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

mysql -hlocalhost -uroot -pxxx 
+0

Выполнение этого из командной строки отлично работает 'mysql -hlocalhost -uroot -pxxx' .. Как я могу убить все скрипты node.js ?! – clarkk

+0

извините 'mysql -hlocalhost -P 3308 -uroot -pxxx' забыли порт .. но он работает – clarkk

+0

обновил quesiton с выходом из' ps ax | grep mysqld' – clarkk

22

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

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

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

+0

Протестировано это решение на Ubuntu, и это сработало для меня, а также для других решений. – imkendal

+2

для osx MAMP, порт является /Applications/MAMP/tmp/mysql/mysql.sock – windmaomao

+0

просто перебирает будущих читателей: это решает проблему, связанную с mysql on Angstrom Distribution, а также через узел (по крайней мере для меня на BeagleBoneBlack он сделал), и путь был фактически '/ tmp/mysql.sock' – rlemon

2

Обзор

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

Решение

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

"Allow network access to MySQL ".

Проверьте это окно, а затем перезапустить MAMP. На этом этапе вы можете проверить свое соединение с MySQL с помощью telnet или сценарием node.js.

Подсказка

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

Наглядное пособие

enter image description here

0

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

Screenshot

0

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

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

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

Смежные вопросы