SantyagoSantyago
Avatar

Witaj!
Blog archiwalny. Już niebawem nowy serwis!

YouTube RSS Facebook GitHub

Czasami konieczne jest szybkie wykonanie kopii bezpieczeństwa wszystkich baz danych MySQL na serwerze. Problemu nie ma, gdy baz jest kilka, jednak pojawia się przy ich większej ilości. Pomóc nam może prosty skrypt massdump.sh.

Dostępne parametry przy uruchomieniu:

  • -o KATALOG_DOCELOWY
  • -u NAZWA_UŻYTKOWNIKA
  • -e KODOWANIE_ZNAKÓW
  • -g włączenie kompresji gzip
  • -b włączenie komprezji bzip2

Wystarczy wydać polecenie i gotowe: massdump.sh -u root -e utf8 -b

  1. #!/bin/bash
  2.  
  3. MYSQLDUMP=`which mysqldump`
  4. MYSQL=`which mysql`
  5.  
  6. USER=""
  7. PASSWORD=""
  8.  
  9. OUTPUTDIR=${PWD}
  10. GZIP_ENABLED=0
  11. BZIP2_ENABLED=0
  12. ENCODING="latin1"
  13. STAMP=$(date +%Y_%m_%d_%H)
  14.  
  15. while getopts u:e:o:gb OPTION
  16. do
  17.     case ${OPTION} in
  18.         u) USER=${OPTARG};;
  19.         e) ENCODING=${OPTARG};;
  20.         o) OUTPUTDIR=${OPTARG}; mkdir -p $OUTPUTDIR;;
  21.         g) GZIP_ENABLED=1; USEZIPX="gzip"; ZIPE="gz";;
  22.         b) BZIP2_ENABLED=1; USEZIPX="bzip2" ZIPE="bz2";;
  23.         *) exit 2;;
  24.     esac
  25. done
  26.  
  27. if [ "$USER" != '' ]; then
  28.     echo "Enter password for" $USER":"
  29.     oldmodes=`stty -g`
  30.     stty -echo
  31.     read PASSWORD
  32.     stty $oldmodes
  33. fi
  34.  
  35. DBS=`$MYSQL --user=$USER --password=$PASSWORD -e "SHOW DATABASES;" | grep -Ev "(information_schema|Database)"`
  36.  
  37. for db in $DBS; do
  38.     echo "Backup database: $db / $ENCODING encoding"
  39.     if [ $GZIP_ENABLED == 1 ] || [ $BZIP2_ENABLED == 1 ]; then
  40.     $MYSQLDUMP --force --opt
  41.     --user=$USER --password=$PASSWORD --databases $db
  42.     --default-character-set=$ENCODING -N | $USEZIPX > "$OUTPUTDIR/$STAMP-$db.$ZIPE"
  43.     else
  44.     $MYSQLDUMP --force --opt
  45.     --user=$USER --password=$PASSWORD --databases $db
  46.     --default-character-set=$ENCODING -N > "$OUTPUTDIR/$STAMP-$db.sql"
  47.     fi
  48. done
Komentarze Komentarze
Avatar 1
dracorp Linux / Mozilla Firefox 20.0
24 April 2013 - 13:34 Koszalin

Dobrze było by wspomnieć o alternatywie, dostępnej np. w domyślnym repo w Debianie: automysqlbackup.
Oprócz tego że idealnie działa w cronie to też nadaje się do zrobienia kopii wszystkich* baz na teraz.

*) Domyślnie nie robi kopie bazy mysql. A czasem to może być bardzo potrzebne i należy o tym pamiętać.