生成 min 作用 mys 外部连接 即使 方式 根据 lib
[root@cml python]# cat test.py | head -n 20
#!/usr/local/bin/python
'''author = chenmingle'''
'''Description:get mysql status'''
import os
import sys
try:
import MySQLdb as mysql
except Exception, e:
print e
print "pip install MySQL-python"
sys.exit(1)
con = mysql.connect(host='localhost',user='root',passwd='Meimeifa123456',)
[root@cml python]# python test.py slave_status
Traceback (most recent call last):
File "test.py", line 14, in
con = mysql.connect(user='zabbix',passwd='',port=3306)
File "/usr/local/lib/python2.7/site-packages/MySQLdb/__init__.py", line 81, in Connect
return Connection(*args, **kwargs)
File "/usr/local/lib/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)")
看了一下,我的 / etc/my.cnf 里, socket 设置的是,/tmp/mysql.sock,我把该项目修改为 /var/lib/mysql/mysql.sock,得到了解决.
[root@cml python]# vim /etc/my.cnf
socket = /var/lib/mysql/mysql.sock
重启 mysql 服务
如果仍然报错,那应该就是权限的问题了.
需要说明的是,我之前一直没有理解 mysql.sock 这个文件的作用,但是今天理解了.
如下是我从网上搜索到的解释:
Mysql 有两种连接方式:
(1),TCP/IP
(2),socket
对 mysql.sock 来说,其作用是程序与 mysqlserver 处于同一台机器,发起本地连接时可用.
例如你无须定义连接 host 的具体 IP 得,只要为空或 localhost 就可以.
在此种情况下,即使你改变 mysql 的外部 port 也是一样可能正常连接.
因为你在 my.ini 中或 my.cnf 中改变端口后,mysql.sock 是随每一次 mysql server 启动生成的.已经根据你在更改完 my.cnf 后重启 mysql 时重新生成了一次,信息已跟着变更.
那么对于外部连接,必须是要变更 port 才能连接的.
解决 mysql-socket 报错问题
来源: http://www.bubuko.com/infodetail-2466899.html