12.24
Czasem muszę zrobić backup na szybko – tylko, aby była kopia jak coś się wysypie. Dziś przytrafiło mi się zrobić taki backup dla MySQL. Na pierwszy rzut oka sprawa wydaje się banalna, ponieważ developerzy MySQL podarowali nam sprytne narzędzie jakim jest mysqldump.
Przy jego pomocy bardzo fajnie (i co ważne bezpiecznie!) możemy dokonać backupu naszych wszystkich baz danych, pojedynczej bazy lub nawet jednej, interesującej nas tabeli. My chcemy mieć backup wszystkich baz danych, więc na pierwszy rzut oka napisalibyśmy:
mysqldump --all-databases -u username -ppassword > backup.sql
I wszystko by było pięknie, ładnie, fajnie gdyby nie jedna rzecz: gdy padnie nam jedna baza i będziemy chcieli ją odzyskać korzystając z pliku backup.sql to mamy fackup. Dlaczego? Otóż dlatego, że mamy jeden zajebiście duży plik z backupem, przez który musimy się przewalić i wyciągnąć z niego tylko bazę danych, która nas interesuje.
Pierwsza myśl jaka przychodzi nam do głowy to, że przecież możemy napisać:
mysqldump -u username -ppassword database_name > database_name.sql
No i gites. Problem jednak w tym, że nigdy nie wiemy jakie (i ile) baz danych leży na aktualnym serwerze, więc mamy kilka możliwości:
- z palca pisać każdą nazwę bazy danych,
- napisać sobie w bashu długą linijkę, która to zrobi lub też…
… skorzystać z poniższego skryptu:
#!/bin/bash
DB_USER=y3ti
DB_PASS=moje_fajne_haslo
DB_PATH="/var/lib/mysql"
DATE=`date "+%Y%m%d"`
TMP_DIR="./db_$DATE"
mkdir -p "/tmp/db_$DATE"
cd /tmp
echo `date "+%F %H:%M:%S: "`"**** Creating MySQL Backup ****"
echo `date "+%F %H:%M:%S: "`"Databases:"
for filename in $( ls $DB_PATH ); do
if [ -d $DB_PATH/$filename ]; then
echo `date "+%F %H:%M:%S:"`" - $filename "
mysqldump -u $DB_USER -p$DB_PASS $filename > /tmp/db_$DATE/$filename.sql
fi
done
echo `date "+%F %H:%M:%S:"`" Compressing dumped databases"
bzip2 -9 /tmp/db_$DATE/*
tar -cf db_$DATE.tar db_$DATE
rm -rf /tmp/db_$DATE
echo `date "+%F %H:%M:%S:"`" Moving to /backup/mysql"
mkdir -p /backup/mysql
mv db_$DATE.tar /backup/mysql
echo `date "+%F %H:%M:%S: "`"Complete."
Dodatkowo mamy informację, o wszystkich znalezionych bazach danych w czytelnie wydrukowanym raporcie, który może wyglądać mniej więcej tak:
2008-12-24 19:16:59: **** Creating MySQL Backup **** 2008-12-24 19:16:59: Databases: 2008-12-24 19:16:59: - blog 2008-12-24 19:16:59: - mysql 2008-12-24 19:16:59: - plix 2008-12-24 19:16:59: - test 2008-12-24 19:16:59: - webistrano 2008-12-24 19:16:59: Compressing dumped databases 2008-12-24 19:17:00: Moving to /backup/mysql 2008-12-24 19:17:00: Complete.
Nic, tylko dodać do crona i ustawić, aby raz na dobę robił backup :)
[...] źródło: blog.y3ti.pl Follow us on Twitter 26 śledzących RSS Feed 218 czytelników Backup MySQL na szybko 1 głosuj! Czasem muszę zrobić backup na szybko – tylko, aby była kopia jak coś się [...]