標籤:shel nal 通過 mysqldb ini localhost eve unix seve
故障現象:
>>> import MySQLdb>>> conn = MySQLdb.connect(host="localhost",user="root",passwd="tiange1003",db="tian",port=3306,charset="utf8")Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib64/python2.7/site-packages/MySQLdb/__init__.py", line 81, in Connect return Connection(*args, **kwargs) File "/usr/lib64/python2.7/site-packages/MySQLdb/connections.py", line 193, in __init__ super(Connection, self).__init__(*args, **kwargs2)_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來進行通訊的。我們知道,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),我們看到如下的內容:這裡主要是因為我們串連mysql的時候,host用的是localhost, 實際用的是UNIX Domain Socket來進行通訊的。我們知道,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),我們看到如下的內容:
解決方式:
1、查看/etc/my.cnf設定檔
[mysqld]datadir = /usr/local/mysql/datalog-error = /usr/local/mysql/data/error.logpid-file = /usr/local/mysql/data/mysql.piduser = mysqltmpdir = /tmp
在這個設定檔裡面添加
socket = /tmp/mysql.sock
2、解決辦法:
>>> import MySQLdb>>> conn = MySQLdb.connect(host="localhost",user="root",passwd="tiange1003",db="tian",port=3306,charset="utf8",unix_socket=‘/tmp/mysql.sock‘)
python MySQLdb串連mysql時報錯