2017-10-21 142 views
0

我看到的一切都是由於插件或「奇怪」的配置或數據集。SQLSTATE [HY000]:一般錯誤:2006 MySQL服務器已經離開創建臨時表

我試圖用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(); 

數據庫::廠()是必不可少返回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的簡短內容被pastebin'd。

回答

0

如果您的PREPARE和EXECUTE後面跟着CLOSE來完成典型的週期?

max_allowed_pa​​cket個= 128MB應 max_allowed_pa​​cket個= 128M在您的CNF

請發表您的錯誤日誌到的問題。

+0

欣賞努力,但最終我開始炮轟到MySQL CLI客戶端。不以任何方式優雅,但因爲它是一個cron工作就足夠了。謝謝 – Wranorn

+0

好吧,如果您在PREPARE和EXECUTE之後沒有將CLOSE添加到您的邏輯中,資源將不會在會話結束時釋放。 max_allowed_pa​​cket從我在變量中看到的是1GB。也許你需要它來處理LOAD INPUT操作。 享受 –

相關問題