Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak zrobić bacup MySQL`a?
Forum PHP.pl > Forum > PHP
TomASS
Jak zrobić backup bazy danych MySQL, chodzi mi o zapis tychże baz na serwerze w postaci jednego pliku na każdą tabelę, boądź wszystkich tabel do tego samego pliku. Może to być w formie INSTERTÓW..... lub plików tekstowych.....

Próbowałem już z BACKUP/RESTORE TABLE, ale nie mam uprawnień typu FILE (cPanel tego nie przydziela) próbowałem też zapisywać do pliku txt

  1. <?php
  2.  
  3. $row['pierwsze'].&#092;";\".$row['drugie'].\";\".$row['trzecie'].\"n\";
  4.  
  5. ?>

i później ja wczytuje to to końcowe "\n" w postaci kwadracika też importuje się do bazy danych :/ jak napisze \t\n (lub \r\n - nie pamiętam tongue.gif ) to też nic to nie daje - tylko dwa kwadraciki.


P.S. phpMyAdmin odpada

Już mi ręce opadają. Bardzo proszę o pomoc.
kszychu
Masz dostęp do shella? Wypróbuj mysqldump.
AcidBurnt
mowisz cos co Cpanelu, z tego co wiem to tam jest taka opcje jak buckup bazy
TomASS
nie nie mam dostępu do shella :/ chodzi mi o coś co "końcowy" użytkownik umiałby prosto zrobić, więc cPanel odpada
party
Możesz zawsze oddzielić \n od treści:
Cytat
jeden;dwa;trzy;\n
TomASS
że jak??
Bakus
  1. <?php
  2. function save_data($data)
  3. {
  4. fwrite($this->dump_file_handle, $data) or die(&#092;"fwrite\");
  5. }
  6.  
  7. function data(&$db, &$table)
  8. {
  9. $sql = mysql_query(&#092;"SELECT * FROM `$db`.`$table`\");
  10. $nf = mysql_num_fields($sql);
  11. $nr = mysql_num_rows($sql);
  12. for ($c=0;$c<$nr;$c++)
  13. {
  14. $this->save_data(&#092;"INSERT INTO `$db`.`$table` VALUES (\");
  15. $row = mysql_fetch_row($sql);
  16. for($d=0;$d<$nf;$d++)
  17. {
  18. $data = strval($row[$d]);
  19. if(is_null($row[$d]))
  20. {
  21. $this->save_data(&#092;"NULL\");
  22. }else{
  23. if(is_int($row[$d]))
  24. {
  25. $this->save_data(mysql_escape_string($data));
  26. }else{
  27. $this->save_data(&#092;"'\".mysql_escape_string($data).\"'\");
  28. }
  29. }
  30. if ($d < ($nf-1))
  31. {
  32. $this->save_data(&#092;", \");
  33. }
  34. }
  35. $this->save_data(&#092;");n\");
  36. }
  37. $this->save_data(&#092;"n\");
  38. }
  39.  
  40. function tables_structure(&$db)
  41. {
  42. while($wiersz = mysql_fetch_row($list))
  43. {
  44. $table = $wiersz[0];
  45. $this->save_data(&#092;"DROP TABLE IF EXISTS `$db`.`$table`;n\");
  46. $sql = mysql_query('SHOW CREATE TABLE ' . $table);
  47. $tmp = mysql_fetch_array($sql);
  48. $this->save_data(str_replace(&#092;"`$table`\", \"`$db`.`$table`\", $tmp[1]) . \";nn\");
  49. $this->data($db, $table);
  50. }
  51. }
  52.  
  53. function create_dump()
  54. {
  55. $sql = mysql_query(&#092;"SHOW DATABASES\");
  56. while($db = mysql_fetch_row($sql))
  57. {
  58. if($db[0] != &#092;"mysql\")
  59. {
  60. $this->save_data(&#092;"DROP DATABASE IF EXISTS `$db[0]`;n\");
  61. $this->save_data(&#092;"CREATE DATABASE `$db[0]`;nn\");
  62. $this->tables_structure($db[0]);
  63. }
  64. }
  65. }
  66. ?>
Przygotowałem klasę, która tworzy i przywraca backupy baz MySQL... By nie pokazywać całej klasy wyciąłem funkcje, które są niezbędne do zrobienia backupa...
Dla tej klasy tzeba obsłużyć jeszcze: otworzenie połącznia z bazą danych, otworzyć plik z dumpem i go zamknąć... ot i wszystko... jak spędzisz przy tym 1-2 godzinki, to wszystko stanie się jasne i przejrzste.
Dodam, że skrypt tworzy kopię wszystkich baz i tabel dostępnych dla daneo użytkownika. Jedynym wyjątkiem jest baza mysql, która nie powinna być w jaki kolwiek sposób ruszana...
TomASS
Cytat(Bakus @ 2004-06-21 17:17:17)
  1. <?php
  2.     function save_data($data)
  3.     {
  4.         fwrite($this->dump_file_handle, $data) or die(&#092;"fwrite\");
  5.     }
  6.  
  7.     function data(&$db, &$table)
  8.     {
  9.         $sql = mysql_query(&#092;"SELECT * FROM `$db`.`$table`\");
  10.         $nf = mysql_num_fields($sql);
  11.         $nr = mysql_num_rows($sql);
  12.         for ($c=0;$c<$nr;$c++)
  13.         {
  14.             $this->save_data(&#092;"INSERT INTO `$db`.`$table` VALUES (\");
  15.             $row = mysql_fetch_row($sql);
  16.             for($d=0;$d<$nf;$d++)
  17.             {
  18.                 $data = strval($row[$d]);
  19.                 if(is_null($row[$d]))
  20.                 {
  21.                     $this->save_data(&#092;"NULL\");
  22.                 }else{
  23.                     if(is_int($row[$d]))
  24.                     {
  25.                     $this->save_data(mysql_escape_string($data));
  26.                     }else{
  27.                     $this->save_data(&#092;"'\".mysql_escape_string($data).\"'\");
  28.                     }
  29.                 }
  30.                 if ($d < ($nf-1))
  31.                 {
  32.                     $this->save_data(&#092;", \");
  33.                 }
  34.             }
  35.             $this->save_data(&#092;");n\");
  36.         }
  37.         $this->save_data(&#092;"n\");
  38.     }
  39.  
  40.     function tables_structure(&$db)
  41.     {
  42.         while($wiersz = mysql_fetch_row($list))
  43.         {
  44.             $table = $wiersz[0];
  45.             $this->save_data(&#092;"DROP TABLE IF EXISTS `$db`.`$table`;n\");
  46.             $sql = mysql_query('SHOW CREATE TABLE ' . $table);
  47.             $tmp = mysql_fetch_array($sql);
  48.             $this->save_data(str_replace(&#092;"`$table`\", \"`$db`.`$table`\", $tmp[1]) . \";nn\");
  49.             $this->data($db, $table);
  50.         }
  51.     }
  52.  
  53.     function create_dump()
  54.     {
  55.         $sql = mysql_query(&#092;"SHOW DATABASES\");
  56.         while($db = mysql_fetch_row($sql))
  57.         {
  58.             if($db[0] != &#092;"mysql\")
  59.             {
  60.                 $this->save_data(&#092;"DROP DATABASE IF EXISTS `$db[0]`;n\");
  61.                 $this->save_data(&#092;"CREATE DATABASE `$db[0]`;nn\");
  62.                 $this->tables_structure($db[0]);
  63.             }
  64.         }
  65.     }
  66. ?>
Przygotowałem klasę, która tworzy i przywraca backupy baz MySQL... By nie pokazywać całej klasy wyciąłem funkcje, które są niezbędne do zrobienia backupa...
Dla tej klasy tzeba obsłużyć jeszcze: otworzenie połącznia z bazą danych, otworzyć plik z dumpem i go zamknąć... ot i wszystko... jak spędzisz przy tym 1-2 godzinki, to wszystko stanie się jasne i przejrzste.
Dodam, że skrypt tworzy kopię wszystkich baz i tabel dostępnych dla daneo użytkownika. Jedynym wyjątkiem jest baza mysql, która nie powinna być w jaki kolwiek sposób ruszana...

A dlaczego wyciełeś questionmark.gif winksmiley.jpg Nie mógłbyś mi na priwa zrzucić ? tongue.gif
Bakus
Nie... bo nie wszystko jest przenośne (wiele jest dostosowane do moich wygórowanych potrzeb), a nie chce mi się z tym bawić...
Mogę jeszcze tylko dodać, że skrypt obsługuje 3 serwery naraz (główny i 2 z kopią)... a tyle chyba nie masz... winksmiley.jpg
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.