Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]SELECT * INTO OUTFILE, Nie działa, zależy mi na szybkiej odpowiedzi
konrados
post
Post #1





Grupa: Zarejestrowani
Postów: 623
Pomógł: 79
Dołączył: 16.01.2008

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


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.

Ten post edytował konrados 5.10.2010, 14:44:51
Go to the top of the page
+Quote Post
melkorm
post
Post #2





Grupa: Zarejestrowani
Postów: 1 366
Pomógł: 261
Dołączył: 23.09.2008
Skąd: Bydgoszcz

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


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.


--------------------
Go to the top of the page
+Quote Post
konrados
post
Post #3





Grupa: Zarejestrowani
Postów: 623
Pomógł: 79
Dołączył: 16.01.2008

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


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.

Ten post edytował konrados 5.10.2010, 16:27:51
Go to the top of the page
+Quote Post
melkorm
post
Post #4





Grupa: Zarejestrowani
Postów: 1 366
Pomógł: 261
Dołączył: 23.09.2008
Skąd: Bydgoszcz

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


Import w phpMyAdmin, albo po SSH
Kod
mysql -h host -u user -p baza < dump.sql


--------------------
Go to the top of the page
+Quote Post
konrados
post
Post #5





Grupa: Zarejestrowani
Postów: 623
Pomógł: 79
Dołączył: 16.01.2008

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


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ą).

Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 21.08.2025 - 17:07