OperationalError: (OperationalError) (2003, "Can't connect to MySQL server on '192.168.129.139'
Posted
技术标签:
【中文标题】OperationalError: (OperationalError) (2003, "Can\'t connect to MySQL server on \'192.168.129.139\' (111)") 无 无【英文标题】:OperationalError: (OperationalError) (2003, "Can't connect to MySQL server on '192.168.129.139' (111)") None NoneOperationalError: (OperationalError) (2003, "Can't connect to MySQL server on '192.168.129.139' (111)") 无 无 【发布时间】:2013-05-04 13:01:40 【问题描述】:我正在尝试在运行 12.04 的 Ubuntu 机器上使用 mysql 创建一个远程数据库。
它有一个启用远程登录且没有密码的root用户。我已经启动了服务器。
输出
sudo netstat -tap | grep mysql
显示
tcp 0 0 localhost:mysql *:* LISTEN 13246/mysqld
我使用创建了一个名为 nwtopology 的数据库(如上所述,root 还没有密码。)
create database nwtopology
grant all privileges on *.* to root@192.168.129.221
FLUSH PRIVILEGES;
在同样运行 Ubuntu 12.04 的客户端机器上,我使用 python 脚本使用 sqlalchemy 连接到远程 mysql 数据库。
from pox.core import core
import pox.openflow.libopenflow_01 as of
import re
import datetime
import time
from sqlalchemy import create_engine, ForeignKey
from sqlalchemy import Column, Date, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship, backref
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.sql.expression import exists
log = core.getLogger()
engine = create_engine('mysql://root@192.168.129.139/nwtopology', echo=False)
Base = declarative_base()
Session = sessionmaker(bind=engine)
session = Session()
class SourcetoPort(Base):
""""""
__tablename__ = 'source_to_port'
id = Column(Integer, primary_key=True)
port_no = Column(Integer)
src_address = Column(String,index=True)
#-----------------------------------------
def __init__(self, src_address,port_no):
""""""
self.src_address = src_address
self.port_no = port_no
create_engine() 调用失败并出现以下错误。
POX 0.1.0 (betta) / Copyright 2011-2013 James McCauley, et al.
Traceback (most recent call last):
File "/home/karthik/ms_thesis/pox/pox/boot.py", line 89, in do_import2
__import__(name, globals(), locals())
File "/home/karthik/ms_thesis/pox/custom/tutorial.py", line 39, in <module>
Base.metadata.create_all(engine)
File "/usr/lib/python2.7/dist-packages/sqlalchemy/schema.py", line 2515, in create_all
tables=tables)
File "/usr/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 2230, in _run_visitor
conn = self.contextual_connect(close_with_result=False)
File "/usr/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 2340, in contextual_connect
self.pool.connect(),
File "/usr/lib/python2.7/dist-packages/sqlalchemy/pool.py", line 210, in connect
return _ConnectionFairy(self).checkout()
File "/usr/lib/python2.7/dist-packages/sqlalchemy/pool.py", line 371, in __init__
rec = self._connection_record = pool._do_get()
File "/usr/lib/python2.7/dist-packages/sqlalchemy/pool.py", line 697, in _do_get
con = self._create_connection()
File "/usr/lib/python2.7/dist-packages/sqlalchemy/pool.py", line 174, in _create_connection
return _ConnectionRecord(self)
File "/usr/lib/python2.7/dist-packages/sqlalchemy/pool.py", line 256, in __init__
self.connection = self.__connect()
File "/usr/lib/python2.7/dist-packages/sqlalchemy/pool.py", line 316, in __connect
connection = self.__pool._creator()
File "/usr/lib/python2.7/dist-packages/sqlalchemy/engine/strategies.py", line 80, in connect
return dialect.connect(*cargs, **cparams)
File "/usr/lib/python2.7/dist-packages/sqlalchemy/engine/default.py", line 280, in connect
return self.dbapi.connect(*cargs, **cparams)
File "/usr/lib/python2.7/dist-packages/MySQLdb/__init__.py", line 81, in Connect
return Connection(*args, **kwargs)
File "/usr/lib/python2.7/dist-packages/MySQLdb/connections.py", line 187, in __init__
super(Connection, self).__init__(*args, **kwargs2)
OperationalError: (OperationalError) (2003, "Can't connect to MySQL server on '192.168.129.139' (111)") None None
我不知道为什么会这样?非常感谢任何帮助?
【问题讨论】:
错误告诉你没有 MySQL 服务器在监听主机 192.168.129.139 上的mysql
端口。事实上,在那个端口上可能根本没有监听任何东西。 (您可以在 shell 中使用 nc 192.168.129.139 3306
或 Python 中的 socket.create_connection
来验证这一点。)
如果你问为什么那里没有服务器在监听……那不是 Python 问题,也不是编程问题。你配置有问题,你可能想去serverfault.com寻求帮助。
同时,三个明显的可能性: (1) 192.168.129.139 不是运行 MySQL 的机器的地址。 (2) MySQL 不在您尝试连接的同一端口上运行。我相信默认端口是 3306(我的/etc/services
同意……),但您可以将其配置为在任何端口上运行,并且可以将任何端口传递给连接调用。 (3) MySQL 服务正在侦听错误的接口——例如,它正在侦听 localhost 并且您尝试通过 eth0 进行连接,反之亦然。
【参考方案1】:
看起来 mysql 被配置为仅在 localhost 上侦听。
您可以通过在客户端计算机上运行 telnet 192.168.129.139 3306
来测试它。
最可能的原因 - mysqld 被配置为这样做。
请尝试关注Configuration step described here:
编辑 /etc/mysql/my.cnf
文件以配置 MySQL 以侦听来自网络主机的连接,将 bind-address 指令更改为服务器的 IP 地址。例如,将 192.168.0.5 替换为适当的地址。如果没有这样的条目 - 取消注释或创建新行。
bind-address = 192.168.0.5
然后重启mysqld
sudo service mysql restart
然后使用 telnet 或再次运行您的应用程序进行测试。 netstat 也会有 mysqld 的第二个条目。
【讨论】:
+1 感谢您提供清晰的大纲。如果有人这样做但仍然无法连接(并且正在运行 Ubuntu),请检查您的防火墙设置并允许 3306 作为端口。 我还必须创建一个具有足够权限的新用户,可以从外部连接(请参阅here)。 我遵循了答案中给出的内容,但仍然无法正常工作。然后我发现“bind-address”参数在“/etc/mysql/mysql.conf.d/mysqld.cnf”文件中。在那里评论它并且它有效! 链接已经失效了。以上是关于OperationalError: (OperationalError) (2003, "Can't connect to MySQL server on '192.168.129.139'的主要内容,如果未能解决你的问题,请参考以下文章
sqlalchemy.exc.OperationalError:(sqlite3.OperationalError)没有这样的表:mytable
sqlalchemy.exc.OperationalError: (_mysql_exceptions.OperationalError) (2059, "Authentication pl
OperationalError: (OperationalError) (2003, "Can't connect to MySQL server on '192.168.129.139'
Flask框架下的sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1045)问题