2011-05-20 47 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