[乐意黎原创]MySQL抛Warning: PDO::query(): MySQL server has gone away in

最近乐意黎在转移主机时(新主机: Centos 7 +php7+apache +mysql ),页面访问MySQL在抛错:
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] 时,请执行以下操作

[[email protected] mysql]# mkdir logs

[[email protected] mysql]# echo "" > /usr/local/mysql/logs/mysqld.log
[[email protected] 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

猜你喜欢

转载自blog.csdn.net/aerchi/article/details/80780112