PHP + MiSqli узнать размер базы данных
PHP класс для определения размера базы данных
Часто при разработке приложений для взаимодействия с базой данных MySql возникает необходимость опепративно узнать её размер не через интерфейс админки, а средствами скрипта на php что бы в случае превышения лимита выполнить необходимые деёствия на сайте или сигнализировать администратору.
Здесь я привожу небольшой класс для работы с базой данных через функционал php mysqli который позволит соединится с базой данных, узнать её размер в байтах и отформатировать результат для удобочитаемости в Кб, Мб, Гб.
class bazaInfo{
public function connect(){
$db_host = 'localhost';
$db_user = 'LOGIN';
$db_password = 'PASS';
$db_name = 'BAZA NAME';
$link = new MySQLi($db_host, $db_user, $db_password, $db_name);
if ($link->connect_error) {
die('<p style="color:red">'.$link->connect_errno.' - '.$link->connect_error.'</p>');
}
$link->query("SET NAMES 'cp1251'");
return $link;
//echo "<p>Вы подключились к MySQL!</p>";
}
public function formatfilesize($data){
// bytes
if( $data < 1024 ) {
return $data . " bytes";
}
// kilobytes
else if( $data < 1024000 ) {
return round( ( $data / 1024 ), 1 ) . "k";
}
// megabytes
else {
return round( ( $data / 1024000 ), 1 ) . " MB";
}
}
public function bazaSize(){
$mysqli=self::connect();
$sql = "SHOW TABLE STATUS";
$result = $mysqli->query($sql);
$dbsize = 0;
while($R = mysqli_fetch_object($result)) {
$dbsize += $R->Data_length + $R->Index_length;
}
return self::formatfilesize($dbsize);
}
}
// Выводим данные
$bz=new bazaInfo;
$size = $bz->bazaSize();
echo $size;Функция connect() устанавливает соединение с базой данных и оперделяет кодировку.
Функция formatfilesize( $data ) форматирует числовое представление размера базы данных.
И ключевая функция bazaSize() собственно вычисляет и возвращает размер базы данных, с помощью внутренних вызовов пердыдущих функций осуществляет соединение и форматирование результата.
Подсчёт размера базы данных осуществляется суммарным значением веса каждой таблицы + индексной составляющей.
Следующий код более универсален и позволяет:
Узнать размер базы данных в одном запросе:
class bazaInfo{
public function connect(){
$db_host = 'localhost';
$db_user = 'LOGIN';
$db_password = 'PASS';
$db_name = 'BAZA NAME';
$link = new MySQLi($db_host, $db_user, $db_password, $db_name);
if ($link->connect_error) {
die('<p style="color:red">'.$link->connect_errno.' - '.$link->connect_error.'</p>');}
$link->query("SET NAMES 'utf8'");
$baza['link'] = $link; $baza['db_name'] = $db_name;
return $baza;
//echo "<p>Вы подключились к MySQL!</p>";
}
public function bazaSize(){
$baza=self::connect();
$mysqli=$baza['link']; $db_name = $baza['db_name']
$sql = "SELECT CONCAT(round(sum(data_length + index_length) / 1024 / 1024, 2), ' MB') AS size FROM information_schema.TABLES WHERE table_schema = '$db_name'";
// выполнение запроса и получение результата
$result = mysqli_query($mysqli, $sql);
$row = mysqli_fetch_assoc($result);
// закрытие подключения к базе данных
mysqli_close($mysqli);
//отправляем результат
return $row['size'];
}
}
// Выводим данные
$bz=new bazaInfo;
$size = $bz->bazaSize();
echo echo 'Размер базы данных: '.$size.'Mb';

