[php] totale grootte mysql db opvragen

Pagina: 1
Acties:
  • 62 views sinds 30-01-2008

  • Unagi
  • Registratie: Februari 2001
  • Laatst online: 18-05 22:52

Unagi

Always aware...

Topicstarter
Ik wil puur als leuk statistiekje de grootte van m'n database opvragen, ik heb alleen geen idee hoe dit moet. In PHPMyAdmin wordt t ook gedaan, alleen de source is zo vreselijk onduidelijk dat ik t r echt niet uit krijg

  • MiezeL
  • Registratie: Augustus 2002
  • Laatst online: 08-04 08:40
http://www.mysql.com/doc/en/SHOW_STATUS.html

misschien is dat wat?
www.mysql.com/doc rulez

of anders kan je misschien proberen hem alle tabellen tedoorzoeken naar grootte en die bij elkaar laten optellen.

  • Prutser_IA
  • Registratie: Januari 2000
  • Laatst online: 03-06-2021

Prutser_IA

<*{{{><

Tis vrijsimpele functie, je moet alleen even weten dat deze bestaat..
Ik heb hem laatst ook voor me eigen lol even uitgezocht, hij werkt atm alleen als je op één database connect. Maar dat moet aan te passen zijn

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$host  = 'localhost';  //Het adres van je MySQL server
$db    = '******';     //De naam van je Database
$login = '******';     //De login van je MysQL server
$pass  = '******';     //Het password van je MySQL server

@mysql_connect ($host,$login,$pass) or die ("Can't connect to the database");
@mysql_select_db ($db) or die ("The selected database cannot been found, or pasword might be wrong!");

Function CalcDBSize() {
    $sql = "SHOW TABLE STATUS"; 
    $items = mysql_query($sql);
    IF ($item = mysql_fetch_array($items)) {
        DO {
            $DBSize += $item[Data_length];
        }
        While ($item = mysql_fetch_array($items));
    }

    return $DBSize;
}
echo CalcDBSize()." Bytes";

42


  • Unagi
  • Registratie: Februari 2001
  • Laatst online: 18-05 22:52

Unagi

Always aware...

Topicstarter
had ik net www.mysql.com/doc helemaal doorgelezen en niks gevonden |:( staat t antwoorrd r al meer dan 15 min :P thnx prutser

  • MiezeL
  • Registratie: Augustus 2002
  • Laatst online: 08-04 08:40
hehe ja nice. Trouwens zoals ik al zei gewoon je tables uitlezen wat wel op mijn pagina stond en die optellen bij elkaar:)

  • Unagi
  • Registratie: Februari 2001
  • Laatst online: 18-05 22:52

Unagi

Always aware...

Topicstarter
ff verbeterd :)

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Function DBSize()
    { 
    $sql = "SHOW TABLE STATUS";  
    $items = mysql_query($sql); 
    if ($item = mysql_fetch_array($items))
        { 
        DO
            { 
            $DBsize += $item[Data_length]; 
            $DBsize += $item[Index_length]; //Indexes meetellen
            } 
        While ($item = mysql_fetch_array($items)); 
        }
    $DBsize = ($DBsize / 1024); //Kb's van maken
    $DBsize = (round($DBsize, 1)); //afronden
    echo ($DBsize);
    }


je krijgt nu exact dezelfde waarde als in PHPMyAdmin

  • MiezeL
  • Registratie: Augustus 2002
  • Laatst online: 08-04 08:40
emm Unagi harstikke leuk, maare je echo staat IN de function?:S niet echt netjes....

  • Unagi
  • Registratie: Februari 2001
  • Laatst online: 18-05 22:52

Unagi

Always aware...

Topicstarter
MiezeL schreef op 08 augustus 2002 @ 14:44:
emm Unagi harstikke leuk, maare je echo staat IN de function?:S niet echt netjes....
wrom nie? je gebruikt deze function toch max. 1x per pagina, en dan is t best handig. Ik heb nu gewoon in m'n layout, waarin alle content geinclude wordt DBsize(); staan, werkt prima

edit:

bij mij plakt de functie r ook nog "DB: " voor en " Kb" er achter :)

  • MiezeL
  • Registratie: Augustus 2002
  • Laatst online: 08-04 08:40
k das wel beetje waar maargoed :)

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Waarom gebruik je haakes in y = (x)?

Verwijderd

Unagi schreef op 08 augustus 2002 @ 14:17:
ff verbeterd :)

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Function DBSize()
    { 
    $sql = "SHOW TABLE STATUS";  
    $items = mysql_query($sql); 
    if ($item = mysql_fetch_array($items))
        { 
        DO
            { 
            $DBsize += $item[Data_length]; 
            $DBsize += $item[Index_length]; //Indexes meetellen
            } 
        While ($item = mysql_fetch_array($items)); 
        }
    $DBsize = ($DBsize / 1024); //Kb's van maken
    $DBsize = (round($DBsize, 1)); //afronden
    echo ($DBsize);
    }


je krijgt nu exact dezelfde waarde als in PHPMyAdmin
[overdrijf-modus]
Waarom die if-test nog? Want als je een gewone while-loop doet, en jou if-test wordt in dat geval niet gematched (dus bij de gewone while begint de while niet), dan zit je toch evenver?

Overbodige if-test lijkt mij :-)
[/]

En wat is er nu mis met een echo in een functie :?

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Verwijderd schreef op 09 augustus 2002 @ 09:56:
Waarom die if-test nog? Want als je een gewone while-loop doet, en jou if-test wordt in dat geval niet gematched (dus bij de gewone while begint de while niet), dan zit je toch evenver?

Overbodige if-test lijkt mij :-)

En wat is er nu mis met een echo in een functie :?
Zo overdreven is dat niet hoor.
En wat nou als ik bijvoorbeeld deze info naar file wil schrijven? Dan moet ik die functie weer gaan aanpassen.

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Verwijderd schreef op 09 augustus 2002 @ 09:56:
[...]

[overdrijf-modus]
Waarom die if-test nog? Want als je een gewone while-loop doet, en jou if-test wordt in dat geval niet gematched (dus bij de gewone while begint de while niet), dan zit je toch evenver?

Overbodige if-test lijkt mij :-)
En wat is er nu mis met een echo in een functie :?[/quote]
Test.

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Unagi:
ff verbeterd :)

[snip]

je krijgt nu exact dezelfde waarde als in PHPMyAdmin
yay! miereneuken!! :D

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function dbSize ( $dbname, $mysql_link, $precision = 3 ) {
   mysql_select_db ( $dbname, $mysql_link );
   $dbsize = 0;

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

   while ( $row = mysql_fetch_assoc ( $result ) ) 
      $dbsize += $row [ 'Index_length' ] + $row [ 'Data_length' ];
   return sprintf ( "%.{$precision}f MB", ($dbsize / ( 1 << 20 ) ) );
}
$mysql_link = mysql_connect ( 'localhost', '***', '***' );

echo dbSize ( 'myDb', $mysql_link );


sorry, * drm is in een flauwe bui :O :Z :P

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
drm schreef op 09 augustus 2002 @ 10:35:
yay! miereneuken!! :D

sorry, * drm is in een flauwe bui :O :Z :P
Doe het dan goed.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
function dbSize ( $dbname, $mysql_link, $precision = 3 ) {
   mysql_select_db ( $dbname, $mysql_link );
   $dbsize = 0;

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

   while ( $row = mysql_fetch_assoc ( $result ) ) 
      $dbsize += $row [ 'Index_length' ] + $row [ 'Data_length' ];
   return sprintf ( "%.{$precision}f MB", $dbsize / ( 1 << 20 ) );
}
$mysql_link = mysql_connect ( 'localhost', '***', '***' );

echo dbSize ( 'myDb', $mysql_link );

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

omfg!!! da's nog wel de ergste miereneuk die ik ooit gezien heb :D jij wint _/-\o_

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 23-04 13:07
nog een mierenneuk actie:
PHP:
1
2
   while ( $row = mysql_fetch_assoc ( $result ) )  
      $dbsize += $row [ 'Index_length' ] + $row [ 'Data_length' ];

moet zijn
PHP:
1
2
   while ( $row == mysql_fetch_assoc ( $result ) )  
      $dbsize += $row [ 'Index_length' ] + $row [ 'Data_length' ];

:) :)

  • Prutser_IA
  • Registratie: Januari 2000
  • Laatst online: 03-06-2021

Prutser_IA

<*{{{><

stekkel schreef op 09 augustus 2002 @ 11:01:
nog een mierenneuk actie:
PHP:
1
2
   while ( $row = mysql_fetch_assoc ( $result ) )  
      $dbsize += $row [ 'Index_length' ] + $row [ 'Data_length' ];

moet zijn
PHP:
1
2
   while ( $row == mysql_fetch_assoc ( $result ) )  
      $dbsize += $row [ 'Index_length' ] + $row [ 'Data_length' ];

:) :)
Als je mierenneukt, doe het dan goed :)
er moet staan zolang $row een waarde toegekend krijgt, en niet $row = gelijk aan ... you see :D

42


  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 23-04 13:07
Prutser_IA schreef op 09 augustus 2002 @ 11:46:
[...]

Als je mierenneukt, doe het dan goed :)
er moet staan zolang $row een waarde toegekend krijgt, en niet $row = gelijk aan ... you see :D
Oops, sorry, zal vervolgens eerst ff de php handleiding er op naslaan :)
8)7 ;(

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022

Reveller

Hopla!

Ik heb dit scriptje gebruikt om een eigen script te schrijven waarmee ik de grootte van een directory kan uitlezen:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/**
 * return the size of a directory in MB
 */
function dir_size($dir)
{
  $directory = opendir($dir);
  while ($file = readdir($directory))
  {
    if (is_file($dir.$file))
    {
      $size = filesize($dir.$file);
    }
  }
  return sprintf( "%.3f MB", $size / (1 << 10));
}

Regel 14 van dit script is gebaseerd op regel 9 van drm's script hierboven:
PHP:
1
return sprintf ( "%.{$precision}f MB", ($dbsize / ( 1 << 20 ) ) );

Door zijn "20" te veranderen in "10" geeft mijn directory-scriptje deelfde grootte aan als Windows, maar ik heb geen idee wat ik nu eigenlijk doe. Wie kan mij vertellen (of een link geven) wat "1 << 20" betekent?

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Wat heeft dat te maken met dit drie jaar oude topic?
<< is trouwens 'shift links'.

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

<< is een bitwise shift naar links. Dat betekent dat wanneer je 1 << 1 doet, je de binaire voorstelling van het getal '1' een plaatsje naar links schuift en aan de rechterzijde aanvult (pad) met nullen.

code:
1
2
3
4
1      binair =                1 decimaal
1 << 1 binair =   10 binair  = 2 decimaal
1 << 2 binair =  100 binair  = 4 decimaal
1 << 3 binair = 1000 binair  = 8 decimaal


Nu ben jij natuurlijk heel slim en zie je direct dat dat feitelijk hetzelfde is als machtsverheffen met grondtal 2 :P

Kortom 1 << 10 is gelijk aan 210 wat weer overeenkomt met 1024, wat op zijn beurt weer overeenkomt met 100 0000 0000 binair en dan is het cirkeltje weer rond.

[ Voor 6% gewijzigd door drm op 03-01-2005 20:58 ]

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 18-05 22:02

Creepy

Tactical Espionage Splatterer

Zie de uitleg van DRM. Beetje jammer dat je daarvoor zo'n topic moet kicken om een slechte topic start te verbergen :P

Gewoon een nieuw topic openen in dit geval ;)

[ Voor 18% gewijzigd door Creepy op 03-01-2005 21:12 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1

Dit topic is gesloten.