MariaDB andmebaasi varundamine

Korralik varundus on vahe selle vahel, kas serveri rike on tüütus või katastroof. See juhend katab varukoopiate tegemise, taastamise ja automatiseerimise MariaDB-s.

Eeltingimused

  • Ligipääs serverile (SSH)
  • Andmebaasi kasutaja õigustega (nt root või eraldi varunduskasutaja)
  • Piisavalt vaba kettaruumi varukoopiate jaoks

1. Ühekordne varukoopia (mysqldump)

Ühe andmebaasi varundamine:

mysqldump -u root -p minu_andmebaas > minu_andmebaas.sql

Kohe pakitult (säästab ruumi):

mysqldump -u root -p minu_andmebaas | gzip > minu_andmebaas_$(date +%F).sql.gz

Kõik andmebaasid korraga:

mysqldump -u root -p --all-databases | gzip > koik_$(date +%F).sql.gz

Suured andmebaasid

Lisa --single-transaction --quick, et vältida tabelite lukustamist InnoDB puhul:

mysqldump -u root -p --single-transaction --quick minu_andmebaas | gzip > varu.sql.gz

2. Taastamine

Taastamine kirjutab andmed üle

Taastamine kustutab olemasolevad samanimelised tabelid. Tee enne kindlaks, et taastad õigesse andmebaasi.

Loo esmalt tühi andmebaas (kui seda veel pole):

CREATE DATABASE minu_andmebaas CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Taasta varukoopiast:

mysql -u root -p minu_andmebaas < minu_andmebaas.sql
gunzip < minu_andmebaas_2025-01-01.sql.gz | mysql -u root -p minu_andmebaas

3. Eraldi varunduskasutaja (turvalisem)

Ära kasuta automaatses skriptis root-i. Loo piiratud õigustega kasutaja:

CREATE USER 'backup'@'localhost' IDENTIFIED BY 'tugev-parool';
GRANT SELECT, SHOW VIEW, LOCK TABLES, EVENT, TRIGGER ON *.* TO 'backup'@'localhost';
FLUSH PRIVILEGES;

Paroolide vältimiseks käsureal kasuta faili ~/.my.cnf (õigused 600):

[mysqldump]
user=backup
password=tugev-parool

Nüüd saab varundada ilma parooli küsimata:

mysqldump minu_andmebaas | gzip > varu.sql.gz

4. Automaatne igapäevane varundus

Loo skript /usr/local/bin/db-backup.sh:

#!/bin/bash
set -euo pipefail

KAUST="/var/backups/mysql"
SAILIVUS=14   # mitu päeva varukoopiaid alles hoida

mkdir -p "$KAUST"
KUUPAEV=$(date +%F)

mysqldump --single-transaction --all-databases \
  | gzip > "$KAUST/koik_$KUUPAEV.sql.gz"

# Kustuta vanad varukoopiad
find "$KAUST" -name "*.sql.gz" -mtime +$SAILIVUS -delete

Tee käivitatavaks ja lisa cron-i (iga öö kell 03:00):

sudo chmod +x /usr/local/bin/db-backup.sh
sudo crontab -e

Lisa rida:

0 3 * * * /usr/local/bin/db-backup.sh

Hoia koopia ka väljaspool serverit

Varukoopia samas serveris ei aita, kui server ise hävineb. Kopeeri failid eraldi kohta (nt teine Hetzneri server, objektihoidla või rclone-iga pilve).

5. Kontrolli, et taastamine TÖÖTAB

Varukoopia, mida pole kunagi taastatud, on lihtsalt lootus. Testi seda regulaarselt:

# Taasta viimane varukoopia testandmebaasi
gunzip < /var/backups/mysql/koik_$(date +%F).sql.gz | mysql -u root -p test_taaste

Kontroll-loend

  • Käsitsi varukoopia õnnestub
  • Taastamine testandmebaasi õnnestub
  • Eraldi varunduskasutaja loodud
  • Cron-i automaatne varundus seadistatud
  • Koopia hoitakse ka väljaspool serverit
  • Taastamist on vähemalt korra testitud