【问题标题】:Erlang: a timeout error happened when connecting to MySQL via Erlang-MySQL-DriverErlang:通过 Erlang-MySQL-Driver 连接 MySQL 时发生超时错误
【发布时间】:2022-01-14 11:23:52
【问题描述】:

解决编译错误后,数据库连接测试又出现问题。

Erl-MySQL-Driver是从git中克隆出来的,在本地环境下重新编译。

然后我进入 Erlang shell 并尝试连接到我的数据库(请忽略不安全的密码..),然后 ERROR REPORT 显示连接超时错误。

[root@perryhost ~]#erl

Erlang/OTP 24 [erts-12.1.5] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:1]

Eshell V12.1.5  (abort with ^G)
1> mysql:start_link("test", "localhost", "3306", "root", "123456", "sdzmmo").
=ERROR REPORT==== 9-Dec-2021::23:24:09.886253 ===
Error in process <0.85.0> with exit value:
{function_clause,[{mysql_recv,start_link,
                              ["localhost","3306",#Fun<mysql.0.19863791>,
                               <0.85.0>],
                              [{file,"src/lib/mysql/mysql_recv.erl"},
                               {line,67}]},
                  {mysql_conn,init,9,
                              [{file,"src/lib/mysql/mysql_conn.erl"},
                               {line,315}]}]}

mysql:503: failed starting first MySQL connection handler, exiting
{error,{error,"timed out"}}

正如上面提到的堆栈,这个 cmd 未能启动第一个 MySQL 连接 handler。此信息是否意味着我的数据库未使用正确的配置?还是Erlang驱动引用不正确?

my.cnf 中的所有配置标签如下:


[mysqld]

# innodb_buffer_pool_size = 128M

# log_bin

# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M

datadir=/var/lib/mysql

#socket=/var/lib/mysql/mysql.sock

symbolic-links=0

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

character-set-server=utf8
collation-server=utf8_general_ci

[client]
default-character-set=utf8

安装的 MySQL 版本是:

[root@ perryhost ~]# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.36 MySQL Community Server (GPL)

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

【问题讨论】:

    标签: mysql connection erlang timeout


    【解决方案1】:

    mysql_recv:start_link 的第一行是这样的:

    start_link(Host, Port, LogFun, Parent) when is_list(Host), is_integer(Port) ->
    

    也就是说,它期望端口号作为整数传递。调用函数时尝试使用3306 而不是"3306"

    【讨论】:

    • 尝试使用整数端口号,但同样的错误再次发生...[哭泣]...
    • 嗯,至少这次堆栈跟踪应该不一样
    • 仍然...连接超时。好吧,其他一些常见问题解答提到了 OpenSSL 问题和 ODBC 方法,我尝试了这两种解决方案……都不起作用。我会让我团队中的 DBA 跟踪它,看看他们是否能解决这个问题。谢谢大家~
    猜你喜欢
    • 2017-10-07
    • 2015-03-26
    • 1970-01-01
    • 2012-01-15
    • 2020-10-18
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    • 2016-11-05
    相关资源
    最近更新 更多