Tags voor dit FAQ item:
backup Cron Linux MariaDB MySQL

Help ons door dit artikel te beoordelen!

Score van 4 sterren, gebaseerd op 4 beoordelingen

MySQL - automatische backup van een database

Laatste bijgewerkt: 14/06/2018

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.