Mariaex Handshake Error with Azure Database for MySQL

Hey there,

I’ve just been toying around with MS Azure a bit and I’ve been unable to connect to an Azure Database for MySQL server with Ecto/Mariaex.

When I try launch my application or run migrations, it crashes with the following error message:

09:44:48.179 [error] GenServer #PID<0.175.0> terminating
** (FunctionClauseError) no function clause matching in Mariaex.Messages.decode_msg/2
    (mariaex) lib/mariaex/messages.ex:261: Mariaex.Messages.decode_msg(<<254, 109, 121, 115, 113, 108, 95, 110, 97, 116, 105, 118, 101, 95, 112, 97, 115, 115, 119, 111, 114, 100, 0, 51, 30, 66, 85, 81, 127, 123, 34, 125, 97, 115, 105, 99, 4, 34, 102, 93, 10, 30, 84, 0>>, :handshake_send)
    (mariaex) lib/mariaex/messages.ex:225: Mariaex.Messages.decode/2
    (mariaex) lib/mariaex/protocol.ex:1102: Mariaex.Protocol.msg_decode/2
    (mariaex) lib/mariaex/protocol.ex:1070: Mariaex.Protocol.msg_recv/3
    (mariaex) lib/mariaex/protocol.ex:155: Mariaex.Protocol.handshake_recv/2
    (db_connection) lib/db_connection/connection.ex:134: DBConnection.Connection.connect/2
    (connection) lib/connection.ex:622: Connection.enter_connect/5
    (stdlib) proc_lib.erl:247: :proc_lib.init_p_do_apply/3
Last message: nil
State: Mariaex.Protocol
** (exit) exited in: :gen_server.call(#PID<0.175.0>, {:checkout, #Reference<0.2452934895.1515978754.176436>, true, :infinity}, 5000)
    ** (EXIT) an exception was raised:
        ** (FunctionClauseError) no function clause matching in Mariaex.Messages.decode_msg/2
            (mariaex) lib/mariaex/messages.ex:261: Mariaex.Messages.decode_msg(<<254, 109, 121, 115, 113, 108, 95, 110, 97, 116, 105, 118, 101, 95, 112, 97, 115, 115, 119, 111, 114, 100, 0, 51, 30, 66, 85, 81, 127, 123, 34, 125, 97, 115, 105, 99, 4, 34, 102, 93, 10, 30, 84, 0>>, :handshake_send)
            (mariaex) lib/mariaex/messages.ex:225: Mariaex.Messages.decode/2
            (mariaex) lib/mariaex/protocol.ex:1102: Mariaex.Protocol.msg_decode/2
            (mariaex) lib/mariaex/protocol.ex:1070: Mariaex.Protocol.msg_recv/3
            (mariaex) lib/mariaex/protocol.ex:155: Mariaex.Protocol.handshake_recv/2
            (db_connection) lib/db_connection/connection.ex:134: DBConnection.Connection.connect/2
            (connection) lib/connection.ex:622: Connection.enter_connect/5
            (stdlib) proc_lib.erl:247: :proc_lib.init_p_do_apply/3
    (db_connection) lib/db_connection/poolboy.ex:112: DBConnection.Poolboy.checkout/3
    (db_connection) lib/db_connection.ex:920: DBConnection.checkout/2
    (db_connection) lib/db_connection.ex:742: DBConnection.run/3
    (db_connection) lib/db_connection.ex:1133: DBConnection.run_meter/3
    (db_connection) lib/db_connection.ex:584: DBConnection.prepare_execute/4
    (ecto) lib/ecto/adapters/mysql/connection.ex:22: Ecto.Adapters.MySQL.Connection.execute/4
    (ecto) lib/ecto/adapters/sql.ex:243: Ecto.Adapters.SQL.sql_call/6
    (ecto) lib/ecto/adapters/sql.ex:193: Ecto.Adapters.SQL.query!/5

I haven’t been able to look too much into it but it seems that the binary string is a response from the MySQL server; the binary in the error message begins with << 254 >> (as seems to be expected by Mariaex) and then continues with the string mysql_native_password.

If anyone has come across this issue before I’d be interested in how they resolved it before I spend hours trying to troubleshoot it further :slight_smile:

@wmnnd did you find a solution in the meantime?

Yes, I decided not to use Azure :wink: