python MySQLdb鏈接mysql失敗

Traceback (most recent call last):
  File "./test_db.py", line 12, in < module>
    db='mysite')
  File "build/bdist.linux-x86_64/egg/MySQLdb/__init__.py", line 81, in Connect
  File "build/bdist.linux-x86_64/egg/MySQLdb/connections.py", line 187, in __init__
 
_mysql_exceptions.OperationalError: (2002, "Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)")

 

這裏主要是由於咱們鏈接mysql的時候,host用的是localhost, 實際用的是UNIX Domain Socket(具體見參考文獻(1))來進行通訊的。咱們知道,UNIX Domain Socket的地址是一個socket類型的文件在文件系統中的路徑,若是這個路徑不存在的話,鏈接的時候就會失敗。上面提示的錯誤緣由是」Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2)」,從字面意思上來看,是說沒法經過’/var/lib/mysql/mysql.sock’這個socket來鏈接本地的mysql sever,這時候問題基本就比較明顯了,應該是mysql配置的本地鏈接的socket不是’/var/lib/mysql/mysql.sock’這個路徑的緣由。接下來咱們來驗證咱們的想法,打開mysql的配置文件(/etc/my.cnf),咱們看到以下的內容:html


    咱們能夠看到,本地mysql server配置的Unix Domain Socket是/tmp/mysql.sock,與上面python MySQLdb所用的不同,這也印證了咱們前面的猜測,找到了問題的緣由。python

  • 3. 解決問題的方法mysql

  • 知道了問題所在,咱們就能夠對症下藥了,下面提供幾種能夠解決問題的方案:
    (1)在python MySQLdb鏈接的時候,指定所用的unix_socketlinux

    1
    2
    3
    4
    5
    6
    db  MySQLdb.host
                         port
                         
                         passwd
                         db
                         unix_socket

    (2)修改本地mysql server的UNIX Domain Socketweb

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    # The following options will be passed to all MySQL clients
    [client]
    #password       = your_password
    port            = 3306
    socket          = /var/lib/mysql/mysql.sock
     
    # The MySQL server
    [mysqld]
    bind-address = 10.12.22.98
    port            = 3306
    socket          = /var/lib/mysql/mysql.sock
    # ...

    (3)修改本地mysql server支持遠程訪問(具體見參考文獻(2)),採用普通socket進行鏈接sql

    1
    2
    3
    4
    5
    db  MySQLdb.host
                         port
                         
                         passwd
                         db
  • 4. 參考文獻shell

  • (1)Unix Domain Socket
    (2)mysql支持遠程訪問socket

相關文章
相關標籤/搜索