[PHP] mysqldump

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • ripexx
  • Registratie: Juli 2002
  • Laatst online: 12-09 10:23
Het probleem is waarschijnlijk al vaker langsgekomen, maar ik kom er niet uit. Ik heb de search geraadpleegd evenals die van ACM en ook google en wat andere PHP sites maar ik kan niets vinden voor mijn specifieke probleem.

Ik ben bezig met de ontwikkeling van een kleine website gebaseerd op php/mysql. Maar nu wil ik mysql backuppen. Dat gaat wel vanaf de commandline maar ik mag geen cronjobs runnen dus ik kan niet schedulen. Dus heb ik de oplossing in iets anders gevonden. De webserver dir wordt door de hoster wel veilig gesteld, alleen doen ze niets met mysql. Ben al eens een keer al me data kwijt geraakt. Nou zijn zo'n 1500 records niet veel, maar als je alles weer met de hand moet invoeren ben je geen blije eikel.

Nu wordt er dus gekenen naar een datum in een database, als het verschil groter is dan x uur/dagen zal er een dump van de database worden gemaakt. Deze zal dan in de home dir terecht komen (niet toegankelijk via web!) en door de hoster worden veilig gesteld.

De volgende code verzorgt de backup:
PHP:
1
2
3
4
<?php
$datum = date("Ymd");
exec("/usr/bin/mysqldump -u xxx -pYYYY dbnaam > /home/username/$datum.sql");
?>


PHP safemode is off, mara nu zie ik in de apache erro file het volgende:

code:
1
2
/usr/bin/mysqldump: Can't get CREATE TABLE for table '>' 
(Table 'dbnaam.>' doesn't exist)


Heeft iemand een idee wat er fout gaat, want volgens mijn is de code gewoon dit en verder niets?

BTW dit is een tijdleijke oplossing, ben thuis een shell script aan het maen welke een compelte baclkup maakt van de db en de web dir, dit alles tarred en via ftp verstuur naar mijn eigen servertje maar das voor later. :)

[ Voor 0% gewijzigd door ripexx op 07-09-2002 16:02 . Reden: layout verneuker aangepast ]

buit is binnen sukkel


Acties:
  • 0 Henk 'm!

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 10-09 15:51

thomaske

» » » » » »

ik gebruik het zo:

mysqldump -t --host=xxx --user=xxx --password=xxx $db_name $tables > backup.sql

[edit]
je moet dus de tabellen welke je wilt backuppen erbij zetten!

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Acties:
  • 0 Henk 'm!

  • ripexx
  • Registratie: Juli 2002
  • Laatst online: 12-09 10:23
Oke maar als ik hetzelfde commando op in de shell geef, dan werkt het wel? Maar los daarvan zal ik het eens ff proberen.

buit is binnen sukkel


Acties:
  • 0 Henk 'm!

  • Skinny
  • Registratie: Januari 2000
  • Laatst online: 11-09 16:00

Skinny

DIRECT!

zet er eens een '-a' als optie bij (van Alle tabellen)

Als die er niet bij staat, dan gaat ie alles wat erachter staat als tabellen zien (in dit geval > dus)

SIZE does matter.
"You're go at throttle up!"


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Waarschijnlijk zit 't probleem erin dat de 'shell' die PHP gebruikt de redirect niet afvangt _voor_ invocation van 't programma.

Je zou ook de output van mysqldump op kunnen vangen door de `` backtick quotes te gebruiken:
PHP:
1
$str = `ls`;
in $str staat nu de output van de cmdline opdracht ls

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

drm schreef op 08 september 2002 @ 01:55:
Waarschijnlijk zit 't probleem erin dat de 'shell' die PHP gebruikt de redirect niet afvangt _voor_ invocation van 't programma.

Je zou ook de output van mysqldump op kunnen vangen door de `` backtick quotes te gebruiken:
PHP:
1
$str = `ls`;
in $str staat nu de output van de cmdline opdracht ls

Met een database van 300MB vindt je php dat niet leuk meer ;)

Het script dat we voor tweakers.net gebruiken werkt trouwens met passthru ipv exec, misschien werkt het daarmee wel.

Acties:
  • 0 Henk 'm!

  • ripexx
  • Registratie: Juli 2002
  • Laatst online: 12-09 10:23
Nou ik heb het aan de praat, heb nog eens gezocht op internet, en als laatste maar ff php en apache een schop gegeven. Daarna werkte het wel, zit alleen nog ff te kloten met permissie voor het wegschrijven van een bestand, maar dat komt allemaal wel goed. Thx voor de tips. BTW wordt de database echt niet groter dan een mb tje of 2 dus das geen probleem. Nee als ik een db van 300mb + zou hebben, zou ik inderdaad niet snel met php gaan prutsen, dan is cron logischer.

Maar ACM je hebt me nu toch nieuwsgierig gemaakt, je gaat met toch niet vertellen dat tweakers alle drie de grote db's met php veilig stelt. Je zou toch zeggen dat je het zwikkie doet dumpen, dan tarren en wegschrijven naar locale backup en een remote station ala ftp of een tapeje.

buit is binnen sukkel


Acties:
  • 0 Henk 'm!

  • MiezeL
  • Registratie: Augustus 2002
  • Laatst online: 04-03 12:39
Als je het aan de praat hebt, zou het ook wel fijn zijn dat je hier even de code post die je nu gebruikt. Aangezien ik (en vast ook wel eens meerdere mensen) op zoek zijn naar een soortgelijke aanpak van een mysqldump, is het wel nuttig als ik (/we) ook kunnen zien wat dan de oplossing is (-:

Acties:
  • 0 Henk 'm!

Verwijderd

MiezeL schreef op 08 september 2002 @ 18:44:
Als je het aan de praat hebt, zou het ook wel fijn zijn dat je hier even de code post die je nu gebruikt. Aangezien ik (en vast ook wel eens meerdere mensen) op zoek zijn naar een soortgelijke aanpak van een mysqldump, is het wel nuttig als ik (/we) ook kunnen zien wat dan de oplossing is (-:
idd :D

Acties:
  • 0 Henk 'm!

  • Grum
  • Registratie: Juni 2001
  • Niet online
oftewel je leest de manual van mysqldump :Z

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

ripexx schreef op 08 september 2002 @ 17:00:
Maar ACM je hebt me nu toch nieuwsgierig gemaakt, je gaat met toch niet vertellen dat tweakers alle drie de grote db's met php veilig stelt. Je zou toch zeggen dat je het zwikkie doet dumpen, dan tarren en wegschrijven naar locale backup en een remote station ala ftp of een tapeje.

Ik zou niet weten waarom php het geheel hierin onveilig maakt :?

We doen met php een serie mysqldump's en de output daarvan wordt rechtstreeks naar via gzip op de disk gezet.
Of je dat nou op je commandline doet of met een of andere scriptingtaal, dat boeit verder niet, met je scripting taal heb je zelfs meer controle.

Acties:
  • 0 Henk 'm!

  • ripexx
  • Registratie: Juli 2002
  • Laatst online: 12-09 10:23
ACM schreef op 08 september 2002 @ 21:27:

[...]

Ik zou niet weten waarom php het geheel hierin onveilig maakt :?

We doen met php een serie mysqldump's en de output daarvan wordt rechtstreeks naar via gzip op de disk gezet.
Of je dat nou op je commandline doet of met een of andere scriptingtaal, dat boeit verder niet, met je scripting taal heb je zelfs meer controle.
Ik geloof graag dat je meer controle hebt maar een shell-script run je meestal via een cronjob. Oke php kun je ook via de commandline runnen maar je weet waarschijnlijk wel wat ik bedoel. BTW ik beloof dat als mijn scriptje af is dat ik het geheel zal posten en dan mogen jullie er op schieten :)

Maar storen jullie je db's dan helemaal niet extern op tape of iets dergelijks, want in jullie laatste server update is mij geen tapestreamer opgevallen. Ook zal ik eens wat verder kijken naar dat passthru verhaal ben zelf meer bekend met exec() en system(). Thx voor de hulp :)

buit is binnen sukkel


Acties:
  • 0 Henk 'm!

Verwijderd

Script al af?

Acties:
  • 0 Henk 'm!

  • ripexx
  • Registratie: Juli 2002
  • Laatst online: 12-09 10:23
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
<?php

/*
   Inlude voor het regelmatig backuppen van de database
   
   Vergelijk de datum van laatset backup met huidige, als verschil
   te groot is dan backup naar server, plus eventuele email, copy naar lokale server
   
   De volgende data komt uit andere bestanden:
   $database -> naam van de betreffende database
   database connectie
*/

// Vastgestelde variabelen

$backupdir = "/home/log/"; // een dir
$when = "86400";   // Tijd in sec 24h = 60*60*24 = 86400s
$datum = date("Ymd");

$send_mail = "1"; // Als 0 dan geen mail, als 1 wel mail
$mail_adres = "";
$mail_subject = "Backup status/log database backup";

$do_ftp = "1"; // Als 0 dan geen ftp, als 1 dan wel ftp
$ftp_server = "";
$ftp_user = "";
$ftp_pass = "";


// Get latest backup date

$backup_query = mysql_query("SELECT * FROM backup ORDER BY backup.bid DESC;")
            or die ("Invalid Backup query");
$backup_row = mysql_fetch_array($backup_query);
$calctime = $when + $backup_row["tijd"];
$tijd = time();
$dif = $tijd - $calctime; 

if($dif > "0")
{
    // Doen van backup op server
    $backup_file = $backupdir;
    $backup_file .= $database;
    $backup_file .= "-";
    $backup_file .= $datum;
    $backup_file .= ".sql";
    $backup = system("mysqldumps -u xxxx -pYYYYY $database > $backup_file");
    
    // note: alleen check op bestaan van file, niet op inhoud
    if(file_exists($backup_file)){
    mysql_query(" INSERT INTO `backup` (`tijd`, `datum`, `bid`) VALUES ('$tijd', NOW('0000-00-00'), '');")
            or die ("Invalid insert backup query");
    
    };
    
    
    if($do_ftp == "1")
    {
        
        $conn = ftp_connect($ftp_server); 
        $login_result = ftp_login($conn, $ftp_user, $ftp_pass); 

        // check connection
        if ((!$conn) || (!$login_result)) 
        { 
                $ftp_log = "Failed to connect to ftp server or bad login";
            }else{
            
                    
                // upload backup
                $upload = ftp_put($conn, "backup.sql", $backup_file, FTP_ASCII); 

            if (!$upload) 
            { 
                    $ftp_log = "Upload failed";
                } else {
                $ftp_log = "Bestand is verstuurd";
                };
            };

        ftp_quit($conn); 

    };
    
    
    if($send_mail == "1")
    {
    
    // Verzend email dat backup is gedaan
    $mess = "Op ";
    $mess .= geef_dag_van_week();
    $mess .= date(" j ");
    $mess .= geef_maand_van_jaar();
    $mess .= date(" Y, H:i");
    $mess .= " is de volgende database: $database gebackupped en heeft de volgende naam gekregen: $backup_file ";
    $mess .= "FTP log: $ftp_log";
    
    Mail($mail_adres, $mail_subject, $mess, "From: $mail_adres\r\n");
        
    };

    
};

// Doe niets :)

?>


Schiet er maar eens op los

btw \r\n wordt rn Bugje in de php parser van Parse

buit is binnen sukkel


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Nou, at least ben je een quoteje vergeten :P

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • ripexx
  • Registratie: Juli 2002
  • Laatst online: 12-09 10:23
drm schreef op 09 september 2002 @ 09:42:
Nou, at least ben je een quoteje vergeten :P
Helaas werd geescaped :)

buit is binnen sukkel


Acties:
  • 0 Henk 'm!

  • ReLight
  • Registratie: Augustus 2001
  • Laatst online: 27-07 10:47

ReLight

echo("What Now ? !")

<xml>
<onzinninge dank betuiging>
_/-\o_
Mijn database dankt u.
</onzinninge dank betuiging>
</xml>

Mijn zoon & dochter zijn de toekomst, de rest is tijdsvermaak. Home assistant & & Nibe S2125-12/SMO-S40, RMU-s40 & Tado - Volvo C40 ER, SE

Pagina: 1