pymysql Can‘t connect to MySQL server on ‘hadoop-master-01‘ ([Errno 8] nodename nor servname provide
今天用python 写了一个获取mysql库表信息的工具,在连接mysql数据库时,代码如下#!/usr/bin/envpython# --*--coding:utf-8 --*--import pymysqlimport socketclass MySqlModule:_url = ""_port = 0_username=""_password=""_db=""_table=""_connec
·
今天用python 写了一个获取mysql库表信息的工具,在连接mysql数据库时,代码如下
#!/usr/bin/env python
# --*--coding:utf-8 --*--
import pymysql
import socket
class MySqlModule:
_url = ""
_port = 0
_username=""
_password=""
_db=""
_table=""
_connectCursor = None
# host=None, user=None, password="",
# database=None, port=0, unix_socket=None,
# charset='', sql_mode=None,
# read_default_file=None, conv=None, use_unicode=None,
# client_flag=0, cursorclass=Cursor, init_command=None,
# connect_timeout=10, ssl=None, read_default_group=None,
# compress=None, named_pipe=None,
# autocommit=False, db=None, passwd=None, local_infile=False,
# max_allowed_packet=16*1024*1024, defer_connect=False,
# auth_plugin_map=None, read_timeout=None, write_timeout=None,
# bind_address=None, binary_prefix=False, program_name=None,
# server_public_key=None
def __init__(self,url,port,database,username,password,tbl):
self._url = url
self._port = int(port)
self._db = database
self._username = username
self._password = password
self._table = tbl
def connectCursor(self):
self._connectCursor = pymysql.connect(self._url,self._db
,self._username
,self._password
,self._port
,charset='utf8').cursor()
def getTableFrame(self):
if self._connectCursor == None:
self.connectCursor()
sql = "show create table {0}.{1}".format(self._db
,self._table)
self._connectCursor.execute(sql)
tableInfo = self._connectCursor.fetchone()
while tableInfo != None :
print(tableInfo)
tableInfo = self._connectCursor.fetchone()
def main():
url = "hadoop-master-01"
port = 3306
db = "test"
username = "root"
password = "xxxxxx"
table = "t1"
print(ip)
connect = MySqlModule(url,port,db,username,password,table)
connect.getTableFrame()
if __name__ == "__main__":
main()
报错,信息如下:
Can't connect to MySQL server on 'hadoop-master-01' ([Errno 8] nodename nor servname provided, or not known
Traceback (most recent call last):
File "/Users/huangshengbiao/IdeaProjects/MyDemoFlink/SqoopPythonModel/com/huang/utils/MySqlModule.py", line 83, in <module>
main()
File "/Users/huangshengbiao/IdeaProjects/MyDemoFlink/SqoopPythonModel/com/huang/utils/MySqlModule.py", line 79, in main
connect.getTableFrame()
File "/Users/huangshengbiao/IdeaProjects/MyDemoFlink/SqoopPythonModel/com/huang/utils/MySqlModule.py", line 55, in getTableFrame
self.connectCursor()
File "/Users/huangshengbiao/IdeaProjects/MyDemoFlink/SqoopPythonModel/com/huang/utils/MySqlModule.py", line 52, in connectCursor
,charset='utf8').cursor()
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/pymysql/__init__.py", line 94, in Connect
return Connection(*args, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/pymysql/connections.py", line 325, in __init__
self.connect()
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/pymysql/connections.py", line 630, in connect
raise exc
pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on 'hadoop-master-01' ([Errno 8] nodename nor servname provided, or not known)")
这个问题,一开始没有注意,上了度娘,找答案
很多说是 /etc/hosts 的问题
我做过了如下测试
1、直接 ping hadoop-master-01,结果如下,没有问题
PING hadoop-master-01 (192.168.181.209): 56 data bytes
64 bytes from 192.168.181.209: icmp_seq=0 ttl=64 time=0.423 ms
64 bytes from 192.168.181.209: icmp_seq=1 ttl=64 time=0.584 ms
64 bytes from 192.168.181.209: icmp_seq=2 ttl=64 time=0.521 ms
64 bytes from 192.168.181.209: icmp_seq=3 ttl=64 time=0.425 ms
64 bytes from 192.168.181.209: icmp_seq=4 ttl=64 time=0.498 ms
64 bytes from 192.168.181.209: icmp_seq=5 ttl=64 time=0.502 ms
64 bytes from 192.168.181.209: icmp_seq=6 ttl=64 time=0.504 ms
64 bytes from 192.168.181.209: icmp_seq=7 ttl=64 time=0.473 ms
64 bytes from 192.168.181.209: icmp_seq=8 ttl=64 time=0.410 ms
2、telnet hadoop-master-01,如果如下:没有问题
xxxx@hadoop-master-01:~$ telnet hadoop-master-01 3306
Trying 192.168.181.209...
Connected to hadoop-master-01.
Escape character is '^]'.
J
5.6.43?l-7oH[o?/jLx:X,rx&P@mysql_native_password
通过如上测试,发现不是/etc/hosts的配置问题
3、最后直接跟踪调试
在 connections.py 的 __init__方法,

到这里为止,可以这断定,是我的会传参位置顺序不对,调整顺序
#!/usr/bin/env python
# --*--coding:utf-8 --*--
import socket
class MySqlModule:
_url = ""
_port = 0
_username=""
_password=""
_db=""
_table=""
_connectCursor = None
# host=None, user=None, password="",
# database=None, port=0, unix_socket=None,
# charset='', sql_mode=None,
# read_default_file=None, conv=None, use_unicode=None,
# client_flag=0, cursorclass=Cursor, init_command=None,
# connect_timeout=10, ssl=None, read_default_group=None,
# compress=None, named_pipe=None,
# autocommit=False, db=None, passwd=None, local_infile=False,
# max_allowed_packet=16*1024*1024, defer_connect=False,
# auth_plugin_map=None, read_timeout=None, write_timeout=None,
# bind_address=None, binary_prefix=False, program_name=None,
# server_public_key=None
def __init__(self,url,port,database,username,password,tbl):
self._url = url
self._port = int(port)
self._db = database
self._username = username
self._password = password
self._table = tbl
def connectCursor(self):
self._connectCursor = pymysql.connect(self._url
,self._username
,self._password
,self._db
,self._port
,charset='utf8').cursor()
def getTableFrame(self):
if self._connectCursor == None:
self.connectCursor()
sql = "show create table {0}.{1}".format(self._db
,self._table)
self._connectCursor.execute(sql)
tableInfo = self._connectCursor.fetchone()
while tableInfo != None :
print(tableInfo)
tableInfo = self._connectCursor.fetchone()
def main():
url = "hadoop-master-01"
port = 3306
db = "test"
username = "root"
password = "xxxx"
table = "t1"
ip = socket.gethostbyname(url)
print(ip)
connect = MySqlModule(url,port,db,username,password,table)
connect.getTableFrame()
if __name__ == "__main__":
main()
更多推荐



所有评论(0)