jean d'arme
jean d'arme

Reputation: 4343

Can't connect Node.js to remote database MariaDB

I try to connect to my MariaDB database using Node.js based on this tutorial:

    const mariadb = require('mariadb');
const pool = mariadb.createPool({
     host: 'myhost.com',
     user:'root', 
     password: 'password',
     database: 'db_p',
     connectionLimit: 2
});

async function asyncFunction() {
  let conn;
  try {
    console.log('establishing connection')
    conn = await pool.getConnection();
    console.log('established')
    const rows = await conn.query("SHOW TABLES");
    console.log(rows);

  } catch (err) {
    console.log(err)
      throw err;
  } finally {
      if (conn) return conn.end();
  }
}

but all I get is this error:

establishing connection
{ Error: retrieve connection from pool timeout
    at Object.module.exports.createError (/Users/jan/Developer/microservice/node_modules/mariadb/lib/misc/errors.js:55:10)
    at rejectTimeout (/Users/jan/Developer/microservice/node_modules/mariadb/lib/pool.js:267:16)
    at Timeout.rejectAndResetTimeout [as _onTimeout] (/Users/jan/Developer/microservice/node_modules/mariadb/lib/pool.js:287:5)
    at ontimeout (timers.js:486:15)
    at tryOnTimeout (timers.js:317:5)
    at Timer.listOnTimeout (timers.js:277:5)
  fatal: false,
  errno: 45028,
  sqlState: 'HY000',
  code: 'ER_GET_CONNECTION_TIMEOUT' }
(node:76515) UnhandledPromiseRejectionWarning: Error: retrieve connection from pool timeout
    at Object.module.exports.createError (/Users/jan/Developer/microservice/node_modules/mariadb/lib/misc/errors.js:55:10)
    at rejectTimeout (/Users/jan/Developer/microservice/node_modules/mariadb/lib/pool.js:267:16)
    at Timeout.rejectAndResetTimeout [as _onTimeout] (/Users/jan/Developer/microservice/node_modules/mariadb/lib/pool.js:287:5)
    at ontimeout (timers.js:486:15)
    at tryOnTimeout (timers.js:317:5)
    at Timer.listOnTimeout (timers.js:277:5)
(node:76515) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This errororiginated either by throwing inside of an async function without a catch block, or byrejecting a promise which was not handled with .catch(). (rejection id: 2)
(node:76515) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

I programmed in JS for last two years, but I'm new to Node.js and I thought it should work out of the box. Anyone?

Upvotes: 6

Views: 16330

Answers (4)

andrew7070
andrew7070

Reputation: 1

I had dockerised my NestJS using MariaDB for database code and was hitting the internal port of the NestJS service instead of the external port with my requests. Illustration:

ports:
      - "5050:5005"  # Bind to IPv4 localhost explicitly

Using 5005 raised the error. Using 5050 worked.

Upvotes: 0

Gruber
Gruber

Reputation: 4558

For me the problem was solved by adding port: 3307 as another pool creation parameter.

Port 3306 seems to be default but some servers seem to prefer 3307.

Upvotes: 0

Normajean
Normajean

Reputation: 1265

For others with the same error message, particularly if the connection works the first few times but not after that, the error can happen if you don't end the connection with conn.end. Not OPs problem, but perhaps others.

Upvotes: 6

jean d'arme
jean d'arme

Reputation: 4343

The problem was that in phpMyAdmin I didn't added my home ip address so I can connect. For those who are just starting with it - you can create multiple users with the same name and password so you can actually have access from multiple IP's (like localhost, ::1 or 127.0.0.1 which is quite the same, but still required just for sure).

I have added additional user with same credentials pointing to my IP and it solved the problem.

Upvotes: 6

Related Questions