I'm having an issue connecting to my local MySQL database using Python's MySQLdb library. The script has been working well previously, but I will occasionally get the MySQL error in the title. There seems to be no explanation for when the error occurs, and the script is always run from the same machine with the same arguments.
The MySQL server is running as a service on Windows XP SP3 using port 3306 (locally hosted phpMyAdmin works), and the script is run from an Ubuntu 10.04 guest operating system in Oracle VM VirtualBox.
I am currently working around this issue by opening a command prompt and executing 'net stop MySQL' then 'net start MySQL'. This allows me to run the script a few times again before resulting in the error, which I've been fixing by restarting the MySQL service.
As I am still making changes to the script, there are occasions when the script raises an exception and doesn't exit gracefully, though I do catch the exception and close the cursor and connection.
The code to connect to the database:
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,e.args) raise
The full error generated when this happens is as follows:
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")
sudo vi /etc/mysql/my.cnf
bind-address = 127.0.0.1
sudo reboot now
That's it. Be aware that this will make your mysql server less secure as you are exposing it.