Bevezetés
Ebben az írásban végigvezetjük, hogyan készítsünk biztonsági másolatot több MySQL- vagy MariaDB-adatbázisról, amelyek ugyanazon a gépen vannak, egyéni bash-szkript segítségével, és hogyan állíthatunk be egy cron-feladatot.
Adatbázis biztonsági mentés(ek)
Tételezzük fel, hogy három MySQL-adatbázisunk van a Vultr -példányunkon db-vultr-site , db-vultr-blog , db-vultr-app néven (Ne aggódjon az adatbázisok létrehozása miatt, lecserélheti a nevüket a tiédnél, ha ezeket az alábbi 2. lépésben lévő szkript használja) .
Jelentkezzen be MySQL vagy MariaDB adatbázisába, és futtassa az alábbi lekérdezést, hogy létrehozzon egy adatbázis-felhasználót db_user_backupsa biztonsági mentések kezelésére
GRANT LOCK TABLES, SELECT, SHOW VIEW, REPLICATION CLIENT ON *.* TO 'db_user_backups'@'%' IDENTIFIED BY '{COMPLEX-PASSWORD}';
Futtassa az alábbiakat is, hogy megbizonyosodjon arról, hogy a MySQL a tárolt eljárások megfelelő visszaállítására van konfigurálva
SET GLOBAL log_bin_trust_function_creators = 1;
Állítsa be a szükséges könyvtárstruktúrát és fájlokat
# create backup directory with environment and log file
sudo mkdir /backups && cd /backups
sudo touch .env db-backup.sh db-backup.log
sudo chmod -R 775 /backups
sudo chmod -R g+s /backups
sudo chmod +x db-backup.sh
# add mysql backup user credentials into environment file
echo "export MYSQL_USER=db_user_backups" > /backups/.env
echo "export MYSQL_PASS={COMPLEX-PASSWORD}" >> /backups/.env
Nyissa meg a db-backup.sh fájlt, nano /backups/db-backup.shés illessze be az alábbi kódot, majd mentse el a fájlt (Ctrl+X -> Y -> nyomja meg az Entert) .
DB_NAMES=( 'db-vultr-site' 'db-vultr-blog' 'db-vultr-app' ) #replace with your own database name(s)
BKUP_NAMES=()
BKUP_DIR="/backups"
# get total number of directories
total_dbs=${#DB_NAMES[@]}
# create backup file names
for (( i=0; i<${total_dbs}; i++ )); do
BKUP_NAMES[$i]="`date +%Y%m%d%H%M`-backup-$${DB_NAMES[$i]}.sql.gz"
done
# get backup users credentials
source $BKUP_DIR/.env
# create backups
for (( i=0; i<${total_dbs}; i++ )); do
# NOTE: --routines flag makes sure stored procedures are also backed up
mysqldump --routines -u ${MYSQL_USER} -p${MYSQL_PASS} | gzip > ${BKUP_DIR}/${BKUP_NAMES[$i]}
done
A fenti kód a biztonsági másolatot készíteni kívánt adatbázis(ok) nevével rendelkező tömbön fut keresztül.
Cronjob beállítása
Állítson be egy cronjob-ot, amely minden éjfélkor fut, amely lefuttatja a biztonsági mentési szkriptet, és elmenti az eredményt/kimenetet a biztonsági mentési naplóba.
Nyissa meg a crontab-ot
crontab -e
Adja hozzá az alábbi bejegyzést a crontabhoz
0 0 * * * /usr/bin/env bash /backups/db-backup.sh &>> /backups/db-backup.log
Megjegyzés: A tesztelés során beállíthatja, hogy a cronjob 1 percenként fusson az alábbiak szerint
* * * * * /usr/bin/env bash /backups/db-backup.sh &>> /backups/db-backup.log
-VAGY- 5 percenként (cserélje ki az 5-öt a kívánt percszámra)
*/5 * * * * /usr/bin/env bash /backups/db-backup.sh &>> /backups/db-backup.log
Mi a következő lépés
Valószínűleg nem szeretné, hogy a biztonsági másolat(oka)t ugyanazon a kiszolgálón (kiszolgálókon) futtassák az adatbázis(oka)t, hanem egy másik földrajzi helyen lévő kiszolgálón. Ennek számos módja van, az SFTP használatától kezdve a számtalan felhőalapú tárolási szolgáltató által biztosított egyéni eszközökig. Az egyik jó alternatíva az Rsync, amint azt itt leírtuk - vultr.com/docs/setup-file-mirroring-using-rsync-in-debian-ubuntu
Írta: Lami Adabonyan