GNU/Linux >> Znalost Linux >  >> Linux

Skriptované zálohy databáze MySQL

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.

  1. 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

  1. Chcete-li ověřit, že skript zálohování funguje, nejprve spusťte příkaz backup takto:
    /usr/local/bin/mysql-backups.sh
  2. 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í:

cd /data/db-backups
gunzip db-mybigdatabase-20140305-152229.sql.gz
mysql < db-mybigdatabase-20140305-152229.sql

Varování:Buďte velmi opatrní, co děláte, protože pokud uděláte chybu, přepíšete databázi.

Kam odtud?

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.


Linux
  1. Optimalizujte databázi MySQL

  2. Jak zkopírovat databázi MySQL

  3. Základy uživatele a databáze MySQL

  1. Nejčastější dotazy k nasazení MySQL

  2. Duplikovat celou databázi MySQL

  3. Přejmenujte databázi MySQL

  1. Vylepšete mezipaměť databáze MySQL

  2. Jak vytvořit databázi v MySQL pomocí MySQL Workbench

  3. Nakonfigurujte zálohy databáze MSSQL