Odczytanie wielkości bazy mysql w php

W tutorialu pokażę skrypt php wyświetlający wielkość aktualnie wybranej bazy danych. Na początku łączymy się z mysql i wybieramy bazę danych. Następnie wywołujemy zapytanie SHOW TABLE STATUS, które w jednej z kolumn zwraca wielkość danych poszczególnej tabeli w bajtach oraz wielkość indeksu. Przechodzimy pętlą przez poszczególne wiersze i sumujemy wartości dla poszczególnych tabel. Na koniec wyświetlamy wynik. Wynik jest przetworzony funkcją formatBytes, aby był on bardziej zrozumiały niż wartość w bajtach.

$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
    die('Could not connect: '.mysql_error());
}
mysql_select_db('nazwa_bazy');

$result = mysql_query('SHOW TABLE STATUS');

$size = 0;

while($row = mysql_fetch_array($result)) {  
	$size += $row['Data_length'] + $row['Index_length'];
}

echo 'Wielkość bazy danych: '.formatBytes($size);

function formatBytes($bytes, $precision = 2) { 
    $units = array('B', 'KB', 'MB', 'GB', 'TB'); 

    $bytes = max($bytes, 0); 
    $pow = floor(($bytes ? log($bytes) : 0) / log(1024)); 
    $pow = min($pow, count($units) - 1); 

    $bytes /= pow(1024, $pow); 

    return round($bytes, $precision).' '. $units[$pow]; 
}