PHP + MiSqli узнать размер базы данных

PHP класс для определения размера базы данных


Часто при разработке приложений для взаимодействия с базой данных MySql возникает необходимость опепративно узнать её размер не через интерфейс админки, а средствами скрипта на php что бы в случае превышения лимита выполнить необходимые деёствия на сайте или сигнализировать администратору.

Здесь я привожу небольшой класс для работы с базой данных через функционал php mysqli который позволит соединится с базой данных, узнать её размер в байтах и отформатировать результат для удобочитаемости в Кб, Мб, Гб.

PHP
01class bazaInfo{
02    public function connect(){
03    $db_host = 'localhost';
04    $db_user = 'LOGIN';
05    $db_password = 'PASS';
06    $db_name = 'BAZA NAME';
07     
08    $link = new MySQLi($db_host, $db_user, $db_password, $db_name);
09    if ($link->connect_error) {
10        die('<p style="color:red">'.$link->connect_errno.' - '.$link->connect_error.'</p>');
11    }
12     
13    $link->query("SET NAMES 'cp1251'");
14        return $link;
15    //echo "<p>Вы подключились к MySQL!</p>";
16    }
17    public function formatfilesize($data){
18        // bytes
19        if( $data < 1024 ) {
20            return $data . " bytes";
21        }
22        // kilobytes
23        else if( $data < 1024000 ) {
24            return round( ( $data / 1024 ), 1 ) . "k";
25        }
26        // megabytes
27        else {
28            return round( ( $data / 1024000 ), 1 ) . " MB";
29        }
30    }
31    public function bazaSize(){
32        $mysqli=self::connect();
33        $sql = "SHOW TABLE STATUS";
34        $result = $mysqli->query($sql);
35        $dbsize = 0;
36    while($R = mysqli_fetch_object($result)) { 
37        $dbsize += $R->Data_length + $R->Index_length;
38    }
39    return self::formatfilesize($dbsize);
40    }
41}
42 
43// Выводим данные
44$bz=new bazaInfo;
45        $size = $bz->bazaSize();
46        echo $size;

Функция connect()  устанавливает соединение с базой данных и оперделяет кодировку.

Функция formatfilesize( $data ) форматирует числовое представление размера базы данных.

И ключевая функция bazaSize() собственно вычисляет и возвращает размер базы данных, с помощью внутренних вызовов пердыдущих функций осуществляет соединение и форматирование результата.

Подсчёт размера базы данных осуществляется суммарным значением веса каждой таблицы + индексной составляющей.

Следующий код более универсален и позволяет:

Узнать размер базы данных в одном запросе:

PHP
01class bazaInfo{
02    public function connect(){
03    $db_host = 'localhost';
04    $db_user = 'LOGIN';
05    $db_password = 'PASS';
06    $db_name = 'BAZA NAME';
07     
08    $link = new MySQLi($db_host, $db_user, $db_password, $db_name);
09    if ($link->connect_error) {
10        die('<p style="color:red">'.$link->connect_errno.' - '.$link->connect_error.'</p>');}
11     
12    $link->query("SET NAMES 'utf8'");
13        $baza['link'] = $link; $baza['db_name'] = $db_name;
14        return $baza;
15    //echo "<p>Вы подключились к MySQL!</p>";
16    }
17     
18    public function bazaSize(){
19        $baza=self::connect();
20        $mysqli=$baza['link']; $db_name = $baza['db_name']
21        $sql = "SELECT CONCAT(round(sum(data_length + index_length) / 1024 / 1024, 2), ' MB') AS size FROM information_schema.TABLES WHERE table_schema = '$db_name'";
22 
23       // выполнение запроса и получение результата
24       $result = mysqli_query($mysqli, $sql);
25       $row = mysqli_fetch_assoc($result);
26 
27       // закрытие подключения к базе данных
28       mysqli_close($mysqli);
29       //отправляем результат
30       return $row['size'];
31    }
32}
33 
34     // Выводим данные
35     $bz=new bazaInfo;
36        $size = $bz->bazaSize();
37        echo echo 'Размер базы данных: '.$size.'Mb';

Дата публикации: 

ТОП 10 случайных публикаций



Сайт разработан студией © WEB-VidST   


Яндекс.Метрика