您在這裡

請教一下關於中文化後的問題

tony77794's 的頭像
tony77794 在 2007-07-15 (周日) 20:30 發表

我的drupal是5.1版的
安裝完後 語言是英文
然後我參考本站的手冊進行中文化
過程很順利 但是直到import完的時候
迸出一段警告訊息說 我SQL的語法錯誤
接著一大段中文字串 想必是中文化的文字吧
後面就接著下面這一段
in /var/www/***/drupal-5.1/includes/database.mysql.inc on line 172.
中文化完之後 很高興的點了其他連結...
忽然刷地一下 瀏覽器全白
我急急忙忙地按上一頁 試試其他連結 結果都一樣
我重裝了兩次drupal都是同樣的結果
因此我只好來這請教眾位大大了
拜託各位了 不好意思

# user warning: Can't find file: 'cache_menu' (errno: 2) query: SELECT data, created, headers, expire FROM cache_menu WHERE cid = '0:zh-hant' in /www/789mb.com/s/c/a/scat/htdocs/drupal/includes/database.mysql.inc on line 172.
# user warning: Can't find file: 'cache_menu' (errno: 2) query: LOCK TABLES cache_menu WRITE in /www/789mb.com/s/c/a/scat/htdocs/drupal/includes/database.mysql.inc on line 172.

(這段錯誤訊息是我安裝Drupal5.1之後 未曾更動任何設定時就出現的狀態回報)

(而手動開啟Cron之後 便加速資源消耗 導致第二次重裝 並且不敢開啟這部份)

(目前為止 我的網站還未修正這方面的錯誤 但沒手動開啟Cron反而讓網站斷斷續續地暫時可以連上

由這幾點可以推理出來 記憶體 mysql cron 各有特殊的關聯

(旁註:php設定部份我倒是沒有直接遇到 但不排除也有可能 )

討論串:http://drupaltaiwan.org/forum/20070715/1403
===============================================
(另一種記憶體資源耗損過快的可能性)
您好,關於您的問題跟我前一陣子的狀況有點相似.

不過,在下推理
/drupal-5.1/includes/database.mysql.inc on line 172.
這個錯誤可能並非中文化的部份造成

而之前的資料顯示是Drupal5.X出現的現象

以這幾天的小經驗看來:

您可能有3個重點可以嘗試解決:

1.中文部份先使用預設中文版的Drupal5.1版 <<<
(我是因為無法採用import上傳 改用台灣PHP聯盟 提供的預設中文版)

2.初步安裝會偵測到狀況回報,

(請暫時別手動開啟Cron的部份_除非您已經確定max_allowed_packet或其他問題已經解決.)

3.修正MySQL封包傳輸大小的設定 <<
關於MySQL的封包傳輸是經過單一SQL statement傳到MySQL server端上,
而單一row資料傳到client上;
或是透過主從架構將日誌事件以二位元格式傳輸.

然而MySQL 5.0 server/client最大傳輸封包限制可能為1GB.

所以當MySQL的client端或server端接受到的封包大於max_allowed_packet所設定位元組,
機器便會發出一個封包太大的錯誤訊息通告以及關閉連結.
對某些client來說,假設這類的傳輸封包過大,
將可能因為query錯誤導致MySQL server失去聯接的狀況.

此時因為client及server二者各自擁有的max_allowed_packet變數設定,
所以如果您想要處理較大的封包時,
您必須同時新增這個變數到client及server上.

假如您使用的是 mysql client端的程式,預設的max_allowed_packet為16MB.
請嘗試設定較大的數值,並重新啟動mysql如下作法:

shell> mysql --max_allowed_packet=32M

這將會預設封包大小改為32MB.

此外,通常server端預設的 max_allowed_packet 數值為1MB.
假如Server平時需要處理大querie,您可透過這指令修改來新增此數值.
(比如說,若是您使用的是較大的BLOB column).
例如,將預設封包大小改為16MB,並重新啟動mysql如下:

shell> mysqld --max_allowed_packet=16M

您也可以使用設定檔來更改max_allowed_packet.
例如,將Server內預設設定為16MB,
增加以下這行到設定檔:

[mysqld]
max_allowed_packet=16M

這些修改變數的方式是較安全的作法,因這些額外的記憶體只有需要時才被分配.
比如說,當你發出一個long query時mysqld才會配置出更多的記憶體
或mysqld必須回傳一個較大的result row才會有這現象.
這預設的變數值,是種為了預防從client及server端之間接收(catch)到錯誤的封包群,
來確保使用較大的封包傳輸時不會意外地耗光所有的記憶體.

使用大量封包時,您也有時會有這類特殊情況,假如您使用的是BLOB大型形態的資料,
但卻沒預訂足夠的記憶體給mysqld存取
來作為處理query的資源.若您懷疑以上現象就如您所遇到的情況,
嘗試增加ulimit -d 256000在mysqld_safe的內容頁首並且重新啟動mysqld(mysql服務).

到目前為止 我所知到的是 所有的修改皆透過主機管理者權限才能做到.
(還有一個小重點 推測即使修改之後 也必須等到對方重新開啟服務一段時間後才有作用)

希望哪位高手實際測試之後繼續幫忙提示!!

關於BLOB
http://www.tech-faq.com/lang/zh-TW/blob.shtml
資料來源:
http://dev.mysql.com/doc/refman/5.0/en/packet-too-large.html

最近的原始討論串:http://drupaltaiwan.org/forum/20070711/1396#comment

[註]以上若有概念或技術上的錯誤請告訴我修正學習 感謝^^

charlesc大 還是不行耶 會不會不是記憶體的問題(猜的)

因為我看過php.ini下的記憶體最大值是配給20M

而且其他兩個方法我也都試過了

然後我也換用台灣php聯盟中文化過的那個drupal5.1中文版來安裝

結果還是一樣(中文化跟我無緣啊)

不知道還有沒有其他的解決辦法

--

目前正在試scat大的方法...