有时当您的MySQL连接打开时间过长时,如果没有查询的时间超过my.cnf中的wait_timeout值,则会删除与DB的连接.你会得到"MySQL服务器已经消失"的超时错误.
这是我在代码中实现自动重新连接的方法:
class databaseClass {
var $conn;
var $db;
public function __construct() {
$this->connect();
}
public function connect() {
$this->conn = mysql_connect(DB_HOST, DB_USER, DB_PASS);
$this->db = mysql_select_db(DB_NAME, $this->conn);
}
public function disconnect() {
mysql_close($this->conn);
}
public function reconnect() {
$this->disconnect();
$this->connect();
}
public function queryCompanyExist($company) {
//auto reconnect if MySQL server has gone away
if (!mysql_ping($this->conn)) $this->reconnect();
$query = "SELECT name FROM company WHERE name='$company'";
$result = mysql_query($query);
if (!$result) print mysql_error() . "\r\n";
return mysql_fetch_assoc($result);
}
}
Run Code Online (Sandbox Code Playgroud)
有关mysql_ping的更多信息,请参阅此处
来自C mysql API:
my_bool reconnect = 0; mysql_options(&mysql,MYSQL_OPT_RECONNECT,&reconnect); 请参阅http://dev.mysql.com/doc/refman/5.6/en/auto-reconnect.html
从php.ini中的PHP mysqli设置全局:mysqli.reconnect = On请参阅http://www.php.net/manual/en/mysqli.configuration.php#ini.mysqli.reconnect
对于PHP PDO mysql驱动程序,它应该可以通过PDO :: setAttribute获得,但我无法找到指示它已实现的文档.代码似乎试图尊重MYSQL_OPT_RECONNECT,这是mysql现在需要的,但是在初始实现中没有这样做(https://bugs.php.net/bug.php?id=58863).58863中补丁的目的是允许:新的PDO('mysql:host = xxx','xx','xx',array(PDO :: MYSQL_OPT_RECONNECT => true));
重新连接发生的原因是多种多样的,但通常是因为汇集的连接集包含由于缺乏使用而超时的成熟连接.默认情况下,mysql连接在8小时后超时.请参阅:http://dev.mysql.com/doc/refman/5.6/en/gone-away.html
有关重新连接的副作用,请参阅:http://dev.mysql.com/doc/refman/5.6/en/auto-reconnect.html
| 归档时间: |
|
| 查看次数: |
16034 次 |
| 最近记录: |