Last Updated on 1 juni 2021 by Syds
Je Pi kan stuk gaan, of je formatteert per ongeluk je SD-kaartje, de bliksem slaat in … kortom een ongelukje zit in een klein hoekje. Het is dan ook belangrijk om van je databases en instellingen een backup te maken op een plek bij voorkeur buitenhuis. Ik heb ervoor gekozen om de backup’s in Google Drive te zetten.
Ik maak een backup van de volgende databases:
- Domoticz
- WordPress (deze blog)
- Energy (Database met gegevens van mijn energie dataloggers)
Benodigheden
- geen
Reeds up-and-running
- Google account
Hieronder het stappenplan om dagelijks een backup te maken van je belangrijke databases.
Stap 1. Software installeren die de connectie verzorgt tussen je Pi en Google Drive
- Ik gebruik hiervoor rclone, deze software verzorgt de connectie tussen je Raspberry PI en Google Drive. Rclone installeer je als volgt:
curl https://rclone.org/install.sh | sudo bash
Stap 2. Google Drive API credentials aanmaken voor rclone
- Login met je Google account op https://console.cloud.google.com/
- Klik links bovenin op het Navigatiemenu, open APIs & Services, en daarna Library
- Zoek naar Google Drive API, en enable die
- Creëer Google Drive API credentials voor rclone
- Klik binnen APIs & Services op OAuth consent screen, kies voor External en klik op CREATE
- Vul bij App name “rclone” in, en bij User support email en Developer contact information je mailadres, klik daarna op SAVE AND CONTINUE
- Klik op ‘ADD OR REMOVE SCOPES, filter op API: Google Drive API en selecteer Google Drive API “…/auth/drive”, klik onderaan op UPDATE, daarna op SAVE AND CONTINUE
- Klik binnen APIs & Services op Credentials, en kies voor +CREATE CREDENTIALS, en daarna voor “Oauth client ID”
- Kies voor Application type: Desktop app, geef de naam “rclone”, en klik op CREATE
- Een client ID & Client Secret wordt nu aangemaakt, deze zijn in de volgende stap nodig
Stap 3. rclone configureren
- start het configureren met
# rclone config
- vul achter een volgens de volgende waarden in
- n om een nieuwe remote aan te maken
- name: gdrive
pi@raspberrypi:~ $ rclone config
Current remotes:
Name Type
==== ====
drive drive
e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> n
name> gdrive
- kies uit de lijst met storage providers het nummer corresponderend met Google Drive \ “drive”, in mijn voorbeeld nummer 15
15 / Google Drive
\ "drive"
- Google application client id: neem over uit vorige stap
- client secret: neem over uit vorige stap
- scope: 1 /Full access all files, excluding Application Data Folder: \”drive”
- root_folder_id: leeg laten
- service_account_file: leeg laten
- edit advanced config: N
- remote config use auto config: Y
- open de gegenereerde url in je browser en maak het authenticatie proces af, ga terug naar je terminal sessie
- team drive: N
- Y om de configuratie te bevestigen
- q om de configuratie te beëindigen
- test of je toegang hebt tot google drive met
# rclone ls gdrive:/
Stap 4. Backup.sh
- Plaats onderstaand script in /backup.sh
pi@raspberrypi:/ $ cat /backup.sh
#!/bin/bash
##this script will backup mysql and upload it to google drive
##directory name
dirname=$1;
##database name
database=$2;
##database username
dbuser=$3;
##database password
dbpass=$4;
## rclone remote name
rcloneRemoteName=$5;
##google drive folder name
gdrivefoldername=$6;
##condition to check folder exist or not
if [ ! -d "$dirname" ]
then
##create directory
mkdir ./$dirname
fi
##dump mysql database on server
mysqldump -u $dbuser -p$dbpass $database | gzip>"./$dirname/$database($(date +\%Y-\%m-\%d-\%H)).sql.gz"
##wait for 10 seconds
sleep 10
##upload it to google drive
rclone copy "./$dirname/$database($(date +\%Y-\%m-\%d-\%H)).sql.gz" $rcloneRemoteName:$gdrivefoldername
## backup wp-content
if [ "$database" = "wordpress" ]
then
## zip entire wp-content dir
gzip -cr /var/www/html/sydspost.nl/wp-content/uploads > "./$dirname/wp-contect($(date +\%Y-\%m-\%d-\%H)).gz"
##wait for 10 seconds
sleep 10
##upload it to google drive
rclone copy "./$dirname/wp-contect($(date +\%Y-\%m-\%d-\%H)).gz" $rcloneRemoteName:$gdrivefoldername
##
fi
##delete 3 days older file on server to save disk space(this command is optional)
find ./$dirname -mtime +3 -type f -delete
exit 0;
Stap 5. Maak crontab regels aan
crontab -e
- plaats de volgende regel(s) in de crontab van root of een andere user met voldoende rechten
0 23 * * * /backup.sh mysqlbackup energy root <wachtwoord> gdrive BackupFolder
15 23 * * * /backup.sh mysqlbackup wordpress root <wachtwoord> gdrive BackupFolder
30 23 * * * /home/pi/domoticz/backups/backup.sh gdrive BackupFolder
Toelichting:
Om 23:00 uur wordt het script /backup.sh gestart met de argumenten:
- mysqlbackup: directory naam
- energy: database naam
- root: mariadb user met rechten op database
- <wachtwoord>: wachtwoord van de root user
- gdrive: rclone configuratie van Google Drive
- BackupFolder: Foldernaam binnen Google Drive waar de backup files terecht komen
Om 23:30 uur wordt er een backup van de Domoticz database gemaakt met de argumenten:
- gdrive: rclone configuratie van Google Drive
- BackupFolder: Foldernaam binnen Google Drive waar de backup files terecht komen
Het eindresultaat: