V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
laoyuan
V2EX  ›  Python

开发机连接本地 MySQL, PHP 能连上 Python 咋连不上?

  •  
  •   laoyuan ·
    laoyuan · 2015-04-12 16:21:49 +08:00 · 4797 次点击
    这是一个创建于 3533 天前的主题,其中的信息可能已经有所发展或是发生改变。
    都是连 localhost:3306 环境 OSX 10.10

    Python 报 61 Connection refused

    File "/Library/Python/2.7/site-packages/pyspider/database/mysql/taskdb.py", line 28, in __init__
    host=host, port=port, autocommit=True)
    File "/Library/Python/2.7/site-packages/mysql/connector/__init__.py", line 162, in connect
    return MySQLConnection(*args, **kwargs)
    File "/Library/Python/2.7/site-packages/mysql/connector/connection.py", line 129, in __init__
    self.connect(**kwargs)
    File "/Library/Python/2.7/site-packages/mysql/connector/connection.py", line 454, in connect
    self._open_connection()
    File "/Library/Python/2.7/site-packages/mysql/connector/connection.py", line 417, in _open_connection
    self._socket.open_connection()
    File "/Library/Python/2.7/site-packages/mysql/connector/network.py", line 472, in open_connection
    errno=2003, values=(self.get_address(), _strioerror(err)))
    mysql.connector.errors.InterfaceError: 2003: Can't connect to MySQL server on 'localhost:3306' (61 Connection refused)
    第 1 条附言  ·  2015-04-23 16:13:00 +08:00
    指定mysql.sock 位置后mysql-connector-python 也连通了
    cnx = mysql.connector.connect(user='root', password='pass', host='localhost', port='3306', unix_socket='/private/tmp/mysql.sock', database='db')

    http://stackoverflow.com/questions/26105726/how-do-i-use-mysql-connector-python-with-mamp
    第 2 条附言  ·  2015-04-23 16:52:13 +08:00
    /Library/Python/2.7/site-packages/mysql/connector/connection.py
    self._unix_socket = '/tmp/mysql.sock' 配置下这一行就好了
    14 条回复    2015-04-23 16:12:35 +08:00
    laoyuan
        1
    laoyuan  
    OP
       2015-04-12 16:34:41 +08:00
    代码对比:
    cnx = mysql.connector.connect(user='root', password='pass', host='localhost', port='3306', database='db')
    $con = mysql_connect('localhost:3306', 'root', 'pass');
    laoyuan
        2
    laoyuan  
    OP
       2015-04-12 22:13:12 +08:00
    伤心,还是走sock吧
    laoyuan
        3
    laoyuan  
    OP
       2015-04-12 22:16:00 +08:00
    看来我对sock的理解有问题,貌似就是sock路径的问题!
    cheng007
        4
    cheng007  
       2015-04-13 09:23:03 +08:00
    python代码你写了database="db",你有在mysql创建这个db吗?
    laoyuan
        5
    laoyuan  
    OP
       2015-04-13 10:29:34 +08:00
    @cheng007 有的,我看别人代码好像没有 database 这个参数也可以
    laoyuan
        6
    laoyuan  
    OP
       2015-04-13 10:34:42 +08:00
    oott123
        7
    oott123  
       2015-04-13 11:27:13 +08:00 via Android
    试试换成 127.0.0.1 ?
    :) 好吧我承认这是一种玄学…
    laoyuan
        8
    laoyuan  
    OP
       2015-04-13 12:02:22 +08:00
    @oott123 试过了,能连上就真是玄学了哈哈
    fxxkgw
        9
    fxxkgw  
       2015-04-13 17:03:01 +08:00
    import MySQLdb
    conn = MySQLdb.connect()
    换MySQLdb试试
    zsx
        10
    zsx  
       2015-04-13 18:10:15 +08:00   ❤️ 1
    @oott123 @laoyuan 用Microsoft SQL Server 2008的时候还真遇到过用127.0.0.1奇慢无比的问题,执行一条最简单的查询用了几分钟……后来发现要在SQL Server配置管理器里MSSQLServer的TCP/IP协议打开……(这不是玄学
    oott123
        11
    oott123  
       2015-04-13 18:13:21 +08:00   ❤️ 1
    @zsx MySQL 的话,如果在 UNIX 下用 localhost ,经常会用 socks 方式连接。具体的机制我也不知道叫什么。
    在所有系统上,如果你的 DNS 配置有问题,对 localhost 解析不正确的话、或者解析到 IPv6 而你的 MySQL 并未监听 IPv6 的情况下也可能遇到问题。
    而 MySQL 的权限机制里,除了用户名、密码之外,还有主机头;如果你配置的用户是 username @ 127.0.0.1 的,那么也有可能遇到连接不上的问题……

    玄学就是懒得解释嘛 :)
    zsx
        12
    zsx  
       2015-04-13 18:19:53 +08:00
    @oott123 前次用PMA创建了一个数据库然后新建了用户并分配了给这个库的所有权限结果就是Access Denied,看了主机头之类全部没问题;最后的解决方案是删除用户,然后新建用户后再创建数据库(啊玄学太可怕了
    laoyuan
        13
    laoyuan  
    OP
       2015-04-23 15:57:52 +08:00
    laoyuan
        14
    laoyuan  
    OP
       2015-04-23 16:12:35 +08:00
    果然,指定mysql.sock 位置后mysql-connector-python 也连通了
    cnx = mysql.connector.connect(user='root', password='pass', host='localhost', port='3306', unix_socket='/private/tmp/mysql.sock', database='db')
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2428 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 05:57 · PVG 13:57 · LAX 21:57 · JFK 00:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.