I am trying to connect to my google-cloud-sql instance using my node.js mysql module and I am unable to connect to it. I referred to the following links mysql docs and google getting started but could not understand what's going on.
var connection = mysql.createConnection({
acquireTimeout: 30000,
host : '35.184.77.86',
user : 'XXX',
password : 'XXX',
database : 'name',
});
connection.connect(function(err){
if (err) {
console.error(chalk.red('error connecting: ' + err.stack));
return;
}
console.log(chalk.green('connected as id ' + connection.threadId));
});
connection.query('SELECT * FROM likes', function(err, rows, fields)
{
if (err) {
console.log(chalk.red(err));
}else{
console.log(fields);
}
});
connection.end();
I am getting the following error while connecting.
error connecting: Error: connect ETIMEDOUT
at Connection._handleConnectTimeout (/Users/narenpalep/Desktop/javascript/Project_Portfolio/node_modules/mysql/lib/Connection.js:419:13)
at Socket.g (events.js:292:16)
at emitNone (events.js:86:13)
at Socket.emit (events.js:185:7)
at Socket._onTimeout (net.js:338:8)
at ontimeout (timers.js:386:14)
at tryOnTimeout (timers.js:250:5)
at Timer.listOnTimeout (timers.js:214:5)
--------------------
at Protocol._enqueue (/Users/narenpalep/Desktop/javascript/Project_Portfolio/node_modules/mysql/lib/protocol/Protocol.js:145:48)
at Protocol.handshake (/Users/narenpalep/Desktop/javascript/Project_Portfolio/node_modules/mysql/lib/protocol/Protocol.js:52:23)
at Connection.connect (/Users/narenpalep/Desktop/javascript/Project_Portfolio/node_modules/mysql/lib/Connection.js:130:18)
at Object.<anonymous> (/Users/narenpalep/Desktop/javascript/Project_Portfolio/db/db.js:11:12)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
at Module.require (module.js:497:17)
Error: connect ETIMEDOUT
Try running with the below code also check the connection and for the right IP. There might be internal firewall block between the server and the system
con.connect(function(err) {
if (err) throw err;
console.log("Connected!");
});
Related
I am new to web development and I have started working on Nodejs.
I am trying to connect to the MySQL Server on port 3308, WampServer but instead I always get connected to localhost server.
To ensure that I am using right ports and hostnames, I have tried to setup the connection using MYSQL Workbench and it worked!
But still, I am not able to figure out how to connect with mysql driver.
const sql = require('mysql');
var con = sql.createConnection({
host: '127.0.0.1:3308',
user: 'root',
password: '',
port: 3308
});
con.connect(function (err) {
if (err) throw err;
console.log("Connected!");
});
createDatabaseQuery= theQ =>{
return "CREATE DATABASE ".concat(theQ);
}
con.query(createDatabaseQuery('nodedb'), function(err) {
if (err) {
throw err;
}
});
Here is my output:
[Running] node "c:\Users\Asus\WebstormProjects\Impulse\MySQLTest.js"
c:\Users\Asus\WebstormProjects\Impulse\MySQLTest.js:8
if (err) throw err;
^
Error: connect ECONNREFUSED 127.0.0.1:3306
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1137:16)
--------------------
at Protocol._enqueue (c:\Users\Asus\WebstormProjects\Impulse\node_modules\mysql\lib\protocol\Protocol.js:144:48)
at Protocol.handshake (c:\Users\Asus\WebstormProjects\Impulse\node_modules\mysql\lib\protocol\Protocol.js:51:23)
at Connection.connect (c:\Users\Asus\WebstormProjects\Impulse\node_modules\mysql\lib\Connection.js:116:18)
at Object.<anonymous> (c:\Users\Asus\WebstormProjects\Impulse\MySQLTest.js:7:5)
at Module._compile (internal/modules/cjs/loader.js:1158:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1178:10)
at Module.load (internal/modules/cjs/loader.js:1002:32)
at Function.Module._load (internal/modules/cjs/loader.js:901:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12)
at internal/main/run_main_module.js:18:47 {
errno: 'ECONNREFUSED',
code: 'ECONNREFUSED',
syscall: 'connect',
address: '127.0.0.1',
port: 3306,
fatal: true
}
[Done] exited with code=1 in 1.198 seconds
I tried connecting to my first MySql server with the following code
var mysql = require('mysql');
var con = mysql.createConnection({
host: "localhost",
user: "yourusername",
password: "yourpassword"
});
con.connect(function(err) {
if (err) throw err;
console.log("Connected!");
});
But I get the following error. It only works if I comment out the "throw err" part
C:\NodeJS Projects>node demo_db_connection.js
C:\NodeJS Projects\demo_db_connection.js:10
if (err) throw err;
^
Error: connect ECONNREFUSED 127.0.0.1:3306
at Object.exports._errnoException (util.js:1022:11)
at exports._exceptionWithHostPort (util.js:1045:20)
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1087:14)
--------------------
at Protocol._enqueue (C:\NodeJS
Projects\node_modules\mysql\lib\protocol\Protocol.js:145:48)
at Protocol.handshake (C:\NodeJS
Projects\node_modules\mysql\lib\protocol\Protocol.js:52:23)
at Connection.connect (C:\NodeJS
Projects\node_modules\mysql\lib\Connection.js:130:18)
at Object.<anonymous> (C:\NodeJS Projects\demo_db_connection.js:9:5)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
at Module.runMain (module.js:604:10)
I'm trying to execute a bunch of really big SELECT statements (each of them require several minutes to complete execution) in a while loop.
var con = mysql.createConnection(
{
host: "host_name",
user: "user_name",
password: "password",
database: "database_name"
});
con.connect();
while(arg1 < arg2)
{
var query = SELECT * FROM table WHERE value=arg1;
con.query(query, function (err, result)
{
//Rest of code
});
arg = arg + 1;
}
con.end();
At first, it's working but soon, after a certain amount of time, the connection seems to be lost.
Connection lost: The server closed the connection.
at Protocol.end (C:\Users\X\node_modules\mysql\lib\protocol\Protocol.js:109:13)
at Socket.<anonymous> (C:\Users\X\node_modules\mysql\lib\Connection.js:109:28)
at emitNone (events.js:110:20)
at Socket.emit (events.js:207:7)
at endReadableNT (_stream_readable.js:1047:12)
at _combinedTickCallback (internal/process/next_tick.js:102:11)
at process._tickCallback (internal/process/next_tick.js:161:9)
After reading a few similar issues on Stack, I understood the cause thanks to the page of Mysql on Github :
You may lose the connection to a MySQL server due to network problems, the server timing you out, the server being restarted, or crashing.
So to handle the possible disconnection, I tried to use this function, following the work of a previous post :
function handleDisconnect() {
connection = mysql.createConnection(db_config);
connection.connect(function(err) {
if(err) {
console.log('error when connecting to db:', err);
setTimeout(handleDisconnect, 2000);
}
});
connection.on('error', function(err) {
console.log('db error', err);
if(err.code === 'PROTOCOL_CONNECTION_LOST') {
handleDisconnect();
}
else
{
throw err;
}
});
}
In the following code :
while(arg1 < arg2)
{
handleDisconnect();
var query = SELECT * FROM table WHERE value=arg1;
connection.query(query, function (err, result)
{
//Rest of code
});
arg = arg + 1;
}
But I still get the following error message :
error when connecting to db: { Error: Connection lost: The server closed the connection.
at Protocol.end (C:\Users\X\node_modules\mysql\lib\protocol\Protocol.js:109:13)
at Socket.<anonymous> (C:\Users\X\node_modules\mysql\lib\Connection.js:109:28)
at emitNone (events.js:110:20)
at Socket.emit (events.js:207:7)
at endReadableNT (_stream_readable.js:1047:12)
at _combinedTickCallback (internal/process/next_tick.js:102:11)
at process._tickCallback (internal/process/next_tick.js:161:9)
--------------------
at Protocol._enqueue (C:\Users\X\node_modules\mysql\lib\protocol\Protocol.js:141:48)
at Protocol.handshake (C:\Users\X\node_modules\mysql\lib\protocol\Protocol.js:52:41)
at Connection.connect (C:\Users\X\node_modules\mysql\lib\Connection.js:130:18)
at handleDisconnect (C:\Users\X\connection.js:182:13)
at Object.<anonymous> (C:\Users\X\connection.js:105:2)
at Module._compile (module.js:569:30)
at Object.Module._extensions..js (module.js:580:10)
at Module.load (module.js:503:32)
at tryModuleLoad (module.js:466:12)
at Function.Module._load (module.js:458:3) fatal: true, code: 'PROTOCOL_CONNECTION_LOST' }
C:\Users\X\connection.js:213
if (err) throw err;
^
Error: Connection lost: The server closed the connection.
at Protocol.end (C:\Users\X\node_modules\mysql\lib\protocol\Protocol.js:109:13)
at Socket.<anonymous> (C:\Users\X\node_modules\mysql\lib\Connection.js:109:28)
at emitNone (events.js:110:20)
at Socket.emit (events.js:207:7)
at endReadableNT (_stream_readable.js:1047:12)
at _combinedTickCallback (internal/process/next_tick.js:102:11)
at process._tickCallback (internal/process/next_tick.js:161:9)
--------------------
at Protocol._enqueue (C:\Users\X\node_modules\mysql\lib\protocol\Protocol.js:141:48)
at Protocol.handshake (C:\Users\X\node_modules\mysql\lib\protocol\Protocol.js:52:41)
at Connection.connect (C:\Users\X\node_modules\mysql\lib\Connection.js:130:18)
at handleDisconnect (C:\Users\X\connection.js:182:13)
at Object.<anonymous> (C:\Users\X\connection.js:105:2)
at Module._compile (module.js:569:30)
at Object.Module._extensions..js (module.js:580:10)
at Module.load (module.js:503:32)
at tryModuleLoad (module.js:466:12)
at Function.Module._load (module.js:458:3)
Is there something I don't get or is there something that I should be aware of to succefully manage the disconnection ? I still have troubles in Node JS understanding how to handle the notions of synchronous and asynchronous functions, maybe my problem comes from here.
I am absolutely new to node.js. while Iam trying to connect mysql with node.js I got this. Really looking for a help.
{ Error: connect ECONNREFUSED 127.0.0.1:8889
at Object.exports._errnoException (util.js:1022:11)
at exports._exceptionWithHostPort (util.js:1045:20)
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1087:14)
at Protocol._enqueue (/Applications/MAMP/htdocs/htbf/nodejsdb/mysql/node_modules/mysql/lib/protocol/Protocol.js:141:48)
at Protocol.handshake (/Applications/MAMP/htdocs/htbf/nodejsdb/mysql/node_modules/mysql/lib/protocol/Protocol.js:52:41)
at Connection.connect (/Applications/MAMP/htdocs/htbf/nodejsdb/mysql/node_modules/mysql/lib/Connection.js:130:18)
at Connection._implyConnect (/Applications/MAMP/htdocs/htbf/nodejsdb/mysql/node_modules/mysql/lib/Connection.js:461:10)
at Connection.query (/Applications/MAMP/htdocs/htbf/nodejsdb/mysql/node_modules/mysql/lib/Connection.js:206:8)
at Object. (/Applications/MAMP/htdocs/htbf/nodejsdb/mysql/app1.js:11:12)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
code: 'ECONNREFUSED',
errno: 'ECONNREFUSED',
syscall: 'connect',
address: '127.0.0.1',
port: 8889,
fatal: true }
my code is
var mysql = require('mysql');
var connection = mysql.createConnection({
host: 'localhost',
port: '8889',
user: 'root',
password: 'root',
socket: '/Applications/MAMP/tmp/mysql/mysql.sock',
database: 'login_db'
});
connection.query('SELECT * from test_table',function(err,rows,feilds){
if(!err){
console.log(rows);
} else{
console.log(err);
}
});
connection.end();
my script is here
var mysql= require('mysql');
var connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: '12345',
database: 'mydb'
});
connection.connect(function(err) {
if (err) {
console.error('error connecting: ' + err.stack);
return;
}
console.log('connected as id ' + connection.threadId);
});
when i running this code it shows this error
error connecting: Error: connect ETIMEDOUT
at Connection._handleConnectTimeout (~/node_modules/mysql/lib/Connection.js:414:13)
at Socket.g (events.js:180:16)
at Socket.EventEmitter.emit (events.js:92:17)
at Socket._onTimeout (net.js:327:8)
at Timer.unrefTimeout [as ontimeout] (timers.js:412:13)
--------------------
at Protocol._enqueue (~/mysql/lib/protocol/Protocol.js:141:48)
at Protocol.handshake (~/node_modules/mysql/lib/protocol/Protocol.js:52:41)
at Connection.connect (~/node_modules/mysql/lib/Connection.js:125:18)
at Object.<anonymous> (~/Desktop/Node-Eclipse/server.js:10:12)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
Username and password and all other details are correct
I'm using an export that works exactly like your function and it works properly..
var mysql = require("mysql");
var self = module.exports = {
db:{},
init: function(login, callback) {
self.db = mysql.createConnection({
host:'myHost',
user:'myUser',
password:'myPassword',
database:'myDbName'
});
return self.db.connect(function(err) {
if (err) {
callback(null);
}
else {
callback(self.db);
}
});
},
execute:function(login, request, callback) {
return self.db.query(request, function(err, rows, fields) {
if (err) {
callback(null);
}
else {
callback(rows);
}
});
}
};
Please pass port number which is 3306 in your mysql connection