MySQL has gone away query正解:2010年03月02日星期二
適用於:Drupal初學者,想更改Drupal theme外觀 的人,對CSS有興趣的人,對PHP有興趣的人,以前用Dreamweaver的人,以前用其他Blog CMS的人。本文用Drupal6.14,想在Drupal中使用Flash,詳見本文的環境。
MySQL has gone away query發生在試作網站 http://usingdrupalchapter4.百加一講壇.tw/ 。見圖一。
在MySQL has gone away query一文中(drupal.org po文)提到的讓主機商加大wait_timeout一事後來不行,主機商反悔了,又將wait_timeout改回原來(我猜是10或15秒),到drupal.org上搜尋,找到一個正解,一個輔助解:
正解:cog.rusty的Apr. 23, 2009 - 15:43留言。 這是在drupal.org的MySql : " Warning: MySQL server has gone away " - Tune MySql to resolve this problem 頁面下的comment-1511512。 他說,我們可以自己加wait_timeout,作法如下:
- 找到includes內的database.mysql.inc,用vim打開,尋找SET NAMES,會看到mysql_query('SET NAMES "utf8"', $connection);,我用Drupal 6.14,是第84行,在這一行下面加入以下這一行:
mysql_query('SET SESSION wait_timeout = 60', $connection);
- 找到database.mysqli.inc,用vim打開,尋找SET NAMES,會看到mysqli_query($connection, 'SET NAMES "utf8"');,我用Drupal 6.14,是第83行,在這一行下面加入以下這一行:
mysqli_query($connection, 'SET SESSION wait_timeout = 60');
再將這兩個檔案放到虛擬主機即可。我試了一下,可以。
輔助解:在drupal.org的MySql : " Warning: MySQL server has gone away " - Tune MySql to resolve this problem 頁面下的另一個comment提到停用Update status模組,可以加快網站速度。試了一下,網站由原先15秒減為3秒。作法如下:
Click<網站建置><模組><核心-可選擇的>,去掉<Update status>其左的<啟用>勾選。
圖一:MySQL has gone away query問題畫面
本文的環境是:
- Drupal 6.14。
- apache server設在Windows XP上,以http://localhost/drupal為例。
- 所有的檔案在c:/xampp/內,以下的路徑均相對於c:/xampp/。
- 各檔案均用vim editor打開,行數以vim內的行數為準。
- 主機是遠振資訊cPanel環境。
附加檔案 | 大小 |
---|---|
mysqlerror.JPG | 118.49 KB |
Re: MySQL has gone away query正解
想詢問如果不使用views~而透過node的方式比如去建立內容中(輸入格式選擇PHP code)
要如何連上資料庫查詢資料表(就已經是這網站了還要寫連上資料庫等等的涵數之類的)呢?不知要去那看相關文件~~和使用~~
比如是寫以下的方式嘛?
<?php
require_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
$new_page_node = array('type' => 'page');
?>
Re: MySQL has gone away query正解
大魔王:
連 DB 的話,我簡單分成兩個情況,給你參考一下
1) 單純連上資料庫,不使用 Drupal API
PHP4 下的話,建議用 adodb
PHP5 的話,建議用 PDO,這是 php extension,可從 phpinfo() 看是否有掛載上
非常不建議直接用 mysql_connect 這樣的東西
或是說,應該要完全避免,不過這要談到架構問題,我就不多囉嗦了~ 對細節有興趣的話,我們再談
2) 在 Drupal 之外 (a standalone PHP script),但想利用 Drupal 提供的 API 連 DB
不知道你手邊有沒有 Pro Drupal Development 這本書,Page 91 後面有提到
drupal_bootstrap,單純連 DB 的話,視情況,可以不需要到 "FULL",DRUPAL_BOOTSTRAP_FULL 包含 DRUPAL_BOOTSTRAP_DATABASE
如果是在 module 裡, 當然也不必再 DRUPAL_BOOTSTRAP_DATABASE,直接 db_query 應該就行
<?php
// Make Drupal PHP's current directory.
chdir('/full/path/to/your/drupal/installation');
// Bootstrap Drupal up through the database phase
include_once('./includes/bootstrap.inc');
drupal_bootstrap(DRUPAL_BOOTSTRAP_DATABASE);
// Now you can run queries using db_query().
$result = db_query('SELECT title FROM {node}');
?>
附帶一提是,如果是把 PHP 當成 shell script 寫,像是 cron 之類的 (此處是指 Linux 下的 cron, 非 web 版的 cron)
預設只會載入 sites/default/settings.php
若有其他的 settings.php,要有 HTTP request 才會用到 (簡單說就是用 browser 去開網頁 drupal 才能判斷要哪一組,不然一律是 default/settings.php)
我對 Drupal 極度不熟,希望有幫忙到!
Re: MySQL has gone away query正解
PHP and MySQL Web Development by Sams Publishing 作者 Lura Thomson、Luke Welling ( http://www.amazon.com/PHP-MySQL-Development-Luke-Welling/dp/0672317842 ),我的是second edition(非常舊版的),II Using MySQL、第十章 Accessing Your MySQL Database from the Web with PHP。 IV Advanced PHP Techniques 第20章 Using Session control in PHP。
這一次並沒看這本871頁的書,直接依照網上cog.rusty的Apr. 23, 2009 - 15:43留言照做。但這是一本好書,以前跳著讀過。
PHP要連MySQL,可至PHP官網上找function,記得均以mysql_起頭,例如以上的:mysql_query('SET SESSION wait_timeout = 60', $connection); 。其他的有mysql_connect、mysql_delect_db、mysql_num_rows...copy 423頁片段如圖。
Re: MySQL has gone away query正解
謝謝jesselue的提供~>W<...
我來實作看看~~>w<
Re: MySQL has gone away query正解
Hello 大魔王:
有關"就已經是這網站了還要寫連上資料庫等等的涵數之類的",剛寫完,上傳,fail,可能你正在傳,再寫一次如下?
Drupal沒研究過,以前讀過一本Xoops的書,如下:
以上是我用猜的,不一定對,供參考。
Re: MySQL has gone away query正解
有個客戶遇到同樣問題,不過一點建議,當資料庫需要 10 ~ 15 秒時間回應一次的請求時,主機的負擔將會相當沉重,建議不要使用太消耗資源的模組。
Re: MySQL has gone away query正解
請問:如何看模組是否消耗資源?
Re: MySQL has gone away query正解
比較正式的作法也許是埋入程式碼進行測試,不過大部分情況還是透過啟用、關閉特定模組來釐清部份回應緩慢頁面的原因。
Re: MySQL has gone away query正解
Devel module provides functions to display query log, memory usage...etc.
Re: MySQL has gone away query正解
@Jessie, Thanks for the tip. ;)