Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]SELECT * INTO OUTFILE
Forum PHP.pl > Forum > Przedszkole
konrados
Hej,

Chciałbym móc robić kopie bezpieczeństwa. Już mam skrypcik, który kopiuje mi moje bazy danych do innej bazy danych, ale obydwie są na tym samym serwerze. Jako, że mam ostatnio problemy z moją firmą hostingową, chciałbym również robić kopie do plików, które sobie będę potem gdzieś kopiował (poza serwer).

Oczywiście pierwsze wyniki w googlu to kwerenda SELECT * INTO OUTFILE, i oto moja funkcja:

  1. function CopyTableToFile($tableName){
  2. $backupFile = "backup/$tableName.sql";
  3. $query = "SELECT * INTO OUTFILE '$backupFile' FROM $tableName";
  4. $result = mysql_query($query) or die (mysql_error());
  5. echo " >>table: $tableName copied to $backupFile file</br>";
  6. }


Tyle, że nie działa... błąd:

"Access denied for user 'moja_nazwa_usera_bazy_danych'@'localhost' (using password: TAK)"

(username, hasło - to wszystko jest prawidłowe). Inne kwerendy działają ok, np:

  1. mysql_query("INSERT INTO db_backup.$table_name SELECT * FROM $nazwaTabeli");


ps. Wcześniej jest wywoływana funk. mysql_select_db więc jest wybrana właściwa baza. Tak więc pewnie problem z "select * into outfile".

Robienie "export" w phpMyAdmin też nie działa - kopiowane jest tylko ileś tam MB z bazy (co stanowi 30% całej bazy) i na tym koniec, bez żadnego wyświetlonego błędu.

Chciałbym zakończyć współpracę z moją firmą hostingową, no ale najpierw muszę zrobić kopie baz danych na mój komputer, no i nie wiem jak.

Bardzo mi zależy na czasie sad.gif No musi być jakaś prosta metoda... Bardzo proszę o pomoc początkującemu.
melkorm
Kod
File_priv    Permission to read and write FILEs (for example LOAD DATA INFILE)


Pewnie nie masz uprawnień do tego.

Z phpMyAdmina to pewnie czas wykonywania skryptu ograniczony, a dostęp po SSH masz? Bo wtedy wystarczy to.
konrados
Nie, no właśnie nie mam dostępu do SSH.

Znalazłem inną funk. która robi plik:

  1. function backup_tables($host, $user, $pass, $dbName, $tables = '*') {
  2. $link = mysql_connect($host, $user, $pass) or die(mysql_error());;
  3. mysql_select_db($dbName, $link) or die(mysql_error());;
  4. //get all of the tables
  5. if ($tables == '*') {
  6. $tables = array();
  7. $result = mysql_query('SHOW TABLES');
  8. while ($row = mysql_fetch_row($result)) {
  9. $tables[] = $row[0];
  10. }
  11. } else {
  12. $tables = is_array($tables) ? $tables : explode(',', $tables);
  13. }
  14. //cycle through
  15. foreach ($tables as $table) {
  16. $result = mysql_query('SELECT * FROM ' . $table);
  17. $num_fields = mysql_num_fields($result);
  18. $return.= 'DROP TABLE ' . $table . ';';
  19. $row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE ' . $table));
  20. $return.= "\n\n" . $row2[1] . ";\n\n";
  21. for ($i = 0; $i < $num_fields; $i++) {
  22. while ($row = mysql_fetch_row($result)) {
  23. $return.= 'INSERT INTO ' . $table . ' VALUES(';
  24. for ($j = 0; $j < $num_fields; $j++) {
  25. $row[$j] = addslashes($row[$j]);
  26. $row[$j] = ereg_replace("\n", "\\n", $row[$j]);
  27. if (isset($row[$j])) { $return.= '"' . $row[$j] . '"'; } else { $return.= '""'; }
  28. if ($j < ($num_fields - 1)) { $return.= ','; }
  29. }
  30. $return.= ");\n";
  31. }
  32. }
  33. $return.="\n\n\n";
  34. }
  35. //save file
  36. $handle = fopen('backups/db-backup-' . time() . '-' . (md5(implode(',', $tables))) . '.sql', 'w+');
  37. fwrite($handle, $return);
  38. fclose($handle);
  39. echo "<b>backup to file: db-backup done</br></b>";
  40. }


I wygląda na to, że działa mimo limitu czasu wykonania skryptu. Pozostaje pytanie - co miałbym zrobić z tym tworzonym plikiem .sql by odtworzyć bazę? Na stronie opisującej skrypt nie znalazłem tej informacji.
melkorm
Import w phpMyAdmin, albo po SSH
Kod
mysql -h host -u user -p baza < dump.sql
konrados
Re:
Cytat
mysql -h host -u user -p baza < dump.sql


Nie mam tej możliwości kurde no! Jestem na serwerze wirtualnym.

No weźcie pomóżcie. Już wysłałem bardzo obraźliwy opieprz do mojej firmy hostingowej i bardzo chciałbym mieć backup bazy w środę przed 8.00 (zanim biura się otwierają).

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.