In de backup van de website wil ik meenemen:
- de directory’s
- de MySQL database
Het idee is om automatisch periodiek (dagelijks?) alle directory’s met FTP op te halen en deze ongecomprimeerd op de NAS (NSLU2) te zetten.
Dit heeft als voordeel dat de rsync snapshot backup, alleen de nieuwe files zal back-uppen en niet iedere keer de volledige tar.gz file.
Met de goede parameters is met het commando wget mogelijk om via FTP alleen de nieuwe files op te halen. Dit is ook mogelijk met NcFTP, maar dat werkt niet altijd even goed bij elke provider/situatie. Deze methode is universeel.
Een ander voordeel t.o.v. een back-up via een Windows machine, is dat de back-up case-sensitief opgeslagen wordt, zodat bij het terugzetten van de back-up geen problemen ontstaan.
FTP backup van de website met wget
Met het wget commando is het mogelijk om via FTP alleen de gewijzigde files op te halen. Dan kan met het volgende commando
$ wget ftp://<username>:<paswoord>@your-website.nl/ --non-verbose --recursive --timestamping --level=inf --no-host-directories --retr-symlinks
of korter met –mirror
$ wget ftp://<username>:<paswoord>@your-website.nl/ --non-verbose --mirror --no-host-directories --retr-symlinks
wget opties:
- –timestamping don’t re-retrieve files unless newer than local.
- –recursive recursive download.
- –non-verbose turn off verboseness, without being quiet.
- –level=NUMBER maximum recursion depth (inf or 0 for infinite).
- –no-host-directories don’t create host directories.
- –mirror opties: –recursive –timestamping –level=inf
Voor meer informatie over wget zie: www.gnu.org/software/wget/manual/wget.html
Backup van de MySQL database
Installeren MySQL tools
De Ubuntu Server bevat met LAMP alle benodigde MySQL tooling.
Voor de Linksys NSLU2:
$ ipkg install mysql-client
Remote database dump
Met het commando **mysqldump **kan op afstand de database gelezen worden en wordt er een sql script aangemaakt. Hiervoor moet wel de MySQL database opengezet worden voor remote access. Default staat deze op local access only. Zorg wel voor een sterke usernaam/paswoord combinatie. Ook krijgt deze user alleen rechten voor SELECT en LOCK. Als er dan toch iemand ongewild toegang krijgt, dan is het nog steeds niet mogelijk om iets weg te gooien. Zorg dat de database user die door de applicatie(s) gebruikt wordt, geen remote toegang heeft.
**# mysqldump ** –add-locks –add-drop-table** –quote-names –host=hostnaam –user=db_dump –password=geheim database naam | gzip -9 > /opt/WebsiteBackup/database_backup.sql.gz**
Terugzetten van de MySQL database
Bij het terugzetten van een backup is de MySQL versie meestal wel hetzelfde. Als de backup op een nieuwe server gezet wordt, bijvoorbeeld bij het wisselen van een hostingprovider, dan hoeft dat niet altijd probleemloos te gaan.
Het meest MySQL versieonafhankelijk is het exporteren van de database inhoud binnen de applicatie zelf. Bijvoorbeeld in WordPress, maar niet alle applicaties hebben die mogelijkheid.
OpenGoo heeft het bijvoorbeeld niet. Deze levert in de backup de directory inhoud en een sql dump.
MySQLDump en phpMyAdmin
Het mysqldump commando kan gebruikt worden om met scripts een periodieke backup te doen. De backup kan ook weer teruggezet worden met phpMyAdmin.
Zie ook: www.webcheatsheet.com/SQL/mysql_backup_restore.php
Het backup script voor de complete website inclusief de MySQL
$ vi /usr/local/sbin
SOURCE_IP_NR=your-website.nl
RETVAL=0
echo Trying to ping to the other rsync side > /tmp/website_backup.log 2>&1
ping -c 1 $SOURCE_IP_NR >> /tmp/website_backup.log 2>&1
if [ $? -ne 0 ]
then
echo "ERROR: could not ping the other side $SOURCE_IP_NR" >> /tmp/website_backup.log 2>&1
RETVAL=1
fi
if [ $RETVAL -eq 0 ]
then
cd /opt/WebsiteBackup/your-website
wget ftp://ftp_user:geheim@your-website.nl/ --non-verbose --mirror --no-host-directories --retr-symlinks > /tmp/w
if [ $? -ne 0 ]; then
echo ERROR: wget command failed, tried to get the website via FTP but wget returned error >> /tmp/website_backup.log 2>&
RETVAL=1
fi
fi
if [ $RETVAL -eq 0 ]
then
echo mysqldump of Arjans Logboek >> /tmp/website_backup.log
mysqldump --add-locks --add-drop-table --quote-names --host=$SOURCE_IP_NR --user=user_sqldump --password=geheim
if [ $? -ne 0 ]; then
echo ERROR: mysqldump of Arjans Logboek failed >> /tmp/website_backup.log 2>&1
RETVAL=1
fi
echo mysqldump of Arjans Wiki >> /tmp/website_backup.log
mysqldump --add-locks --add-drop-table --quote-names --host=$SOURCE_IP_NR --user=user_sqldump --password=geheim
if [ $? -ne 0 ]; then
echo ERROR: mysqldump of Arjans Wiki failed >> /tmp/website_backup.log
RETVAL=1
fi
fi
if [ $RETVAL -ne 0 ]; then
echo "ERROR detected while running website_backup, send a mail to report this!" >> /tmp/website_backup.log
/usr/local/sbin/mail "De website backup van Your-website.nl is niet goed gegaan" /tmp/website_backup.log
else
echo "No ERROR detected while running website_backup" >> /tmp/website_backup.log
/usr/local/sbin/mail "De website backup van Your-website.nl is goed gegaan"
# /usr/local/sbin/mail "De website backup van Your-website.nl is goed gegaan, inclusief logfile" /tmp/website_backup.log
fi