Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Optymalizator tabel w bazie danych MySQL, klasa, PHP4 i PHP5
Speedy
post
Post #1





Grupa: Zarejestrowani
Postów: 651
Pomógł: 28
Dołączył: 4.12.2004

Ostrzeżenie: (0%)
-----


Ostatnio znajomy poprosił mnie o napisanie skryptu służącego do optymalizacji baz danych MySQL na serwerze.
Wykorzystuje on w swoim działaniu poniższą klasę. Może komuś jeszcze się przyda winksmiley.jpg

  1. <?php
  2.  
  3. /**
  4.  * optymalizacja bazy danych MySQL
  5.  * @author `Speedy` <sppeedy@poczta.fm>
  6.  * @copy (c) `Speedy` 2006
  7.  * @version 1.0
  8.  */
  9. class optimize_database {
  10.  
  11. /**
  12.  * identyfikator połączenia z bazą danych
  13.  */
  14. var $connection;
  15.  
  16. /**
  17.  * nawiązuje połączenie z bazą danych
  18.  * @param string $host nazwa hosta
  19.  * @param string $db nazwa bazy danych
  20.  * @param string $user nazwa użytkownika
  21.  * @param string $password hasło użytkownika
  22.  */
  23. function connect($host,$user,$password,$db)
  24. {
  25. $this->connection = @mysql_connect($host,$user,$password);
  26.  
  27. if(!$this->connection)
  28. {
  29. die('Błąd: Nie można nawiązać połączenia z bazą danych.');
  30. }
  31.  
  32. if(!@mysql_select_db($db))
  33. {
  34. die('Błąd: Nie można wybrać bazy danych.');
  35. }
  36. }
  37.  
  38. /**
  39.  * zamyka połączenie z bazą danych
  40.  * @param void
  41.  * @return void
  42.  */
  43. function disconnect()
  44. {
  45. mysql_close($this->connection);
  46. }
  47.  
  48. /**
  49.  * tworzy tablicę wielowymiarową 
  50.  * ze wszystkimi wierszami w tabeli określonej zapytaniem
  51.  * klucze w tablicy, to nazwy tabel
  52.  * @param string $query zapytanie SQL
  53.  * @return array $result wynik
  54.  */
  55. function mysql_fetch_all($query)
  56. {
  57. $result = array();
  58. $r  = @mysql_query($query);
  59.  
  60.  if(@mysql_num_rows($r))
  61.  {
  62. while($row = mysql_fetch_array($r))
  63. {
  64. $result[$row['Name']] = $row;
  65. }
  66.  }
  67.  
  68. return $result;
  69. }
  70.  
  71. /**
  72.  * Pobiera informacje o tabelach z bazy danych
  73.  * @param string $host nazwa hosta
  74.  * @param string $db nazwa bazy danych
  75.  * @param string $user nazwa użytkownika
  76.  * @param string $password hasło użytkownika
  77.  * @return array tabele wraz z informacjami
  78.  */
  79. function get_tables($host,$user,$password,$db)
  80. {
  81. $this->connect($host,$user,$password,$db);
  82. $result = $this->mysql_fetch_all('SHOW TABLE STATUS');
  83. return $result;
  84. }
  85.  
  86. /**
  87.  * pobiera tabele, które powinny zostać zoptymalizowane
  88.  * @param string $host nazwa hosta
  89.  * @param string $db nazwa bazy danych
  90.  * @param string $user nazwa użytkownika
  91.  * @param string $password hasło użytkownika
  92.  * @return array $result zoptymalizowane tabele
  93.  */
  94. function get_overloaded_tables($host,$user,$password,$db)
  95. {
  96. $tables = $this->get_tables($host,$user,$password,$db);
  97.  
  98. foreach($tables as $table => $value)
  99. {
  100. if($value['Data_free'] > 0)
  101. {
  102. $result[$table] = $value;
  103. }
  104. }
  105.  
  106. return $result;
  107. }
  108.  
  109. /**
  110.  * optymalizuje tabele
  111.  * @param string $host nazwa hosta
  112.  * @param string $db nazwa bazy danych
  113.  * @param string $user nazwa użytkownika
  114.  * @param string $password hasło użytkownika
  115.  * @return int $data_free ilość zwolnionego miejsca (w bajtach)
  116.  */
  117. function do_optimization($host,$user,$password,$db)
  118. {
  119. $array = $this->get_overloaded_tables($host,$user,$password,$db);
  120.  
  121. if(count($array) > 0)
  122. {
  123. foreach($array as $table => $value)
  124. {
  125. $data_free += $value['Data_free'];
  126. mysql_query('OPTIMIZE TABLE `'.$table.'`');
  127. }
  128. }
  129.  
  130. else
  131. {
  132. $data_free = 0;
  133. }
  134.  
  135. $this->disconnect();
  136.  
  137. return $data_free;
  138. }
  139.  
  140. }
  141.  
  142. ?>


sposób użycia:

  1. <?php
  2.  
  3. require 'optimize_database.class.php'; // plik z klasą
  4.  
  5. $optimize_database = new optimize_database;
  6. $data_free = $optimize_database -> do_optimization('localhost','admin','password','bazadanych');
  7.  
  8. echo 'Optymalizacja bazy danych zakończona: odzyskano '.$data_free.' bajt(ów)';
  9.  
  10. ?>


Ten post edytował Speedy 4.05.2006, 10:27:56


--------------------
Sygnatura niezgodna z regulaminem.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 06:38