Intelligente Lösungen
in neuer Dimension

Mysql-Datenbanken sichern mit RESTIC

Seit ein paar Tagen nutze ich RESTIC experimentell für Sicherungen von Dateisystemen. Jetzt würde ich gerne zusätzlich ein paar Mysql-Datenbanken sichern.

Grundkonzept

Ich nutze Mysql-Datenbanken für diverse Applikationen, beispielsweise:

  • Nextcloud
  • Zammad
  • Roundcube
  • etc

Die Datenbanken möchte ich gerne sichern in RESTIC. Erstmal manuell, später gerne automatisiert.

Manuelles Sichern am Beispiel Nextcloud

Für die Sicherungen brauche ich:

  • Eine Möglichkeit, das Tool “mysqldump” gegen die Nextcloud-Datenbank auszuführen
  • Eine Möglichkeit, auf mein RESTIC-Sicherungsverzeichnis zuzugreifen via Skript

Nextcloud-Server

Konfigurationsdatei “mysqldump.conf”

1
2
3
[mysqldump]
  user=mysql-admin
  password=9a7d8a90f4f377acd9a7c2f5ceb9e86d176

Manueller Aufruf von “mysqldump”

1
2
3
4
5
6
7
8
9
10
11
root@nextcloud:~# mysqldump --defaults-file=/etc/mysqldump.conf --all-databases --extended-insert=FALSE|head -10
-- MySQL dump 10.32  Distrib 10.5.12-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost    Database: 
-- ------------------------------------------------------
-- Server version 10.5.12-MariaDB-0ubuntu0.22.04.1

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

RESTIC-Server

Kennwort-Datei “restic-password.conf”

1
uli-kw

Testsicherung

Hier ein Testlauf der Sicherung einer Kommandoausgabe:

1
2
3
4
5
6
7
8
9
10
11
12
$ DP_USER=uli
$ DP_DRIVE=uli-0195
$ echo "uli-war-da" | restic backup --repo "/media/${DP_USER}/${DP_DRIVE}/restic-${DP_USER}" --stdin --stdin-filename nextcloud.sql --password-file /etc/restic-password.conf
repository 8e8d2ec7 opened successfully, password is correct
using parent snapshot 2aeea51a

Files:           0 new,     1 changed,     0 unmodified
Dirs:            0 new,     0 changed,     0 unmodified
Added to the repo: 322 B

processed 1 files, 11 B in 0:01
snapshot 2d079697 saved

Sicherung wieder löschen:

1
2
3
$ restic forget --repo "/media/${DP_USER}/${DP_DRIVE}/restic-${DP_USER}" 2d079697
repository 8e8d2ec7 opened successfully, password is correct
[0:00] 100.00%  1 / 1 files deleted

Manuelle Sicherung

Erste Sicherung:

1
2
3
4
5
6
7
8
9
10
11
12
13
my-desktop:~$ DP_USER=uli
my-desktop:~$ DP_DRIVE=uli-0195
my-desktop:~$ ssh nextcloud-server mysqldump --defaults-file=/etc/mysqldump.conf --all-databases --extended-insert=FALSE \
> |ssh restic-server restic backup --repo "/media/${DP_USER}/${DP_DRIVE}/restic-${DP_USER}" --stdin --stdin-filename nextcloud.sql --password-file /etc/restic-password.conf
repository 8e8d2ec7 opened successfully, password is correct
using parent snapshot ed2b23d2

Files:           1 new,     0 changed,     0 unmodified
Dirs:            0 new,     0 changed,     0 unmodified
Added to the repo: 190.901 MiB

processed 1 files, 190.895 MiB in 0:07
snapshot 733c9cee saved

Folgesicherung:

1
2
3
4
5
6
7
8
9
10
11
12
13
my-desktop:~$ DP_USER=uli
my-desktop:~$ DP_DRIVE=uli-0195
my-desktop:~$ ssh nextcloud-server mysqldump --defaults-file=/etc/mysqldump.conf --all-databases --extended-insert=FALSE \
> |ssh restic-server restic backup --repo "/media/${DP_USER}/${DP_DRIVE}/restic-${DP_USER}" --stdin --stdin-filename nextcloud.sql --password-file /etc/restic-password.conf
repository 8e8d2ec7 opened successfully, password is correct
using parent snapshot 2aeea51a

Files:           0 new,     1 changed,     0 unmodified
Dirs:            0 new,     0 changed,     0 unmodified
Added to the repo: 31.920 MiB

processed 1 files, 190.895 MiB in 0:02
snapshot 9910f899 saved

Links

Änderungen

  • 2021-11-17 – DP_HOSTNAME weg
  • 2021-11-13 – Erste Version