檢視mysql設定超時 mysql設定查詢超時方法

2021-10-17 16:03:37 字數 2459 閱讀 9050

文章來介紹了自定義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檔案中新增以下 ...