title: Bad handshake or ECONNRESET Azure Mysql Nodejs
body: <p>Similar issues have been reported, but I can't work around with there solutions.</p>
  
  <p>I have an express.js app using KNEX to connect to a mysql database hosted in Azure.</p>
  
  <p>I can connect to the DB perfectly from console command or mysql workbench.</p>
  
  <p>However, no way to achieve the same from my node app.</p>
  
  <p>My connection object is the same though:</p>
  
  <pre><code>config.knex = require('knex')({
      client: 'mysql',
      connection: {
          host: 'wineserver.mysql.database.azure.com',
          user: 'BurgerAndGreenBeans@wineserver',
          password: 'FromageDeChevre',
          database: 'gdpr',
          insecureAuth: true
      },
      pool: {
           min: 0
      },
      debug: ['ComQueryPacket']
  });
  </code></pre>
  
  <p>Everytime I start the app, I get alternatively either one error or another one:</p>
  
  <p><strong>#1</strong></p>
  
  <pre><code>Unhandled rejection Error: read ECONNRESET
  at exports._errnoException (util.js:1050:11)
  at TCP.onread (net.js:582:26)
  --------------------
  at Protocol._enqueue (C:\Projects\gdpr\node_modules\mysql\lib\protocol\Protocol.js:141:48)
  at Protocol.handshake (C:\Projects\gdpr\node_modules\mysql\lib\protocol\Protocol.js:52:41)
  at Connection.connect (C:\Projects\gdpr\node_modules\mysql\lib\Connection.js:130:18)
  at C:\Projects\gdpr\node_modules\knex\lib\dialects\mysql\index.js:106:18
  at Promise._execute (C:\Projects\gdpr\node_modules\bluebird\js\release\debuggability.js:300:9)
  at Promise._resolveFromExecutor (C:\Projects\gdpr\node_modules\bluebird\js\release\promise.js:483:18)
  at new Promise (C:\Projects\gdpr\node_modules\bluebird\js\release\promise.js:79:10)
  at Client_MySQL.acquireRawConnection (C:\Projects\gdpr\node_modules\knex\lib\dialects\mysql\index.js:104:12)
  at Object.create (C:\Projects\gdpr\node_modules\knex\lib\client.js:239:16)
  at Pool._createResource (C:\Projects\gdpr\node_modules\generic-pool\lib\generic-pool.js:354:17)
  at Pool.dispense [as _dispense] (C:\Projects\gdpr\node_modules\generic-pool\lib\generic-pool.js:314:10)
  at Pool.acquire (C:\Projects\gdpr\node_modules\generic-pool\lib\generic-pool.js:436:8)
  at C:\Projects\gdpr\node_modules\knex\lib\client.js:289:19
  at Promise._execute (C:\Projects\gdpr\node_modules\bluebird\js\release\debuggability.js:300:9)
  at Promise._resolveFromExecutor (C:\Projects\gdpr\node_modules\bluebird\js\release\promise.js:483:18)
  at new Promise (C:\Projects\gdpr\node_modules\bluebird\js\release\promise.js:79:10)
  </code></pre>
  
  <p>Process finished with exit code 0</p>
  
  <p>or</p>
  
  <p><strong>#2</strong></p>
  
  <pre><code>Unhandled rejection Error: ER_HANDSHAKE_ERROR: Bad handshake
  at Handshake.Sequence._packetToError (C:\Projects\gdpr\node_modules\mysql\lib\protocol\sequences\Sequence.js:52:14)
  at Handshake.ErrorPacket (C:\Projects\gdpr\node_modules\mysql\lib\protocol\sequences\Handshake.js:103:18)
  at Protocol._parsePacket (C:\Projects\gdpr\node_modules\mysql\lib\protocol\Protocol.js:280:23)
  at Parser.write (C:\Projects\gdpr\node_modules\mysql\lib\protocol\Parser.js:75:12)
  at Protocol.write (C:\Projects\gdpr\node_modules\mysql\lib\protocol\Protocol.js:39:16)
  at Socket.&lt;anonymous&gt; (C:\Projects\gdpr\node_modules\mysql\lib\Connection.js:103:28)
  at emitOne (events.js:96:13)
  at Socket.emit (events.js:191:7)
  at readableAddChunk (_stream_readable.js:178:18)
  at Socket.Readable.push (_stream_readable.js:136:10)
  at TCP.onread (net.js:561:20)
  --------------------
  at Protocol._enqueue (C:\Projects\gdpr\node_modules\mysql\lib\protocol\Protocol.js:141:48)
  at Protocol.handshake (C:\Projects\gdpr\node_modules\mysql\lib\protocol\Protocol.js:52:41)
  at Connection.connect (C:\Projects\gdpr\node_modules\mysql\lib\Connection.js:130:18)
  at C:\Projects\gdpr\node_modules\knex\lib\dialects\mysql\index.js:106:18
  at Promise._execute (C:\Projects\gdpr\node_modules\bluebird\js\release\debuggability.js:300:9)
  at Promise._resolveFromExecutor (C:\Projects\gdpr\node_modules\bluebird\js\release\promise.js:483:18)
  at new Promise (C:\Projects\gdpr\node_modules\bluebird\js\release\promise.js:79:10)
  at Client_MySQL.acquireRawConnection (C:\Projects\gdpr\node_modules\knex\lib\dialects\mysql\index.js:104:12)
  at Object.create (C:\Projects\gdpr\node_modules\knex\lib\client.js:239:16)
  at Pool._createResource (C:\Projects\gdpr\node_modules\generic-pool\lib\generic-pool.js:354:17)
  at Pool.dispense [as _dispense] (C:\Projects\gdpr\node_modules\generic-pool\lib\generic-pool.js:314:10)
  at Pool.acquire (C:\Projects\gdpr\node_modules\generic-pool\lib\generic-pool.js:436:8)
  at C:\Projects\gdpr\node_modules\knex\lib\client.js:289:19
  at Promise._execute (C:\Projects\gdpr\node_modules\bluebird\js\release\debuggability.js:300:9)
  at Promise._resolveFromExecutor (C:\Projects\gdpr\node_modules\bluebird\js\release\promise.js:483:18)
  at new Promise (C:\Projects\gdpr\node_modules\bluebird\js\release\promise.js:79:10)
  Process finished with exit code 0
  </code></pre>
  
  <p>It seems to be a kind of incompatibility between Node and Azure's mysql server.</p>
  
  <p>Did anyone experienced the same ?</p>