Index: trac/db/mysql_backend.py
===================================================================
--- trac/db/mysql_backend.py	(revision 10394)
+++ trac/db/mysql_backend.py	(working copy)
@@ -63,7 +63,7 @@
     
     Database URLs should be of the form:
     {{{
-    mysql://user[:password]@host[:port]/database
+    mysql://user[:password]@host[:port]/database[?param1=value&param2=value]
     }}}
     """
     implements(IDatabaseConnector)
@@ -186,6 +186,19 @@
         db_name = os.path.basename(db_prop['path'])
 
         args = [self.mysqldump_path]
+        for param in ['read_default_file', 'named_pipe', 'compress',
+                      'unix_socket']:
+            if 'params' in db_prop and param in db_prop['params']:
+                val = db_prop['params'][param]
+                if param == 'compress' and val == 1:
+                    args.extend(['--compress'])
+                elif param == 'unix_socket':
+                    args.extend(['--socket', val])
+                    args.extend(['--protocol', 'socket'])
+                elif param == 'named_pipe' and val == 1:
+                    args.extend(['--protocol', 'pipe'])
+                elif param == 'read_default_file':
+                    args.extend(['--defaults-file=', val])
         if 'host' in db_prop:
             args.extend(['-h', db_prop['host']])
         if 'port' in db_prop:
@@ -193,7 +206,6 @@
         if 'user' in db_prop:
             args.extend(['-u', db_prop['user']])
         args.extend(['-r', dest_file, db_name])
-        
         environ = os.environ.copy()
         if 'password' in db_prop:
             environ['MYSQL_PWD'] = str(db_prop['password'])
@@ -225,8 +237,21 @@
             password = ''
         if port == None:
             port = 3306
-        cnx = MySQLdb.connect(db=path, user=user, passwd=password,
-                              host=host, port=port, charset='utf8')
+        opt = {}
+        for param in ['compress', 'named_pipe', 'init_command',
+                      'read_default_file', 'read_default_group',
+                      'unix_socket']:
+            if params.has_key(param):
+                val = params[param]
+                if param in ('compress', 'named_pipe'):
+                    try:
+                        opt[param] = int(val)
+                    except ValueError:
+                        pass
+                else:
+                    opt[param] = val
+        cnx = MySQLdb.connect(db=path, user=user, passwd=password, host=host,
+                              port=port, charset='utf8', **opt)
         if hasattr(cnx, 'encoders'):
             # 'encoders' undocumented but present since 1.2.1 (r422)
             cnx.encoders[Markup] = cnx.encoders[types.UnicodeType]

