簡體   English   中英

MySQL:服務器已消失

[英]MySQL : Server has gone away

因此,當我使用無法解決的PHP PDO運行腳本時,就會遇到這個問題。 我的腳本正在索引來自不同服務器上不同數據庫的信息(主要是Select查詢)。

當我開發腳本時,所有數據庫都在同一台服務器上,並且一切運行正常。 現在,我在三個不同的服務器上移動了數據庫,我得到了這個可怕的錯誤。

所以這是每次我運行腳本時發生的情況:

該腳本運行良好,直到運行此簡單查詢的一個點(每次都崩潰):

(請注意,該腳本在PHP並且我正在使用PHP PDO訪問我的數據庫並使用它)

SELECT *
FROM a_table
WHERE a_column = a_value.

然后它崩潰了,我得到這個錯誤:

[a_date] - trunk - FATAL - Unmanaged Exception of type 'App_Exception'
File: /.../.../.../a_php_file.php
Line: a_line
Message: Error executing query.
Info:
Array
(
    [0] => HY000
    [1] => 2006
    [2] => MySQL server has gone away
)

Trace:
 #0 /.../.../.../a_php_file.php(124): App_something::a_metho('a_variable...')

我已經搜索了很長時間,但仍然沒有找到解決方案。

我試過了:

  • 修改/etc/my.cnf中的max_allowed_pa​​cked(在發生崩潰的SQL上)以將其從16M設置為64M(即使查詢返回的結果確實不是那么大)。

  • 修改max_connections以允許更多操作,以防萬一我忘記殺死一些已經存在的連接。

  • 檢查網絡上的問題

  • 其他許多小事情,例如從主機到遠程sql服務器的連接。

真正奇怪的是,如果我單獨運行查詢,它運行正常,如果所有數據庫都在同一服務器上,它也可以正常運行。

在這一點上,我真的迷失了方向,不知道問題可能來自何處,這就是為什么我要尋求幫助或只是一個提示。

這是在異常情況下崩潰的方法:

public static function my_method($my_mysql_WHERE_variable)
{
    //======================================
    // cached?
    //======================================
    if(isset(self::$_table1[$my_mysql_WHERE_variable])) {
      return self::$_table1[$my_mysql_WHERE_variable];
    }

    $pdo = my_App::getConnection();

    $query = "SELECT *
              FROM
                a_table
              WHERE
                a_column = :my_mysql_WHERE_variable";
    $stmt = $pdo->prepare($query);

    if($stmt === false) { 
        **---------------IT CRASHES HERE-----------**
        throw new my_App_Exception("Error executing query.\nInfo:\n" . print_r($pdo->errorInfo(), true)); 
    }
    .
    .
    .
    return $a_value;
}

您可能遇到數據庫連接問題的情況。 您是否在其他地方意外關閉了與此數據庫的數據庫連接? 您沒有為要運行的查詢引用正確的連接嗎?

我發現此錯誤的原因是因為tcp連接超時。 即使查詢實際上很短,我仍然無法真正解釋自己為什么會超時,但是我設法通過修改/etc/sysctl.conf並為keepalive設置更高的值來解決問題。 當然,我知道真正的解決方案是讀取每個查詢,並嘗試優化那些:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM