2013-04-27 50 views
0

我有一個腳本,每5分鐘檢查幾個抽搐通道,因此我可以在我的網站上列出當前正在運行的流。生成太多MySQL連接的PHP腳本

問題是,這個腳本正在生成很多mysql_connections,並且出現了一些關於最大連接數限制的錯誤。

據我所知,如果我打開一個連接到mysql並在我的腳本上運行幾個查詢,它仍然是一個連接嗎?

我的劇本是這樣的:

1)連接到數據庫

2)查看當前的時間

3)MySQL查詢更新一個與網站的任務,插入當前時間

4)mysql在流表列表上的查詢

5)對於每條記錄,它都會在數據上抽取一個xml,並保存t Ø數據庫中,如果是在線與否,多少觀衆,等

6)mysql_close

任何人都不會有爲什麼發生這種情況的任何想法?起初我以爲這是另一個GoDaddy的bug,但是因爲這隻發生在我執行這個任務的時候,所以在檢查之前我沒有麻煩與他們交談。

+0

會更好,如果你可以張貼一些代碼 – Satya 2013-04-27 04:42:05

+0

獲得太多的連接錯誤是指最有可能的,你沒有做足夠mysql_close:P做什麼你的意思是每5分鐘?這是純粹的PHP不可能的。如果你做一個mysql_connect,你應該做一個mysql_close。在兩者之間,你是對的,這是你所做的所有查詢的一個連接。 – metadings 2013-04-27 05:45:30

+0

由於我有很多綜合瀏覽量,我有一個腳本用於檢查包含某些任務的表,如果需要,它將運行腳本以在抽搐中獲取流。 $ query = mysql_query(「select * from site_tasks_helper」); $ rs = mysql_fetch_array($ query); $ streams_last_verified = $ rs [「streams_last_verified」]; (「/ web/cgi-bin/php5 -f/var/chroot/home/content/57/8793357/html/html」)if(time()> strtotime(「+ 5 minutes」,$ streams_last_verified)){ lib/update_streams.php>/dev/null&「,$ arrOutput); } – 2013-04-27 07:23:11

回答

1

嘗試持續conections在php.ini,http://php.net/manual/en/mysql.configuration.php 也因爲你會用持續性和下一個腳本的實例,可能會重用你可能想避免mysql_close

+0

如果我理解正確的話,mysql_pconnect保持連接活着腳本結束時,是這樣嗎?我現在正在使用mysql_connect。 – 2013-04-27 05:15:39

+0

mysql_connect()是建立與/到mysql服務器的連接的正確命令,只要確保你沒有使用「new_link」參數,儘管我認爲PHP正在爲每個腳本實例創建一個新的連接。 如果持續連接不會解決你的問題,那麼你可以嘗試: mysql_close($鏈接); $ link = null; //清除此var並強制關閉。 – Solrac 2013-04-27 05:50:02

+0

我只在腳本的開始時連接一次。該功能是這樣的: 功能ConectToDB(){$ = conex_site的mysql_connect(服務器,用戶名,密碼); mysql_select_db(database); return $ MyConnection; } – 2013-04-27 07:34:57

0

編輯my.cnf配置文件,此連接。在CentOS,RedHat和類似的發行版上,這是/etc/my.cnf;其他發行版將存儲在其他地方。當你重啓MySQL下一次它將使用此設置而不是默認的

max_connections = 200 

現在:

[mysqld]部分添加以下設置。

200是一個你指定的數字超過了現有的數字。因此,假設當前設置爲100,您可以設置更高的數字。

此外,如果您具有對MySQL的root/admin訪問權限,那麼您可以發送以下命令來增加最大連接速度,直到服務器重新啓動。

set global max_connections = 200; 

請注意,增加可以進行的連接數將增加MySQL運行所需的RAM數量。謹慎增加max_connections設置!

+0

我無權訪問my.cnf,因爲它是GoDaddy上的共享主機。我非常確定是不是限制,最大連接數是1000,最大用戶連接數= 200 – 2013-04-27 07:28:21

1

在腳本的頂部使用include_once ('connectdb.php');。 和connectdb.php應該像你在你的評論中寫的那樣。

connectdb。PHP

$conex_site = mysql_connect(server, user, password); mysql_select_db(database); 

編輯1:

<?php 

    $MyConnection = mysql_connect(server, user, password) or die(mysql_error()); 
    mysql_select_db(database) or die(mysql_error()); 
    return $MyConnection;//or return true; 
} 
?> 
------------ mysql_connect.php ------------- 

------------ update_streams.php ------------ 
<?php 
$con=include_once('mysql_connect.php');//or just include once('mysql_connect.php'); 
+0

這正是我正在做的,並得到這些錯誤。 – 2013-04-27 14:49:45

+0

@PauloManrique你如何管理每5秒呼叫.php程序?用javascript'settimeout()'?請把你的代碼 – Amir 2013-04-28 03:23:33

+0

我每5分鐘打一次電話,而不是每5秒打一次電話。我只是有一個函數檢查它最後一次檢查的時間,如果超過5分鐘,那麼它會調用腳本。 http://pastebin.com/hu2q4Fyr – 2013-05-01 08:17:51