有没有办法读取最大值。 PHP中MySQL数据库的容量?
我已经创建了一个类来保护数据库免受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 :(得分:1)
假设“max db size”是指“关联数据库文件的最大大小,使其不会超过可用存储空间”,显然取决于其他应用程序是否可以写入与同一文件系统分区相同的文件系统分区。数据库中。
在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