Laatst bijgewerkt op 6 sep 2023 13:18:29.
Categorie:
Cloud servers
backup Cron Linux MariaDB MySQL
Dit artikel legt uit hoe u op eenvoudige wijze een automatische backup kan maken van uw MySQL of MariaDB databanken op uw Kinamo virtuele server (VPS) of Kinamo Cloud Server.
Dit kan aan de hand van een eenvoudig shell script. Het script zal de inhoud van de MySQL / MariaDB databanken wegschrijven via een mysqldump naar een chronologisch geordende folder.
Kinamo neemt in veel gevallen - afhankelijk van het door u gekozen type hosting en afgesloten SLA contract - een backup van uw gegevens, zowel bestanden als databanken.
Het voordeel van een eigen database backup via mysqldump is de zekerheid tot behoud van frequentere data intervallen in geval van een crash en de mogelijkheid om sneller een restore uit te voeren van een volledige databank, zonder beroep te moeten doen op Kinamo support voor een restore van het bestandssysteem.
Een bijkomend voordeel is de eenvoud om een InnoDB database te restoren, wat vaak een intensieve opdracht kan zijn. Werken met een MySQL of MariaDB dump maakt een restore aanzienlijk eenvoudiger.
Kinamo stelt onderstaand script ter beschikking. Wij raden u aan het om het script te plaatsen in /usr/sbin/local.
Om het niet complexer te maken dan het hoeft te zijn hebben wij het database backup script de naam kinamo_mysqlbackup.sh gegeven.
#!/bin/bash # Basic configuration: datestamp e.g. YYYYMMDD DATE=$(date +"%Y%m%d") # Location of your backups (create the directory first!) BACKUP_DIR="/backup/mysql" # MySQL login details MYSQL_USER="root" MYSQL_PASSWORD="YOURSECUREPASSWORD" # MySQL executable locations (no need to change this) MYSQL=/usr/bin/mysql MYSQLDUMP=/usr/bin/mysqldump # MySQL databases you wish to skip SKIPDATABASES="Database|information_schema|performance_schema|mysql" # Number of days to keep the directories (older than X days will be removed) RETENTION=14 # ---- DO NOT CHANGE BELOW THIS LINE ------------------------------------------ # # Create a new directory into backup directory location for this date mkdir -p $BACKUP_DIR/$DATE # Retrieve a list of all databases databases=`$MYSQL -u$MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "($SKIPDATABASES)"` # Dumb the databases in seperate names and gzip the .sql file for db in $databases; do echo $db $MYSQLDUMP --force --opt --user=$MYSQL_USER -p$MYSQL_PASSWORD --skip-lock-tables --events --databases $db | gzip > "$BACKUP_DIR/$DATE/$db.sql.gz" done # Remove files older than X days find $BACKUP_DIR/* -mtime +$RETENTION -delete
Kopieer de volledige inhoud van de bovenstaande blok naar een script genaamd kinamo_mysqlbackup.sh en plaats dit in de map /usr/local/sbin/.
cd /usr/local/sbin/ vi kinamo_mysqlbackup.sh
Wijzig uiteraard de variabelen naar uw believen (bvb. uw wachtwoord) en zorg ervoor dat de map /backup/mysql bestaat.
U kan deze map eenvoudig aanmaken via volgend commando:
mkdir /backup/mysql
Standaard zal het script niet werken. De server moet dit immers kunnen uitvoeren, geef daarom het script "execute" rechten met volgend commando:
chmod 755 kinamo_mysqlbackup.sh
Een volgende - en aan te raden - stap is het aanmaken van een cronjob zodat het script automatisch wordt uitgevoerd op gewenste tijdstippen.
U kan bijvoorbeeld een cronjob instellen zodat het script elke dag om 1u 's nachts een backup maakt van uw databanken:
vi /etc/crontab 0 1 * * * root /usr/local/sbin/kinamo_mysqlbackup.sh
Bewaar de cronjob en herstart de cron service (niet noodzakelijk).
Afhankelijk van uw Linux distributie gebeurt dat met één van volgende commando's:
service cron restart (CentOS) service crond restart (Debian)
Elke nacht zal dit mysql backup script een .sql bestand plaatsen in de map /backup/mysql/YYYYMMDD/<uwdatabank dump>.
Om ruimte te besparen worden deze bestanden ook automatisch gezipped via gzip.
Werden niet al uw vragen beantwoord?
Geen nood, via een support aanvraag helpen wij u graag verder!