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.

现在, 我们就可以设置查询超时了:

<?php

 代码如下 复制代码

$mysqli = mysqli_init();

$mysqli->options(11 /*MYSQL_OPT_READ_TIMEOUT*/, 1);

$mysql->real_connect(***);

不过, 因为在libmysql中有重试机制(尝试一次, 重试俩次), 所以, 最终我们设置的超时阈值都会三倍于我们设置的值.

也就是说, 如果我们设置了MYSQL_OPT_READ_TIMEOUT为1, 最终会在3s以后超时结束. 也就是说, 我们目前能设置的最短超时时, 就是3秒…

虽说大了点,, 不过总比没有好, 呵呵

时间: 2024-10-24 22:21:26

mysql设置查询超时方法的相关文章

设置MySQL数据库连接查询超时方法总结

首先打开你的MySql控制台,输入密码后进入   接着敲入命令来悄一悄为什么会超时 SQL Code复制内容到剪贴板 show global variables like 'wait_timeout';                   这里我们可以看到wait_timeout为28800,就是8小时.那么就是说MySQL的服务会在操作间隔8小时后断开,需要再次重连.当我们用java程序的JDBC来连接时又可以让它自动恢复.interactive_timeout:服务器关闭交互式连接前等待活动

mysql 开启查询缓存方法与查询例子

开启缓存,设置缓存大小,具体实施如下: 1.修改配置文件,windows下是my.ini,linux下是my.cnf; 在配置文件的最后追加上:  代码如下 复制代码 query_cache_type = 1 query_cache_size = 600000 需要重启mysql生效: 那么采用第二种方式: b) 开启缓存,两种方式: a)使用mysql命令:  代码如下 复制代码 set global query_cache_type = 1;  set global query_cache_

mysql慢查询配置方法详解

mysql服务器有一项功能,可以检测到哪条sql语句查询得比较慢,就是慢查询slowlog,现在介绍如何开启. 在[mysqld]下面增加如下代码: long_query_time = 1 log-slow-queries = /usr/local/mysql/data/slow.log log-queries-not-using-indexes long_query_time = 1 #定义超过1秒的查询计数到变量Slow_queries. log-slow-queries = /usr/lo

mysql设置远程访问数据库方法

可能是IP没设置好 问题:MySQL权限设置正确,但仍无法远程访问.通过telnet发现3306端口未打开. 分析:MySQL默认只绑定127.0.0.1,即:只有在本机才能访问3306端口. 解决:找到MySQL配置文件,搜索"bind-address",找到这一行: bind-address          = 127.0.0.1 在前面加一个#,注释掉这一行,保存,重启MySQL.再通过远程访问就可以了,telnet可以发现端口也打开了. 例我们配置 1. 确保skip-net

mysql 设置查询缓存_Mysql

可将如下语句 query_cache_size = 268435456 query_cache_type = 1 query_cache_limit = 1048576 存放到/etc/my.cnf文件的[mysqld]下 然后重启mysql数据库 service mysqld restart 就会启动mysql的缓存机制Query Cache. 在使用中,查询缓存会存储一个 SELECT 查询的文本与被传送到客户端的相应结果. 如果之后接收到一个同样的查询,服务器将从查询缓存中检索结果,而不是

mysql慢查询的分析方法

本文主要介绍的是MySQL慢查询分析方法,前一段日子,我曾经设置了一次记录在MySQL数据库中对慢于1秒钟的SQL语句进行查询.想起来有几个十分设置的方法,有几个参数的名称死活回忆不起来了,于是重新整理一下,自己做个笔记. 对于排查问题找出性能瓶颈来说,最容易发现并解决的问题就是MySQL慢查询以及没有得用索引的查询. OK,开始找出MySQL中执行起来不"爽"的SQL语句吧. MySQL慢查询分析方法一: 这个方法我正在用,呵呵,比较喜欢这种即时性的. MySQL5.0以上的版本可以

PHP访问MySQL查询超时处理的方法_Mysql

目前两个客户端扩展库连接超时可以设置选项来操作,比如mysqli: 复制代码 代码如下: <?php //创建对象 $mysqli = mysqli_init(); //设置超时选项 $mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 5); //连接 $mysqli->real_connect('localhost', 'my_user', 'my_password', 'world'); //如果超时或者其他连接失败打印错误信息 if (mysq

MySQL慢查询 mysqldumpslow分析方法

mysql教程优化的第一步应该做的就是排查问题,找出瓶颈,而通常情况下的瓶颈和问题都需要通过观察mysql的运行情况来进行分析,<查看mysql运行状况>这篇文章罗列了一些常用的查看mysql运行信息的方式. 而对于大多数的程序员来说,最容易发现并解决的问题就是mysql的慢查询或者没有利用索引的查询,所以这里主要给大家介绍如何利用官方的mysqldumps教程low工具方便的查看这些信息.如何打开mysql的慢查询,请点击 最简单的方式,在php教程myadmin直接点击状态查看,详细如下图

mysql(slow-query)快速开启慢日志查询的方法

mysql(slow-query)快速开启慢日志查询的方法 mysql有一个功能就是可以log下来运行的比较慢的sql语句,默认是没有这个log的 打开 my.ini ,找到 [mysql] 在其下面添加 long_query_time = 2 log-slow-queries = D:/mysql/logs/slow.log #设置把日志写在那里,可以为空,系统会给 一个缺省的文件 #log-slow-queries = /var/youpath/slow.log linux下host_nam