文章來介紹了自定義mysql查詢超時的時間長度,下面我們來看看詳細的設定方法。
首先, 在libmysql中, 是提供了mysql_opt_read_timeout設定項的, 並且libmysql中提供了設定相關設定項的api,
**如下
mysql_options:
int stdcall
mysql_options(mysql *mysql,enum mysql_option option, const void *arg)
dbug_enter("mysql_option");
dbug_print("enter",("option: %d",(int) option));
switch (option) {
case mysql_opt_connect_timeout:
mysql->options.connect_timeout= *(uint*) arg;
break;
/** 讀超時時間 */
case mysql_opt_read_timeout:
mysql->options.read_timeout= *(uint*) arg;
break;
case mysql_opt_write_timeout:
mysql->options.write_timeout= *(uint*) arg;
break;
case mysql_opt_compress:
mysql->options.compress= 1;
/* 以下省略 */
但是, 可惜的是, 目前只有mysqli擴充套件, 把mysql_options完全暴露給了php:
**如下
php_function(mysqli_options)
/** 有省略 */
switch (z_type_pp(mysql_value)) {
/** 沒有任何限制, 直接傳遞給mysql_options */
case is_string:
ret = mysql_options(mysql->mysql, mysql_option, z_strval_pp(mysql_value));
break;
default:
convert_to_long_ex(mysql_value);
l_value = z_lval_pp(mysql_value);
ret = mysql_options(mysql->mysql, mysql_option, (char *)&l_value);
break;
return_bool(!ret);
但是因為mysqli並沒有匯出這個常量, 所以我們需要通過檢視mysql的**, 得到mysql_opt_read_timeout的實際值, 然後直接呼叫mysql_options:
**如下
enum mysql_option
mysql_opt_connect_timeout, mysql_opt_compress, mysql_opt_named_pipe,
mysql_init_command, mysql_read_default_file, mysql_read_default_group,
mysql_set_charset_dir, mysql_set_charset_name, mysql_opt_local_infile,
mysql_opt_protocol, mysql_shared_memory_base_name, mysql_opt_read_timeout,
mysql_opt_write_timeout, mysql_opt_use_result,
mysql_opt_use_remote_connection, mysql_opt_use_embedded_connection,
mysql_opt_guess_connection, mysql_set_client_ip, mysql_secure_auth,
mysql_report_data_truncation, mysql_opt_reconnect,
mysql_opt_ssl_verify_server_cert
可以看到, mysql_opt_read_timeout為11.
現在, 我們就可以設定查詢超時了:
**如下
$mysqli = mysqli_init();
$mysqli->options(11 /*mysql_opt_read_timeout*/, 1);
$mysql->real_connect(***);
不過, 因為在libmysql中有重試機制(嘗試一次, 重試倆次), 所以, 最終我們設定的超時閾值都會三倍於我們設定的值.
也就是說, 如果我們設定了mysql_opt_read_timeout為1, 最終會在3s以後超時結束. 也就是說, 我們目前能設定的最短超時時, 就是3秒…
雖說大了點,, 不過總比沒有好, 呵呵
mysql超時設定的問題
查了一下,原來是mysql超時設定的問題 如果連線閒置8小時 8小時內沒有進行資料庫操作 mysql就會自動斷開連線,要重啟tomcat.解決辦法 一種.如果不用hibernate的話,則在 connection url中加引數 autoreconnect true jdbc.url jdbc my...
mysql配置查詢超時 為MySQL設定查詢超時
昨天有人在群裡問,mysql是否可以設定讀寫超時 非連線超時 如果可以就可以避免一條sql執行過慢,導致php超時錯誤.這個,其實可以有.只不過稍微要麻煩點.首先,在libmysql中,是提供了mysql opt read timeout設定項的,並且libmysql中提供了設定相關設定項的api,...
php int 設定超時,php如何設定超時時間
php設定超時的解決方法 1 初始設定指令碼執行時間 開啟php.ini檔案,找到 max execution time 30 修改為 max execution time 600 如果你沒有伺服器修改許可權,可通過內建php指令碼的方法設定超時時間,在需要首席執行官時間操作的php檔案中新增以下 ...