У меня проблема с подключением к моей локальной базе данных MySQL с использованием библиотеки Mythondb Python. Сценарий работал хорошо ранее, но я иногда получаю ошибку MySQL в заголовке. Кажется, нет никакого объяснения, когда возникает ошибка, и сценарий всегда запускается с одного компьютера с одинаковыми аргументами.
Сервер MySQL работает как служба в Windows XP SP3 с использованием порта 3306 (работает локально размещенный phpMyAdmin), а сценарий запускается из гостевой операционной системы Ubuntu 10.04 в Oracle VM VirtualBox.
В настоящее время я работаю вокруг эта проблема, открыв командную строку и выполнив «net stop MySQL», затем «net start MySQL». Это позволяет мне запускать сценарий несколько раз, прежде чем привести к ошибке, которую я исправил, перезапустив службу MySQL.
Поскольку я все еще делаю изменения в сценарии, бывают случаи, когда сценарий вызывает исключение и не завершается корректно, хотя я перехватываю исключение и закрываю курсор и соединение.
Код для подключения к базе данных:
def __init__(self):
try:
print "Connecting to the MySQL database..."
self.conn = MySQLdb.connect( host = "192.168.56.1",
user = "guestos",
passwd = "guestpw",
db = "testdb")
self.cursor = self.conn.cursor(MySQLdb.cursors.DictCursor)
print "MySQL Connection OK"
except MySQLdb.Error, e:
print "MySQLdb error %d: %s" % (e.args[0],e.args[1])
raise
Полная ошибка, возникающая при этом, выглядит следующим образом:
MySQLdb error 2013: Lost connection to MySQL server at 'reading initial communication packet', system error: 0
Traceback (most recent call last):
File "search.py", line 45, in <module>
dataHandler = DataHandler()
File "/home/guestos_user/workspace/Search/src/data_handler.py", line 25, in __init__
db = "testdb")
File "/usr/lib/pymodules/python2.6/MySQLdb/__init__.py", line 81, in Connect
return Connection(*args, **kwargs)
File "/usr/lib/pymodules/python2.6/MySQLdb/connections.py", line 170, in __init__
super(Connection, self).__init__(*args, **kwargs2)
_mysql_exceptions.OperationalError: (2013, "Lost connection to MySQL server at 'reading initial communication packet', system error: 0")
Я видел, как это происходило, когда дочерние процессы пытались использовать один и тот же идентификатор соединения mysql (решение = создавать новые соединения для каждого дочернего процесса). Я не уверен, возможно ли это также при совместном использовании объектов соединения с несколькими потоками.
Однако это только одна из многих возможных причин. См. ответ VVS в Ошибка MySQL 2013 для получения списка ресурсов по устранению неполадок.
Этот отчет об ошибке может вас заинтересовать. Не знаю, поможет ли это вам, но некоторые смогли решить эту проблему, указав имя сервера, а не ip-адрес в свойствах соединения.