[mysql] database backup via php

Pagina: 1
Acties:
  • 346 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Ik kan bij mijn webhost geen unix/linux commando's uitvoeren zoals mysql_dump. Toch wil ik graag een script maken in php dat een database kan backuppen.

Dit moet vast kunnen.

Maar hoe kan ik van een database alle tabellen opvragen en deze naar een text bestand oid schrijven..

Acties:
  • 0 Henk 'm!

  • TheBorg
  • Registratie: November 2002
  • Laatst online: 20-09 18:24

TheBorg

Resistance is futile.

PhpMyAdmin?

Acties:
  • 0 Henk 'm!

  • krvabo
  • Registratie: Januari 2003
  • Laatst online: 19-09 22:02

krvabo

MATERIALISE!

Als je externe toegang hebt, kan je ook navicat gebruiken :)
Die kan wel meer dan backups btw :P
( http://www.navicat.com/ )

Pong is probably the best designed shooter in the world.
It's the only one that is made so that if you camp, you die.


Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Nee ik heb geen externe toegang en via phpMyAdmin is geen optie, want het moet automagicly gebeuren.

Ik maak een cronjob aan die dit script dan uitvoerd.

Ik kan alleen nergens wat vinden over het backuppen van een database zonder commando's van mysql te gebruiken...

Dit moet toch wel kunnen ?

Acties:
  • 0 Henk 'm!

  • dev icey
  • Registratie: Augustus 2003
  • Laatst online: 22-04 11:21
Bij de windows versie van mysql kon je altijd de data bestanden backupen, en weer terug zetten. Dus gewoon kopieren en in een andere map plakken. Nadeel hiervan is dat als de data op een hele andere manier gaat worden opgeslagen in een nieuwe versie dat je het niet terug kan zetten. Weet trouwens niet of dit voor linux ook geldt.

Wat is erop tegen SQL te gebruiken? Met show tables en show columns kom je toch aardig ver denk ik?

[ Voor 10% gewijzigd door dev icey op 11-01-2005 17:54 ]


Acties:
  • 0 Henk 'm!

  • vriesdude
  • Registratie: Februari 2002
  • Laatst online: 19-09 19:14
Ik gebruik een cronjob die een functie aanroept van het control panel voor mysql backup, misschien kun je dit ook toepassen bij jouw host. Anders zijn er genoeg mogelijkheden om een hele database te backuppen via php. Vind je zo via google...

/dev/null


Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
"Vind je zo via google" ?

Ik heb aardig me best gedaan maar veel levert het niet op helaas :(

Acties:
  • 0 Henk 'm!

  • dev icey
  • Registratie: Augustus 2003
  • Laatst online: 22-04 11:21
Export:
mysqldump -u user -pPassword dbname > filename.sql

Import:
mysql -u user -pPassword dbname < filename.sql

Gevonden via google op deze pagina: http://lists.evolt.org/ar...-Mon-20010702/036398.html
Google link: http://www.google.nl/sear...mp&btnG=Google+zoeken&lr=

Weet weer niet of dit ook voor linux geldt, maar daar kan je denk ik ook met de commandline werken :>

Tjah, dat kan dus bij jou niet. Excuus. Gaat het ook niet lukken op de andere manier die ik vertelde?

[ Voor 36% gewijzigd door dev icey op 11-01-2005 19:58 ]


Acties:
  • 0 Henk 'm!

  • DR
  • Registratie: December 2000
  • Niet online

DR

Ik kan bij mijn webhost geen unix/linux commando's uitvoeren zoals mysql_dump.
Sjah.

Je zou kunnen kijken hoe ze het in phpmyadmin doen? ;)

Acties:
  • 0 Henk 'm!

  • MarcoL
  • Registratie: Juli 2004
  • Laatst online: 13-11-2024

MarcoL

Onima@dpc

dev icey schreef op dinsdag 11 januari 2005 @ 18:46:
Export:
mysqldump -u user -pPassword dbname > filename.sql

Import:
mysql -u user -pPassword dbname < filename.sql
Leest eer gij blaat?
ViNyL schreef op dinsdag 11 januari 2005 @ 17:29:
Ik kan bij mijn webhost geen unix/linux commando's uitvoeren zoals mysql_dump.
Verder zou ik niet echt een manier weten hoe je het kan backuppen. Phpmyadmin zit een optie in en je hebt mysqldump. Het trucje met de bestanden dom weg kopieren is mij nog niet gelukt om dat tot een goed einde te brengen.
Dus ik zou het eigenlijk niet weten hoe je het dan moet doen.

Don't worry people, i`m a professional idiot


Acties:
  • 0 Henk 'm!

  • Gertjan
  • Registratie: Oktober 2001
  • Laatst online: 09-09 17:11

Gertjan

mmmm, beer...

Kun je met system() of exec() niet gewoon mysqldump aanroepen? Je kunt de output dan weg laten schrijven naar een directory waarop je ftp-access hebt.

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21-09 21:47

Creepy

Tactical Espionage Splatterer

Ali_Illegali schreef op dinsdag 11 januari 2005 @ 19:30:
Kun je met system() of exec() niet gewoon mysqldump aanroepen? Je kunt de output dan weg laten schrijven naar een directory waarop je ftp-access hebt.
ViNyL schreef op dinsdag 11 januari 2005 @ 17:29:
Ik kan bij mijn webhost geen unix/linux commando's uitvoeren zoals mysql_dump.
Hoe groot is de kans dat hij ze vanuit PHP wel kan uitvoeren, als ze niet uit te voeren zijn? :P

"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


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 21-09 14:28
Creepy schreef op dinsdag 11 januari 2005 @ 21:14:
[...][...]Hoe groot is de kans dat hij ze vanuit PHP wel kan uitvoeren, als ze niet uit te voeren zijn? :P
Meestal krijg je geen shell access, en kan je het commando dus niet zomaar intikken.

Acties:
  • 0 Henk 'm!

  • vriesdude
  • Registratie: Februari 2002
  • Laatst online: 19-09 19:14
ViNyL schreef op dinsdag 11 januari 2005 @ 18:30:
"Vind je zo via google" ?

Ik heb aardig me best gedaan maar veel levert het niet op helaas :(
http://www.phpfreakz.nl/library.php?sid=16376
Denk je dat je hier wat aan hebt ?

edit: ik las je start post nog eens goed en zag één ding over het hoofd, je wilt ook nog weten hoe je meerdere db's kan backupen...

PHP:
1
2
3
4
5
6
7
8
9
mysql_connect('dbhost', 'username', 'password');
$db_list = mysql_list_dbs();

$i = 0;
$cnt = mysql_num_rows($db_list);
while ($i < $cnt) {
   echo mysql_db_name($db_list, $i) . "\n";
   $i++;
}


aan de hand van de bovenstaande code kun je alle database's ophalen en die weer aan het backup scriptje meegeven die je vind in de link.

[ Voor 47% gewijzigd door vriesdude op 11-01-2005 22:06 ]

/dev/null


Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Wow, daar heb ik idd wat aan, dank je ik ga gelijk eens even kijken!

Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
vriesdude schreef op dinsdag 11 januari 2005 @ 22:02:
[...]


http://www.phpfreakz.nl/library.php?sid=16376
Denk je dat je hier wat aan hebt ?

edit: ik las je start post nog eens goed en zag één ding over het hoofd, je wilt ook nog weten hoe je meerdere db's kan backupen...

PHP:
1
2
3
4
5
6
7
8
9
mysql_connect('dbhost', 'username', 'password');
$db_list = mysql_list_dbs();

$i = 0;
$cnt = mysql_num_rows($db_list);
while ($i < $cnt) {
   echo mysql_db_name($db_list, $i) . "\n";
   $i++;
}


aan de hand van de bovenstaande code kun je alle database's ophalen en die weer aan het backup scriptje meegeven die je vind in de link.
Niet meerdere databases, maar meerdere tabellen, maar dat moet wel lukken met die functie..

Acties:
  • 0 Henk 'm!

  • Gertjan
  • Registratie: Oktober 2001
  • Laatst online: 09-09 17:11

Gertjan

mmmm, beer...

Creepy schreef op dinsdag 11 januari 2005 @ 21:14:
[...]
[...]
Hoe groot is de kans dat hij ze vanuit PHP wel kan uitvoeren, als ze niet uit te voeren zijn? :P
Ik ging er van uit dat hij geen shell-access heeft en daarom die commando's niet uit kan voeren. Kan de TS hier misschien wat meer info over geven? Als hij namelijk wel met system() oid kan werken zou dat een oplossing kunnen zijn.

Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Hmm ik geloof niet dat het mogelijk is bij de webhost, het zal dus een php only oplossing moeten zijn.

Ik ben even met die funtie die hierboven aangegeven staat aan de gang geweest maar dat lukt niet helemaal...

Acties:
  • 0 Henk 'm!

  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 10-09 22:45
Je zal het toch zo moeten doen ;)

Ik heb ook zoiets geschreven omdat ik ook niks kon vinden en het werkt hetzelfde als phpMyAdmin.

Je opent een tabel, leest een rij en die rij die transformeer je in een plain text INSERT() functie en die prop je in een textbestandje. Het is niet zo netjes maar het moet toch gebeuren ;)

Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Ok, het werkt nu prima. Hij schrijft iedere tabel weg de functie hiervoor roep ik zo aan
PHP:
1
2
3
4
5
6
7
mysql_connect ("","", ""); 
$db = "blaat"';
$tables = mysql_list_tables($db);
while (list($table_name) = mysql_fetch_array($tables))
{
mysqlbackup($db, $table_name);
}


Het enige wat er nu gebeurt is dat de files met alleen leesrechten voor de eigenaar weggezet worden (chmod 600). Aangezien ik niet de eigenaar ben, kan ik er dus nix mee behalve deleten van de server.

Ik heb al geprobeerd om chmod toe te voegen in de functie maar zonder resultaat. Waar kan ik dit het beste doen?
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
function mysqlbackup($db_database, $db_table)
  {    
      //configuration
      $backupto = 'padnaarbackupmap';
      $filter = ""; //example: WHERE date=CURDATE()
      
      //connect to database
      $db_hostname = '';
      $db_username = '';
      $db_password = '';
      if (!$db_connection = mysql_connect($db_hostname, $db_username, $db_password))
      {
          echo mysql_error();
      }
      if (!mysql_select_db($db_database, $db_connection))
      {
          echo mysql_error();
      }
      
      //read the table data and write backup
      $rules = 0;
      $handle = fopen($backupto.$db_table.' - '.date('Y-m-d (h-i-s)').'.txt', 'a+');
      $getrecords = mysql_query("SELECT * FROM ".$db_table." ".stripslashes($filter));
      $getfields = mysql_query("SELECT * FROM ".$db_table." LIMIT 1");
      while ($record = mysql_fetch_object($getrecords))
      {
          //get all field names
          $countfields = mysql_num_fields($getfields);
          $field = 0;
          fwrite($handle,'INSERT INTO '.$db_table.' (');
          while ($field < $countfields)
          {
              if ($field <> 0)
              {
                  fwrite($handle,', `'.mysql_field_name($getfields, $field).'`');
              }
              else
              {
                  fwrite($handle,'`'.mysql_field_name($getfields, $field).'`');
              }
              $field++; 
          }
          fwrite($handle,') VALUES (');
          //get all data from records
          $field = 0;
          while ($field < $countfields)
          {
              $fieldname = mysql_field_name($getfields, $field);
              if ($field <> 0)
              {
                  fwrite($handle,', \''.stripslashes($record->$fieldname).'\'');
              }
              else
              {
                 fwrite($handle,'\''.stripslashes($record->$fieldname).'\'');
              }
              $field++;
          }
          fwrite($handle,');'."\r\n");

          $rules++;
            }   
      fclose($handle);      
}

Acties:
  • 0 Henk 'm!

  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 10-09 22:45
Misschien even net voor fclose:

PHP:
1
chmod ($handle, 0755);

[ Voor 17% gewijzigd door Megamind op 12-01-2005 16:02 ]


Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Dit had ik zelf idd ook al geprobeerd maar dan krijg ik de volgende melding:

PHP:
1
2
3
Warning: chmod(): No such file or directory in /pad/backup/backup.php on line 71

Warning: chmod(): Unable to access Resource id #13 in /pad/backup/backup.php on line 71

Acties:
  • 0 Henk 'm!

  • dajappie
  • Registratie: Januari 2005
  • Laatst online: 21-09 20:47
chmod werkt alleen op relatieve en absolute bestandsnamen, niet op filehandles volgens mij

Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Ahhh ok dan heb ik het nu werken:
PHP:
1
@chmod ($backupto.$db_table.' - '.date('Y-m-d').'.txt', 0755);


Thanks voor de tip..!!

Acties:
  • 0 Henk 'm!

  • vriesdude
  • Registratie: Februari 2002
  • Laatst online: 19-09 19:14
ViNyL schreef op woensdag 12 januari 2005 @ 16:24:
Ahhh ok dan heb ik het nu werken:
PHP:
1
@chmod ($backupto.$db_table.' - '.date('Y-m-d').'.txt', 0755);


Thanks voor de tip..!!
Je hele backupscript werkt dus nu, overigens dacht ik dat het backup script in die link zelf al alle table's af kon, of vergis ik me (heb ook maar heel kort gekeken)..

iig fijn dat je er uit bent gekomen

/dev/null


Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Yep het werkt idd, dank allen voor de hulp!
Pagina: 1