2017-10-21 10 views
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されます。

答えて

0

PREPAREとEXECUTEの後にCLOSEを指定して、標準サイクルを完了する必要がありますか?

するmax_allowed_pa​​cket = 128メガバイトの質問にあなたのCNF

投稿してくださいあなたのエラー・ログに するmax_allowed_pa​​cket = 128Mでなければなりません。

+0

私は努力を感謝しますが、結局私はmysql cliクライアントに砲撃し始めました。どんな手段でもエレガントではありませんが、それはクルーの仕事で十分です。ありがとう – Wranorn

+0

PREPAREとEXECUTEの後にロジックにCLOSEを追加しないと、セッションの最後にリソースが解放されません。 max_allowed_pa​​cketは、変数に表示されているものから1GBです。たぶん、LOAD INPUT操作を処理するために必要になるかもしれません。 –

関連する問題