diff -ur freeradius-server-2.1.12.orig/src/modules/rlm_sql/drivers/rlm_sql_mysql/sql_mysql.c freeradius-server-2.1.12/src/modules/rlm_sql/drivers/rlm_sql_mysql/sql_mysql.c
--- freeradius-server-2.1.12.orig/src/modules/rlm_sql/drivers/rlm_sql_mysql/sql_mysql.c	2011-09-30 07:12:07.000000000 -0700
+++ freeradius-server-2.1.12/src/modules/rlm_sql/drivers/rlm_sql_mysql/sql_mysql.c	2012-01-11 16:39:43.000000000 -0800
@@ -66,6 +66,7 @@
 {
 	rlm_sql_mysql_sock *mysql_sock;
 	unsigned long sql_flags;
+	unsigned int timeout = config->query_timeout;
 
 	if (!sqlsocket->conn) {
 		sqlsocket->conn = (rlm_sql_mysql_sock *)rad_malloc(sizeof(rlm_sql_mysql_sock));
@@ -81,6 +82,15 @@
 
 	mysql_init(&(mysql_sock->conn));
 	mysql_options(&(mysql_sock->conn), MYSQL_READ_DEFAULT_GROUP, "freeradius");
+
+#if (MYSQL_VERSION_ID >= 50000)
+	if(timeout) {
+		mysql_options(&(mysql_sock->conn), MYSQL_OPT_CONNECT_TIMEOUT, &timeout);
+		mysql_options(&(mysql_sock->conn), MYSQL_OPT_READ_TIMEOUT, &timeout);
+		mysql_options(&(mysql_sock->conn), MYSQL_OPT_WRITE_TIMEOUT, &timeout);
+	}
+#endif
+
 #if (MYSQL_VERSION_ID >= 40100)
 	sql_flags = CLIENT_MULTI_RESULTS | CLIENT_FOUND_ROWS;
 #else
