2011-05-20 52 views
0

有沒有辦法讀取最大值。 PHP中的MySQL數據庫容量?如何獲得最大mySQL數據庫容量在PHP?

我已經做了一個類,以確保數據庫從gettin溢出。它工作得很好,唯一的問題是我不能得到最大數據庫大小(每個數據庫)。我必須像這樣手動設置它:

class StorageSecurity 
{ 
    private static $MAX_DB_SIZE = 100; //MB 

    private $_db_host; //Database Host 
    private $_db_user; //Database Username 
    private $_db_pass; //Database Userpass 

    public function __construct(Database $_db) 
    { 
     try 
     { 
     $this->_errors = Array(); 
     $this->_db_host = $_db->getDBHost(); 
     $this->_db_user = $_db->getDBUser(); 
     $this->_db_pass = $_db->getDBPass(); 

     $this->setMaxDBCapacity(self::$MAX_DB_SIZE); 

     $db_conn = mysql_pconnect($this->_db_host, $this->_db_user, 
            $this->_db_pass); 

     if (!$db_conn) throw new Exception("Server Connection Failed."); 

     } catch(Exception $e) { 
     $this->_errors[] = $e->getMessage(); 
     } 
    } 
} 

謝謝!

+0

沒有答案.... – Racooon 2011-05-20 22:36:42

+0

你是什麼意思的最大容量多少?它是否包含日誌文件的大小(對於InnoDB)?它是基於磁盤上剩餘的空間量嗎? – 2011-05-20 22:39:50

+0

最大分貝大小,我認爲,沒有其他說明。 – Racooon 2011-05-20 22:56:46

回答

1

假設「max db size」的意思是「關聯db文件的最大大小,使其不會超過可用存儲空間」,這顯然取決於其他應用程序是否可以寫入相同的文件系統分區數據庫。

在MySQL,可以使用INFORMATION_SCHEMA.tables計算(在這種情況下test)使用由數據庫的磁盤空間量的估計值(從存儲引擎,例如InnoDB的):

SELECT SUM(DATA_LENGTH) + SUM(INDEX_LENGTH) AS usage_estimate 
FROM INFORMATION_SCHEMA.tables WHERE table_schema = 'test'; 

您也可以選擇MySQL的限制(但不是文件系統限制)每個表:

SELECT TABLE_NAME, MAX_DATA_LENGTH 
FROM INFORMATION_SCHEMA.tables WHERE table_schema = 'test'; 

然後,您可以將它與代碼中的一些可配置值進行比較,您認爲每個數據庫的「安全」大小(請記住,日誌文件等將添加到磁盤上數據庫的整體「大小」)。

更多關於INFORMATION_SCHEMA表的信息可以在這裏找到:http://dev.mysql.com/doc/refman/5.1/en/information-schema.html

+0

的當前大小,請讓我試試。我會很快回復 – Racooon 2011-05-20 23:14:07

+0

現在有了Max。數據庫容量... – Racooon 2011-05-20 23:58:02

+0

@Vural這是我的觀點。確定「最大數據庫容量」(文件系統對文件大小的限制,分區上的可用磁盤總數等等)有很多因素,最好的辦法是分析應用程序對數據庫的使用,以確定合理的最大大小您的應用程序並將其設置爲軟件。然後您可以使用'INFORMATION_SCHEMA'將實際使用情況與最大值進行比較。 – 2011-05-23 15:54:29