Warning : PDO::query(): MySQL server has gone away in /usr/local/apache/websites/index.php on line 111
Warning : PDO::query(): Error reading result set's header in /usr/local/apache/websites/index.php on line 111
Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error: 2006 MySQL server has gone away in /usr/local/apache/websites/index.php:111 Stack trace: #0 /usr/local/apache/websites/index.php(111): PDO->query('SELECT * FROM `...') #1 {main} thrown in /usr/local/apache/websites/index.php on line 111
解决办法:(应用时必须重启mysql数据库~~ systemctl restart mysqld )
A . 在mysql配置文件/etc/my.cnf中添加或修改为以下配置:
[mysqld_safe]
log-error=/usr/local/mysql/logs/mysqld.log
pid-file=/var/run/mysqld.pid
##########################
# time out
##########################
connect_timeout = 20
wait_timeout = 2880000
interactive_timeout = 2880000
##########################
# connection
##########################
max_connections = 2000
max_user_connections = 1900
max_connect_errors = 100000
max_allowed_packet = 1G
##########################
当打开 [mysqld_safe] 时,请执行以下操作
[root@aerchi.com mysql]# mkdir logs
[root@aerchi.com mysql]# echo "" > /usr/local/mysql/logs/mysqld.log
[root@aerchi.com mysql]# chown -R mysql:mysql /usr/local/mysql/logs/mysqld.log
B. 修改 连接MySQL的php文件
增加 PDO::ATTR_PERSISTENT => false, PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true,
如下:
$PDO = @new PDO("mysql:host=$DB_HOST;dbname=$DB_NAME","$DB_USER","$DB_PASSWORD", array(PDO::ATTR_PERSISTENT => false, PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8';"));
C. 修改 php.ini
vim /etc/php.ini
mysqli.reconnect = Off
修改成:
mysqli.reconnect = On
乐意黎原创
2018-06-23 00:24