Přehled
Tento článek popisuje skript zálohování databáze MySQL, který vám umožňuje implementovat automatizované denní (nebo častější) komprimované zálohování vašich databází MySQL s datovým razítkem. Výhodou použití tohoto skriptu je, že zálohuje všechny databáze, ukládá je do adresáře (/data/db-backups) a zaznamenává svou činnost do souboru v (/logs/db-backup) pro audit a kontrolu v případě jakýchkoli problémů.
V ideálním případě musí být skript automatizován pomocí CRON, aby alespoň každý den probíhala úplná záloha každé databáze. To vám umožní mít určitý stupeň obnovitelnosti v případě chyb ve vaší databázi nebo pomůže při snadné migraci vaší databáze (databází) do jiného systému. Stejně jako všechny automatizované procesy by po instalaci mělo pokračovat vytváření záloh navždy, takže budete muset zajistit odstranění starých záloh, aby se vaše disky nezaplnily.
Skript
Skript je jednoduchý čistý skript BASH shell testovaný na CentOS Linux Distribution, ale schopný běžet na jiných variantách Linuxu s malými nebo žádnými úpravami.
- Vyjměte a vložte následující text do editoru a proveďte potřebné změny, abyste zlepšili nebo omezili funkčnost.
#!/bin/bash # mysql-backup.sh # use mysqldump to Dump DB and compress it on the fly to a mounted partition # BACKUP_DIR="/data/db-backups" mkdir -p $BACKUP_DIR chmod 777 $BACKUP_DIR # # SERIAL="`date +%Y%m%d-%H%M%S`" #===================================== # Log Functions # function LogStart { echo "====== Log Start =========" >> $LF echo "Time: `date`" >> $LF echo " " >> $LF } function LogEnd { echo " " >> $LF echo "Time: `date`" >> $LF echo "====== Log End =========" >> $LF } #===================================== # # function GetDBList { echo "Calling GetDBList()" >> $LF mysqlshow |grep "|"| tr -d ' '|tr -d '|'| egrep -v Databases > $DBLIST } #===================================== # # function DoBackup { echo "Calling DoBackup()" >> $LF DBFILE=$BACKUP_DIR/db-$DB-$SERIAL.sql echo "Host [$H]" >> $LF echo "DB File [$DBFILE]" >> $LF if [ -a $DBFILE ] then mv $DBFILE $DBFILE.`date '+%M%S'` fi echo "Dumping ${DB}" >> $LF mysqldump -B ${DB} --add-drop-database --add-drop-table >> ${DBFILE} echo "Zipping up file!" >> $LF gzip ${DBFILE} echo "Done!" >> $LF } FILE_DATE=`date '+%Y-%m-%d'` LF_DIR=/logs/db-backup LF=$LF_DIR/db-backup-$FILE_DATE.log mkdir -p $LF_DIR chmod 777 $LF_DIR touch $LF chmod 664 $LF DBLIST=/tmp/dblist-$FILE_DATE.list LogStart #===================================== # # MAIN Code Start GetDBList while read line do echo "Backuping up: $line" H="localhost" DB=$line DoBackup done < $DBLIST echo "All backups Completed" >> $LF LogEnd # # EOF
Testování zálohy
- Chcete-li ověřit, že skript zálohování funguje, nejprve spusťte příkaz backup takto:
/usr/local/bin/mysql-backups.sh
- Potom proveďte výpis adresáře /data/db-backup adresář vytvořený skriptem, měli byste vidět nějaké soubory, z nichž každý představuje vaši komprimovanou, zálohovanou databázi!
[root@yourserver]#ls -l /data/db-backups -rw-r--r-- 1 root root 510 Mar 5 15:21 db-information_schema-20140305-152103.sql.gz -rw-r--r-- 1 root root 526 Mar 5 15:22 db-information_schema-20140305-152229.sql.gz -rw-r--r-- 1 root root 142122 Mar 5 15:21 db-mysql-20140305-152103.sql.gz -rw-r--r-- 1 root root 142283 Mar 5 15:22 db-mysql-20140305-152229.sql.gz .... [root@yourserver]#
Automatizace skriptu
Skript by měl být umístěn v adresáři s názvem /usr/local/bin . Tento adresář je specificky vyhrazen pro uživatelem psané systémové skripty.
Skript by měl být spustitelný uživatelem root, k označení souboru jako spustitelného použijte následující příkaz:
"chmod 744 /usr/local/bin/mysql-backup.sh"
Pro automatizaci provádění skriptu použijeme aplikaci CRON, takže do našeho crontab přidáme řádek pomocí příkazu "crontab -e" , objeví se editor a přidáme řádek následovně:
30 22 * * * /usr/local/bin/mysql-backups.sh > /dev/null 2>&1
V zásadě to umožní spuštění skriptu každý den ve 22:30. Skryje také jakýkoli výstup z programu, když se program přihlásí na disk.
Obnovení
Chcete-li obnovit zálohu, použijte gunzip k dekomprimaci souboru a poté použijte mysql
Zde je typický příklad toho, co potřebujete ke spuštění:
Varování:Buďte velmi opatrní, co děláte, protože pokud uděláte chybu, přepíšete databázi.
Pokud zálohujete svůj server, zvažte automatické zkopírování souborů na jiný server a jejich automatickou obnovu. To vám umožní mít produkční kopii vybraných databází pro účely interního testování a auditu.
cd /data/db-backups
gunzip db-mybigdatabase-20140305-152229.sql.gz
mysql < db-mybigdatabase-20140305-152229.sql
Kam odtud?