0
私が見たことはすべて、プラグインや "奇妙な"構成やデータセットが原因です。SQLSTATE [HY000]:一般的なエラー:2006年MySQLサーバーが一時テーブルを作成しなくなりました
私はPHP、MySQL、およびPDOで非常に簡単なことをしようとしています。しかし
SQLSTATE[HY000]: General error: 2006 MySQL server has gone away
:私はこのエラーを取得する
$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";
私は一時テーブルを作成しようとするたび:
$table_name = 'TEMP_' . time();
$sql_commands = "CREATE TEMPORARY TABLE {$table_name} (X CHAR(1));";
$conn = Database::factory();
$stmt = $conn->prepare($sql_commands);
$stmt->execute();
データベース:: factory()はPDOオブジェクトを返す必要不可欠から作成されますテーブルが作成されます(少なくとも、再実行すると、テーブルがすでに存在するというエラーが表示されます) この記事SHOW VARIABLES DUMPの簡略化のためな/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
のの内容がpastebin'dされます。
私は努力を感謝しますが、結局私はmysql cliクライアントに砲撃し始めました。どんな手段でもエレガントではありませんが、それはクルーの仕事で十分です。ありがとう – Wranorn
PREPAREとEXECUTEの後にロジックにCLOSEを追加しないと、セッションの最後にリソースが解放されません。 max_allowed_packetは、変数に表示されているものから1GBです。たぶん、LOAD INPUT操作を処理するために必要になるかもしれません。 –