Een backup maken van een database bij een hoster
Ik heb een script gemaakt waarmee ik een backup kan maken van een MySql dqtabase die staat op mijn lokale pc
Het script staat in de www map ( ik gebruik WAMP ). Werkt prima.
Maar als ik vervolgens het script plaats bij mijn hoster ( one.com ) dan werkt het niet. Natuurlijk doe ik iets fout maar ik weet niet wat
De inloggegevens ( host, user en DbName ) zijn identiek.
ik krijg deze melding op mijn domein : Deze pagina werkt niet
Wat doe ik fout ?
Waar komt die foutmelding vandaan?
Code (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
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
<?php
ob_start();
$username = "XXXXXX";
$password = "XXXXXXX";
$hostname = "localhost";
$dbname = "XXXXXXXX";
// if mysqldump is on the system path you do not need to specify the full path
// simply use "mysqldump --add-drop-table ..." in this case
$command = "C:\wamp64\bin\mysql\mysql5.7.31\bin\mysqldump --add-drop-table --host=$hostname --user=$username ";
if ($password)
$command.= "--password=". $password ." ";
$command.= $dbname;
system($command);
$dump = ob_get_contents();
ob_end_clean();
// send dump file to the output
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($dbname . "_" . date("Y-m-d_H-i-s").".sql"));
flush();
echo $dump;
exit();
?>
ob_start();
$username = "XXXXXX";
$password = "XXXXXXX";
$hostname = "localhost";
$dbname = "XXXXXXXX";
// if mysqldump is on the system path you do not need to specify the full path
// simply use "mysqldump --add-drop-table ..." in this case
$command = "C:\wamp64\bin\mysql\mysql5.7.31\bin\mysqldump --add-drop-table --host=$hostname --user=$username ";
if ($password)
$command.= "--password=". $password ." ";
$command.= $dbname;
system($command);
$dump = ob_get_contents();
ob_end_clean();
// send dump file to the output
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($dbname . "_" . date("Y-m-d_H-i-s").".sql"));
flush();
echo $dump;
exit();
?>
De fout is deze :
$command = "C:\wamp64\bin\mysql\mysql5.7.31\bin\mysqldump --add-drop-table --host=$hostname --user=$username ";
dit pad staat niet bij de hoster, dus heb ik een ander script nodig ...
Haal dat pad voor mysqldump eens weg, en probeer opnieuw.
ik heb gewoonweg een werkend script nodig.
Probeer dit eens?
system($command,$output);
echo "Uitvoer: ".$output;
Wat is de uitvoer?
Gewijzigd op 29/11/2022 17:21:53 door - Ariën -
als ik eruit haal door dit te doen : //system($command);
dan slaat hij het bestand op, maar uiteraard zonder data in het bestand
Toevoeging op 29/11/2022 18:52:21:
dus mysqldump werkt niet
Je moet hem ook NIET commentariseren met // ervoor, he ;-)
Laat je relevante code eens zien? Ik denk dat die ergens een syntax-fout heeft, afgaande op die error.
Gewijzigd op 29/11/2022 19:01:21 door - Ariën -
Code (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
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
<?php
ob_start();
$username = "xXXXXXXXXXXXXXXXX";
$password="XXXXXXXXXXXXXXXXX";
$dbname="XXXXXXXXXXXXXXXXXXXX";
$hostname = "localhost";
// if mysqldump is on the system path you do not need to specify the full path
// simply use "--mysqldump --add-drop-table ..." in this case
$command = "--mysqldump --add-drop-table --host=$hostname --user=$username ";
if ($password)
$command.= "--password=". $password ." ";
$command.= $dbname;
//system($command);
system($command,$output);
echo "Uitvoer: ".$output;
$dump = ob_get_contents();
ob_end_clean();
// send dump file to the output
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($dbname . "_" . date("Y-m-d_H-i-s").".sql"));
flush();
echo $dump;
exit();
?>
ob_start();
$username = "xXXXXXXXXXXXXXXXX";
$password="XXXXXXXXXXXXXXXXX";
$dbname="XXXXXXXXXXXXXXXXXXXX";
$hostname = "localhost";
// if mysqldump is on the system path you do not need to specify the full path
// simply use "--mysqldump --add-drop-table ..." in this case
$command = "--mysqldump --add-drop-table --host=$hostname --user=$username ";
if ($password)
$command.= "--password=". $password ." ";
$command.= $dbname;
//system($command);
system($command,$output);
echo "Uitvoer: ".$output;
$dump = ob_get_contents();
ob_end_clean();
// send dump file to the output
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($dbname . "_" . date("Y-m-d_H-i-s").".sql"));
flush();
echo $dump;
exit();
?>
Eerst zeg je "Deze pagina werkt niet", en later is het opeens: "kan pagina niet laden".
Wees graag even specifiek met wat je ziet. Deel graag de juiste foutmelding.
Verder is er met dit script van jou niks mis, maar enkel met het commando. Ik vrees eigenlijk dat je tegen een time-out aanloopt, maar dat is tot nu toe gissen en gokken. Hoe groot is je database eigenlijk?
Misschien staat mysqldump op een andere plek, of is die enkel via een pad bereikbaar.
Bij mij is het dit pad: /usr/bin/mysqldump. Probeer dit eens?
En anders valt dit eens te proberen in een los script met bijv. de naam: mysqldump_pad.php:
Zelf voer ik mysqldump als tijd uit in de commandline via SSH. Als je dat niet hebt kan je dit ook proberen via een cronjob-taak op een tijdstip van over een paar minuten later. Voor grote databases wil je dit niet via de browser doen, waar PHP limieten kent.
(Die zijn te omzeilen, maar dat wil je liever niet, tenzij je weet hoe je een proces kan killen).
Gewijzigd op 29/11/2022 21:40:52 door - Ariën -
"Deze pagina werkt niet"
De database is super klein, enkele kb's groot
Toevoeging op 29/11/2022 22:06:00:
Het script dat je in de vorige post schreef werkt lokaal prima, maar niet op mijn domein, ik concludeer dat ik een verkeerde url gebruik ?
ik gebruik : mijndomein.com/scriptnaam/php
Toevoeging op 29/11/2022 22:07:31:
mijndomein.com/scriptnaam.php (fout in de vorige post )
En dan kan je via www.jouwdomeinhier.nl/jouwbestand.php je PHP-script uitvoeren.
Probeer het eerst eens met een simpel index.html-bestand met een simpele tekst. Als je die keurig ziet verschijnen, dan weet je dat je goed zit.
Als dat goed werkt ben ik benieuwd wat de uitvoer is van je 'whereis mysqldump' script.
Gewijzigd op 29/11/2022 22:11:45 door - Ariën -
Toevoeging op 29/11/2022 22:24:34:
het script staat in de www-map zoals ook index/php
Maar waar komt de foutmelding "Deze pagina werkt niet" vandaan?
Staat dit in een error-bestand vermeld ofzo? Ik kan me niet indenken dat een webhosting zo'n wazige foutmelding zou tonen.
Heb je mijn kleine script al geprobeerd? Ik ben benieuwd waar mysqldump precies staat.
Werkt die wel? Hier wel in ieder geval.
Gewijzigd op 29/11/2022 22:28:10 door - Ariën -
ik krijg deze melding : Deze pagina werkt niet
Dit lijkt me geen melding van je webhosting. Als een hosting met zulke errors strooit, dan was ik allang vertrokken. Liever een blanko scherm, of een foutmelding als ik dat expliciet wil.
Misschien dat .htaccess een hint geeft?
Ik krijg het vermoeden dat ze system() blokkeren. Maar die error blijft gewoon 'lomp'.
Kan je hier wat opmaken over disabled functions?
Gewijzigd op 29/11/2022 22:37:19 door - Ariën -
ik kijk het morgenvroeg verder na. Erg bedankt dat je me wilde helpen, ik houd je verder op de hoogte ...Dank
Top! Ben benieuwd!
plaats volgende regels als top in je php script
ini_set ('track_errors', 1);
ini_set ('log_errors', 1);
ini_set ('error_log', '/customers/0/0/0/domain/httpd.private/logs/php_error.log');
Natuurlijk het pad juist instellen :)
Dank je voor de nuttige tip, ik probeer het
[01-Dec-2022 06:21:32 UTC] PHP Fatal error: Uncaught Error: Call to undefined function system() in /customers/4/b/9/janr.be/httpd.www/php/system.php:5