--- apr_dbd_mysql.c.prev	2006-05-24 12:42:44.000000000 +1000
+++ apr_dbd_mysql.c	2006-05-24 15:18:12.000000000 +1000
@@ -569,6 +569,9 @@
     size_t klen;
     const char *value;
     size_t vlen;
+    my_bool do_reconnect = 1;
+    MYSQL *tmp_conn;
+    
     struct {
         const char *field;
         const char *value;
@@ -583,8 +586,8 @@
     };
     unsigned int port = 0;
     apr_dbd_t *sql = apr_pcalloc(pool, sizeof(apr_dbd_t));
-    sql->conn = mysql_init(sql->conn);
-    if ( sql->conn == NULL ) {
+    tmp_conn = mysql_init(0);
+    if ( tmp_conn == NULL ) {
         return NULL;
     }
     for (ptr = strchr(params, '='); ptr; ptr = strchr(ptr, '=')) {
@@ -614,10 +617,18 @@
     if (fields[4].value != NULL) {
         port = atoi(fields[4].value);
     }
-    sql->conn = mysql_real_connect(sql->conn, fields[0].value,
+    
+
+    sql->conn = mysql_real_connect(tmp_conn, fields[0].value,
                                    fields[1].value, fields[2].value,
                                    fields[3].value, port,
                                    fields[5].value, CLIENT_FOUND_ROWS);
+    if(!sql->conn) mysql_close(tmp_conn);
+#if MYSQL_VERSION_ID >= 50013
+    mysql_options(sql->conn, MYSQL_OPT_RECONNECT, &do_reconnect);
+#elif MYSQL_VERSION_ID >= 50003
+    sql->conn->reconnect = 1;
+#endif				   
     return sql;
 }
 static apr_status_t dbd_mysql_close(apr_dbd_t *handle)
