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