AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 414338
Accepted
Michael Hampton
Michael Hampton
Asked: 2012-08-05 13:57:09 +0800 CST2012-08-05 13:57:09 +0800 CST 2012-08-05 13:57:09 +0800 CST

MySQL 错误:(2003,“无法连接到‘2001:db8:81:2c::2’ (-9) 上的 MySQL 服务器”)

  • 772

我正在尝试在 CentOS 6.3 上设置 Zenoss 4.2.0 以通过 IPv6 监控远程 MySQL 5.5.25a 服务器。防火墙为监控服务器打开,我可以从命令行正常连接:

[root@zenoss ~]# mysql -u zenoss -p -h 2001:db8:81:2c::2
...
mysql> SELECT USER(),CURRENT_USER();
+-----------------------------------------+-----------------------------------------+
| USER()                                  | CURRENT_USER()                          |
+-----------------------------------------+-----------------------------------------+
| zenoss@2001:db8:16:bf:5054:ff:fec0:f7a5 | zenoss@2001:db8:16:bf:5054:ff:fec0:f7a5 |
+-----------------------------------------+-----------------------------------------+
1 row in set (0.09 sec)

然而,Zenoss 生成了一个事件“No performance data from plugin”,其详细信息抱怨它无法连接到服务器:

MySQL Error: (2003, "Can't connect to MySQL server on '2001:db8:81:2c::2' (-9)")

据我所知,-9 甚至不是一个有效的错误号。当然,用谷歌搜索负数是不可能的。

在此处输入图像描述

我检查了 zMySqlUsername 和 zMySqlPassword - 不止一次 - 它们具有正确的值。

我也试过用括号输入 IPv6 地址,但 MySQL 根本不喜欢这样,无论是在 Zenoss 中还是在命令行中。

这个问题的原因是什么?

mysql
  • 3 3 个回答
  • 2525 Views

3 个回答

  • Voted
  1. Best Answer
    Michael Hampton
    2012-08-17T10:42:29+08:002012-08-17T10:42:29+08:00

    最后放弃了,自己去调试这个。

    根据@SelivanovPavel 的回答,我打开调试zencommand并等待,果然,ZenPack 失败了。

    2012-08-16 18:16:14,092 INFO zen.zencommand: Datasource MySQL/mysql command: /opt/zenoss/ZenPacks/ZenPacks.zenoss.MySqlMonitor-2.2.0-py2.7.egg/ZenPacks/zenoss/MySqlMonitor/libexec/check_mysql_stats.py -H 2001:db8:81:2c::2 -p 3306 -u zenoss -w 'password' -g
    2012-08-16 18:16:14,100 DEBUG zen.zencommand: Running /opt/zenoss/ZenPacks/ZenPacks.zenoss.MySqlMonitor-2.2.0-py2.7.egg/ZenPacks/zenoss/MySqlMonitor/libexec/check_mysql_stats.py
    2012-08-16 18:16:14,544 DEBUG zen.zencommand: Datasource: mysql Received exit code: 1 Output: 'MySQL Error: (2003, "Can\'t connect to MySQL server on \'2001:db8:81:2c::2\' (-9)")\n'
    2012-08-16 18:16:14,545 DEBUG zen.zencommand: Process MySQL/mysql stopped (1), 0.43 seconds elapsed 
    

    所以我深入研究了 ZenPack,发现它正在pymysql从/opt/zenoss/lib/python.

    在从 python 命令行进行测试时,我发现异常是从哪里抛出的:

    >>> sys.path.insert(0, "/opt/zenoss/lib/python");
    >>> import pymysql
    >>> pymysql.install_as_MySQLdb()
    >>> import MySQLdb
    >>> self.conn = MySQLdb.connect(host="2001:db8:81:2c::2", port=3306, db='', user='zenoss', passwd='password')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/opt/zenoss/lib/python/pymysql/__init__.py", line 93, in Connect
        return Connection(*args, **kwargs)
      File "/opt/zenoss/lib/python/pymysql/connections.py", line 504, in __init__
        self._connect()
      File "/opt/zenoss/lib/python/pymysql/connections.py", line 673, in _connect
        raise OperationalError(2003, "Can't connect to MySQL server on %r (%s)" % (self.host, e.args[0]))
    pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on '2001:db8:81:2c::2' (-9)")
    

    在附近进行检查connections.py时,我惊恐地发现它正试图打开一个AF_INET套接字,而且没有任何代码可以打开一个AF_INET6套接字。轰,瞬间失败。

    目前的版本pymysql似乎也包含这个缺陷;没有任何 IPv6 支持。

    所以“答案”是我将不得不修复pymysql。不是我想如何度过我的下午。

    这一点讨厌的 hackery 使事情正常(尽管你需要 Python 2.6)。打开/opt/zenoss/lib/python/pymysql/connections.py并搜索AF_INET660 行附近。然后进行以下更改:

                     if DEBUG: print 'connected using unix_socket'
                 else:
    -                sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    -                t = sock.gettimeout()
    -                sock.settimeout(self.connect_timeout)
    -                sock.connect((self.host, self.port))
    -                sock.settimeout(t)
    +                sock = socket.create_connection((self.host, self.port), self.connect_timeout)
                     self.host_info = "socket %s:%d" % (self.host, self.port)
                     if DEBUG: print 'connected using socket'
    

    这已经在上游 pymysql 中得到修复,并且应该在未来的版本中可用。

    • 11
  2. Selivanov Pavel
    2012-08-17T10:07:54+08:002012-08-17T10:07:54+08:00

    检查,是否有任何连接尝试:

    tshark -i br200 -f "host 2001:db8:81:2c::2"
    

    tshark 是抓包程序 Wireshark 的控制台版本。

    如果 zenoss 服务用户不是 root - 尝试从他的 shell 连接到 mysql:

    su zenoss
    mysql ...
    

    Zenoss 日志(设置 > 守护进程)怎么样?尝试增加日志的详细程度(设置 logseverity = 30),看看会发生什么。

    该文档可能有用:Troubleshooting_Zenoss

    • 5
  3. rnxrx
    2012-08-05T14:00:09+08:002012-08-05T14:00:09+08:00

    尝试将其放在方括号 [2001:470:...] 或 ipv6:[] 中。许多解析器无法区分文本条目和 v6 地址。

    • 3

相关问题

  • 开源与专有关系 db mgt 系统的优缺点是什么?

  • 在 solaris 10 上为 mysql 设置 max_allowed_pa​​cket

  • 如何移动 MySQL 的数据目录?

  • 通过 VPN 连接什么是远程服务器 IP?

  • mysql崩溃

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve