網站是客人以前找別的工程師開發的
我只是接手維護
裡面有不少古老的寫法
資料庫連線用的還是mysql,連mysqli都不是
但是網站龐大,只能盡量修修補補,不太可能對其進行徹底翻新
問題是這樣的
由於網站內容,該網站會在深夜達到流量巔峰
最近客戶反應,網站會出現錯誤訊息
看了一下是資料連線失敗的訊息
於是添加失敗時寫入錯誤訊息到文字檔中
查看後發現錯誤訊息大部分如下:
Error Code: 1045
Error Message: Access denied for user ''@'localhost' (using password: NO)
??????
帳號密碼變成空白??
我確定資料庫的帳密是正確的,而且出錯的部分平常開啟也都是正常的
可以確定的是同一秒會出現多筆錯誤紀錄
看起來好像是太多人同時瀏覽出現的問題
仔細找一下
果然在密密麻麻的紀錄中找到
Error Code: 1040
Error Message: Too many connections
想請教,如果連線數量超過上限,會導致上述的帳密錯誤的發生嗎?
除了調整連線數和timeout秒數外,有甚麼其他方法可以避免類似的情況發生嗎?
另外,根據Google到的資訊顯示,PHP在頁面執行完成後,會自動切斷mysql的連線,所以沒有特意使用mysql_close()的必要,請問是這樣嗎?
雖然我對MYSQL不熟,但我覺得當初設計MYSQL的工程師不太會有一個Error Code產生另一個Error Code的設計出現,但軟體有可能(因為是不同設計師去開發的會有情境上的誤解)
Error Code: 1045
Error Message: Access denied for user ''@'localhost' (using password: NO)
using password: NO 應該是不輸入密码,而不是帳號密碼變成空白
而且Access user怎麼會有''空白的? (''@'localhost')
是否能檢視是哪個FUNCTION出現此錯誤的,再下一步看看是程式問題還是有特殊行為
這邊的紀錄是mysql_query()的錯誤紀錄
$result = mysql_query($sql);
if(!$result){
$error_message = mysql_error();
$error_code = mysql_errno();
file_put_contents('dberror.txt', date("Y-m-d H:i:s").PHP_EOL."SQL: ".$sql.PHP_EOL."Error Code: ".$error_code.PHP_EOL."Error Message: ".$error_message.PHP_EOL.PHP_EOL, FILE_APPEND);
die('Something is wrong! Please, wait a minute and refresh.');
}
但是連線function是固定的,而且每頁都有
主機商調整設定後
原本的錯誤訊息就沒有再出現了
之後出現的錯誤訊息就屬於需要修正程式的部分
感謝
肯回饋資訊,推推~
是不會有這狀況發生
深夜達到流量巔峰
八九成是被攻擊了
查一下記綠檔應該是會有吧
該網站應該沒有類似waf機制吧
小心被偷資料