MySQL database backup script (BASH script)
Het is raadzaam en handig om een (aantal) keer per week je databases veilig te stellen door er een backup van te maken, zo kun je altijd je database herstellen mocht deze beschadigd zijn geraakt, ik heb een goed script gevonden en deze aangepast/verbeterd.
In het volgende voorbeeld behandelen we het script via een CRON-job op een Synology NAS.
Je hebt nodig: WinSCP en evt. een USB stick in de NAS
1) Gebruik WinSCP om in te loggen en maak de folder: volume1/cron
2) Creeer een nieuw bestand en noem deze bijvoorbeeld: mysqlbackup.sh, kopieer en plak daarin het script, wijzig de instellingen voor je eigen situatie en en sla het bestand op.
3) Op de NAS ga naar: Control Panel > Task Sheduler > Create > User-defined script > voor in: “sh /volume1/cron/mysqlbackup.sh” en stel de tijden en dagen in.
Script
update Juli 2019, hieronder een nieuwe versie
- Controleren van aantal backups (oude bestanden) nu vereenvoudigd en werkt nu met dagen (ipv specifiek aantal)
- Download nu naar SQL bestand en archiveert nu met ZIP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#!/bin/bash KEEPBACKUPDAYS=5 BACKUPNAME=localhost DBSERVER=localhost DBPORT=3306 DBUSER=root DBPASS=wachtwoord BACKUPLOCATION=/volume1/backup MYSQLDUMPBIN=mysqldump DATE=`date +%Y%m%d%H%M%S` find ${BACKUPLOCATION}/${WEBSITENAME}-mysql-*.zip -mtime +${KEEPBACKUPDAYS} -delete ${MYSQLDUMPBIN} -h${DBSERVER} -P${DBPORT} -u${DBUSER} -p${DBPASS} --all-databases > ${BACKUPLOCATION}/${BACKUPNAME}-mysql-${DATE}.sql zip -j ${BACKUPLOCATION}/${BACKUPNAME}-mysql-${DATE}.zip ${BACKUPLOCATION}/${BACKUPNAME}-mysql-${DATE}.sql rm ${BACKUPLOCATION}/${BACKUPNAME}-mysql-${DATE}.sql |
Oude versie
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 42 43 44 45 46 47 48 49 50 51 52 |
#!/bin/bash ####################################################################### # # MySQL backup script door Sebastiaan Ebeltjes / DomoticX.nl # # Gebruik van dit script is op eigen risico! # # Dit script is met een CRON-job te starten op een Synology NAS # Sla het bestand op als .sh bestand en ga dan naar: # # Control Panel > Task Sheduler > Create > User-defined script # Voorbeeld: sh /volume1/cron/mysqlbackup.sh # # INFO: # # MySQLdump in DSM 4.2/5.0/5.1: # /usr/syno/mysql/bin/mysqldump # # Pad naar USB stick (aangesloten op een Synology NAS): # /volumeUSB[N]/usbshare # # Standaard MySQL poort: # 3306 # ####################################################################### # [INSTELLINGEN] KEEPBACKUPS=5 BACKUPNAME=localhost DBSERVER=localhost DBPORT=3306 DBUSER=root DBPASS=wachtwoord STORELOCATION=/volumeUSB1/usbshare MYSQLDUMP=/usr/syno/mysql/bin/mysqldump # [SCRIPT] BACKUPS=`find ${STORELOCATION} -name "${BACKUPNAME}-mysql-*.gz" | wc -l | sed 's/\ //g'` while [ $BACKUPS -ge $KEEPBACKUPS ] do ls -tr1 ${STORELOCATION}/${BACKUPNAME}-mysql-*.gz | head -n 1 | xargs rm -f BACKUPS=`expr $BACKUPS - 1` done DATE=`date +%Y%m%d%H%M%S` rm -f ${STORELOCATION}/.${BACKUPNAME}-mysql-${DATE}.gz_INPROGRESS ${MYSQLDUMP} -h${DBSERVER} -P${DBPORT} -u${DBUSER} -p${DBPASS} --all-databases | gzip -c -9 > ${STORELOCATION}/.${BACKUPNAME}-mysql-${DATE}.gz_INPROGRESS mv -f ${STORELOCATION}/.${BACKUPNAME}-mysql-${DATE}.gz_INPROGRESS ${STORELOCATION}/${BACKUPNAME}-mysql-${DATE}.gz ####################################################################### exit 0 |
Je kan de BASH ‘instellingen’ opnieuw toewijzen, je kan dan meerdere backups maken in 1 script, kopieer dan de instellingen en het script gedeelte binnen de ### opnieuw en plaats deze VOOR de ‘exit 0’ commando.
Update 2019
Met DSM 6.1.4 en MARIADB hoef je in principe geen pad meer te gebruiken:
MYSQLDUMP=mysqldump
Het is wel noodzakelijk om MariaDB5 of MariaDB10 te installeren: