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
rootvõ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