MySQL database back-uppen met PHP -> Cronjob
Ik ben op zoek naar een PHP script wat (in de toekomst) een grote database kan backuppen. Ik ben al ruim twee uur aan het zoeken, maar ik kan alleen maar scripts vinden die óf niet werken, óf alleen maar kleine databases kunnen backuppen.
Ik heb in het verleden een prachtig script gehad wat een speciale methode gebruikte om time-outs te voorkomen, maar ik kan het niet meer terugvinden.
Uiteindelijk is het de bedoeling dat ik het PHP bestand kan aanroepen met een cronjob. Het resultaten laten mailen is niet per se nodig, maar zou wel fijn zijn.
Wie kan mij helpen?
Mvg,
Tom
http://www.ozerov.de/bigdump/
Mocht je DirectAdmin gebruiken, dan kan je ook de API daarvan aanroepen via een cronjob?
Gewijzigd op 07/10/2011 16:30:28 door - Ariën -
- Aar - op 07/10/2011 16:29:55:
Mocht je DirectAdmin gebruiken, dan kan je ook de API daarvan aanroepen via een cronjob?
Ik gebruik DirectAdmin.. Hoe gaat dat dan precies in zijn werking?
http://www.jouwdomein.nl:2222/CMD_API_SITE_BACKUP?domain=JOUWDOMEIN.NL&action=backup&select0=database
Directadmin heeft een leuke class waarmee je zulke URL's mooi kan aanroepen, en vervolgens kan zien of het gelukt is.
Ik hoop dat je er uit komt, anders zal ik eens kijken of ik een voorbeeld kan maken, als het echt niet lukt.
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
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
<?php
include 'httpsocket.php';
$sock = new HTTPSocket;
$sock->connect('JE DOMEIN',2222);
$sock->set_login("INLOGNAAM","INLOGPASS");
$sock->set_method('POST');
$sock->query('/CMD_API_CRON_JOBS',
array(
'action' => 'create',
'domain' => 'JE DOMEIN',
'minute' => 'HOEVEEL MINUTEN',
'hour' => 'WELK UUR',
'dayofmonth' => 'WELKE DAG VD MAAND',
'month' => 'WELKE MAAND IN CIJFERS',
'dayofweek' => 'WELKE DAG VD WEEK',
'command' => 'VOLLEDIG PATH NAAR BESTAND',
));
$result = $sock->fetch_body();
echo $result;
?>
include 'httpsocket.php';
$sock = new HTTPSocket;
$sock->connect('JE DOMEIN',2222);
$sock->set_login("INLOGNAAM","INLOGPASS");
$sock->set_method('POST');
$sock->query('/CMD_API_CRON_JOBS',
array(
'action' => 'create',
'domain' => 'JE DOMEIN',
'minute' => 'HOEVEEL MINUTEN',
'hour' => 'WELK UUR',
'dayofmonth' => 'WELKE DAG VD MAAND',
'month' => 'WELKE MAAND IN CIJFERS',
'dayofweek' => 'WELKE DAG VD WEEK',
'command' => 'VOLLEDIG PATH NAAR BESTAND',
));
$result = $sock->fetch_body();
echo $result;
?>
Gewijzigd op 10/10/2011 11:03:35 door Jordi Kroon
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
/* Yaddah */
$sock->query('/CMD_API_SITE_BACKUP',
array(
'action' => 'backup',
'select0' => 'database'
));
?>
/* Yaddah */
$sock->query('/CMD_API_SITE_BACKUP',
array(
'action' => 'backup',
'select0' => 'database'
));
?>
En dit zou je dan als cronjob kunnen draaien. Als je de class includeert. Gebruik dan wel een volledig pad in je include(), zoals /home/JOUWUSERNAME/domains/JOUWDOMEIN.NL/private_html/da_class.php
Gewijzigd op 10/10/2011 11:16:16 door - Ariën -
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
En die aanroepen met cron, right?
Correct, gebruik wel het volledige pad naar de httpsocket.php, en was je waardes uiteraard aan ;-).
Het pad naar httpsocket.php klopt, want dat was eerst fout (foutmelding), nu krijg ik dus gewoon helemaal niets te zien.
De backup is gelukt als de Ticket Notifier rechtsbovenaan DA een nieuwe ticket meldt.
- Heb je wel je gegevens (user/pass/domain) goed ingesteld?
- Gebruik eens $sock->set_method('GET'); i.p.v. de genoemde POST.
Zet anders even je error-reporting aan. en display_errors op 1
Gewijzigd op 11/10/2011 11:18:27 door - Ariën -
- GET werkt niet zo min als POST
error-reporting heb ik toch aanstaan? Althans dat denk ik, omdat ik wel een error kreeg toen mijn pad naar httpsocket.php niet klopte..
En een var_dump($result)?
Vreemd, en draait DA op http of https? EN wel op poort 2222?
Voor zover ik kan zien draait DA op http, en ja: op poort 2222.
Want met een cron zullen includes niet direct werken, tenzij je een volledig pad gebruikt.
Verder zou het kunnen dat je ook je domain die je wilt backuppen aan moet geven als parameter in de array, dus:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
$sock->query('/CMD_API_SITE_BACKUP',
array(
'action' => 'backup',
'domain' => 'JOUWDOMEIN.NL',
'select0' => 'database'
));
array(
'action' => 'backup',
'domain' => 'JOUWDOMEIN.NL',
'select0' => 'database'
));
Werkt dat wel?
Gewijzigd op 11/10/2011 11:56:32 door - Ariën -
Bedankt voor de hulp tot nu toe, trouwens! Ik ben er erg blij mee. Alleen jammer dat het nog niet wil lukken tot nu toe.
geformuleerd.
Ik zag er zelf eens mee spelen vandaag.
Maar gebeurt er wel wat als je de URL handmatig aanroept?
http://www.jouwdomein.nl:2222/CMD_API_SITE_BACKUP?domain=jouwdomein.nl&action=backup&select0=database
Dit is echt bizar. Deze API is niet echt lekker Ik zag er zelf eens mee spelen vandaag.
Maar gebeurt er wel wat als je de URL handmatig aanroept?
http://www.jouwdomein.nl:2222/CMD_API_SITE_BACKUP?domain=jouwdomein.nl&action=backup&select0=database
Quote:
error=0&text=Backup creation added to queue&details=You will receive a message when it's complete.
Toevoeging op 11/10/2011 12:13:23:
Kan het niet zo?