Index: trac/db/mysql_backend.py
===================================================================
--- trac/db/mysql_backend.py	(revision 4937)
+++ trac/db/mysql_backend.py	(working copy)
@@ -161,6 +161,7 @@
                                   host=host, port=port, use_unicode=True)
             self._set_character_set(cnx, 'utf8')
         ConnectionWrapper.__init__(self, cnx)
+        self._is_closed = False
 
     def cast(self, column, type):
         if type == 'int':
@@ -180,5 +181,12 @@
         return self.cnx.insert_id()
 
     def rollback(self):
-        self.cnx.rollback()
-        self.cnx.ping()
+        if self.cnx.ping():
+            self.cnx.rollback()
+        else:
+            self._is_closed = True
+
+    def close(self):
+        if not self._is_closed:
+            self.cnx.close()
+            self._is_closed = True

