Index: django/db/backends/mysql/base.py
===================================================================
--- django/db/backends/mysql/base.py	(revision 2360)
+++ django/db/backends/mysql/base.py	(working copy)
@@ -9,6 +9,7 @@
 from MySQLdb.converters import conversions
 from MySQLdb.constants import FIELD_TYPE
 import types
+import threading
 
 DatabaseError = Database.DatabaseError
 
@@ -48,12 +49,13 @@
 
 class DatabaseWrapper:
     def __init__(self):
-        self.connection = None
+        self.threadlocal = threading.local()
         self.queries = []
 
     def cursor(self):
         from django.conf import settings
-        if self.connection is None:
+        conn = getattr(self.threadlocal, 'connection', None)
+        if conn is None:
             kwargs = {
                 'user': settings.DATABASE_USER,
                 'db': settings.DATABASE_NAME,
@@ -63,28 +65,34 @@
             }
             if settings.DATABASE_PORT:
                 kwargs['port'] = settings.DATABASE_PORT
-            self.connection = Database.connect(**kwargs)
-        cursor = self.connection.cursor()
-        if self.connection.get_server_info() >= '4.1':
+            conn = self.threadlocal.connection = Database.connect(**kwargs)
+        else:
+            conn.ping()
+        cursor = conn.cursor()
+        if conn.get_server_info() >= '4.1':
             cursor.execute("SET NAMES utf8")
         if settings.DEBUG:
             return util.CursorDebugWrapper(MysqlDebugWrapper(cursor), self)
         return cursor
-
+    
     def commit(self):
-        self.connection.commit()
+        conn = getattr(self.threadlocal, 'connection', None)
+        if conn is not None:
+            conn.commit()
 
     def rollback(self):
-        if self.connection:
+        conn = getattr(self.threadlocal, 'connection', None)
+        if conn is not None:
             try:
-                self.connection.rollback()
+                conn.rollback()
             except Database.NotSupportedError:
                 pass
 
     def close(self):
-        if self.connection is not None:
-            self.connection.close()
-            self.connection = None
+        conn = getattr(self.threadlocal, 'connection', None)
+        if conn is not None:
+            conn.close()
+            self.threadlocal.connection = None
 
 supports_constraints = True
 
