Hoe maak je een mysql dump?
Naast Linux op je desktop heb je mogelijk ook nog een server draaien. Dat kan bij je thuis zijn of je maakt gebruik van een webserver bij een provider.
Mocht je bij een provider een zgn. shared website hebben dan is het meestal niet mogelijk om middels een ssh verbinding binnen te komen. Met behulp van bijv. FTP is het niet lastig om bestanden heen en weer te versturen tussen je desktop en server. Maar hoe pak je dat aan als je een backup of restore wilt uitvoeren van een op de webserver draaiende mysql database?
Hier behandel ik dan drie mogelijkheden die ik zelf heb geprobeerd. Je maakt óf gebruik van phpmyadmin, óf van je terminal of middels een script in de grafische interface (Plesk, Directadmin etc.) van je provider.
Let op: Mocht je dit willen proberen dan doe je dat voor eigen risico. En voor de goede orde, de terminal en crontab is bij mij de absolute favoriet.
PHPMYADMIN
Dit programma kan je óf zelf installeren óf je maakt gebruik van je providers DB Manager wat ook vaak een versie van phpmyadmin is. Als je database is geselecteerd kies je voor het export tabblad, kiest vervolgens voor selecteren alle tabellen en maakt in de regel gebruik van de default ingestelde waarden. Maar als je een grote database hebt draaien is het best nog lastig om die backup fatsoenlijk binnen te krijgen. Bijvoorbeeld omdat de te exporteren omvang is beperkt door de provider. Het is dan ook veel handiger om het via je terminal te doen. Daarvoor heb je wel medewerking nodig van de provider. Die moeten in hun firewall jouw IP adres vrijgeven voor mysql diensten. Je provider heeft dan waarschijnlijk wel een eis dat je zelf met een zgn. fixed IP adres moet werken. Als dat allemaal gelukt is ga je als volgt te werk:
MySQL dump maken vanuit je terminal
Open een terminal en installeer de mysql client. Onder Ubuntu 11.04 gaat dat met:
sudo apt-get install mysql-client-5.1
Vervolgens voer je in je terminal een commando in met de volgende syntax:
mysqldump -h DOMEINNAAM -u DATABASE_USERNAAM -pWACHTWOORD DATABASENAAM > GEWENSTE UITVOERNAAM.sql
De groot afgedrukte aanwijzingen pas je dus aan met je eigen gegevens. En dan gewoon in kleine letters. Let op dat de optie -p meteen wordt gevolgd door het database wachtwoord. Je zal bij het uitvoeren van deze opdracht zien dat je heel snel je database krijgt aangeleverd (in je /home/user map)
Als je dit nu wilt automatiseren dan kan je op je desktop (of op een Linux based NAS of home server) een crontab maken. Open je terminal en voer in:
crontab -e
Je krijgt dan mogelijk (bij de 1e keer) een vraag welke editor je wil gebruiken. Kies daar je eigen voorkeur (nano) en voeg helemaal onderaan het commando in zoals hierboven stond vermeld maar dan met toevoeging van de Unix tijdnotatie en het pad naar de opdracht.
Ik wil bijvoorbeeld elke nacht om 03:00 uur een dump maken en dan kies voor het commando:
0 3 * * * /usr/bin/mysqldump -h DOMEIN -u DATABASE USER -pWACHTWOORD DATABASENAAM > /home/USERNAAM/GEWENSTE UITVOER NAAM`date +'%Y-%m-%d'`.sql
Let op: De groot afgedrukte namen aanpassen aan je eigen gegevens, inclusief USERNAAM en zorg dat de ` tekens staan voor en achter dit gedeelte`date +%Y%m%d` gevolgd door de .sql extensie. De gewenste uitvoernaam wordt dan voorzien van een datumnotatie wat archivering een stuk makkelijk maakt.
Als je met Nano de regel goed hebt geplaatst save je dat bestand en verlaat de editor . Dan wordt op dat moment de opdracht klaar gezet voor uitvoer. Met het terminal commando crontab -l kan je dat overigens controleren.
MYSQL DUMP vanuit Plesk ..
Heb je bij je provider geen MYSQL toegang verkregen dan kan je de crontab (zonder de uitvoer en exportpaden) inbrengen in de in Plesk/Directadmin etc. aangeboden functieruimte. Gebruik daarvoor de documentatie van je provider want je wilt er wel voor zorgen dat de uitvoer wordt weggeschreven naar een veilige zone op je webserver óf dat de uitvoer wordt gemaild.
In een volgend artikel laat ik dan zien hoe je een database backup weer terug kunt plaatsen met behulp van een handig script genaamd bigdump.php.
(Met dank aan Andries Filmer)