繁体   English   中英

SQLSTATE [HY000]:常规错误:2006 MySQL服务器已消失,无法创建临时表

[英]SQLSTATE[HY000]: General error: 2006 MySQL server has gone away creating temporary table

我所看到的一切都是由于插件或“怪异”的配置或数据集造成的。

我正在尝试使用PHP,MySQL和PDO做一些非常简单的事情。

    $table_name = 'TEMP_' . time();
    $sql_commands = "CREATE TEMPORARY TABLE {$table_name} (X CHAR(1));";
    $conn = Database::factory();
    $stmt = $conn->prepare($sql_commands);
    $stmt->execute();

Database :: factory()对于返回从以下位置创建的PDO对象是必不可少的:

$opt = [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::MYSQL_ATTR_INIT_COMMAND => "SET time_zone = '" . TIME_ZONE . "';",
    PDO::MYSQL_ATTR_INIT_COMMAND => "SET SESSION group_concat_max_len = 10485760;",
];

$dsn = "mysql:dbname=$database;host=$hostname;port=$port;charset=utf8";

每次尝试创建临时表时,都会出现此错误:

SQLSTATE[HY000]: General error: 2006 MySQL server has gone away

但是,确实会创建该表(至少,如果我重新运行得太快,则会收到另一个错误,指出该表已存在。)

/etc/my.cnf的内容

max_allowed_packet=128MB  # tried various values from 8MB up to 4GB
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
secure_file_priv=""
symbolic-links=0
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

为了简短起见, SHOW VARIABLES DUMP已粘贴。

您应该在PREPARE和EXECUTE之后紧跟CLOSE以完成典型周期吗?

cnf中的max_allowed_pa​​cket = 128MB应该为max_allowed_pa​​cket = 128M

请将您的错误日志发布到问题中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM