From 251b9285c49688f127fa523a715d924f8bcf7f4b Mon Sep 17 00:00:00 2001 From: M.Gergo Date: Sun, 4 Mar 2018 17:54:42 +0100 Subject: mayor backup: mysql/dump utf8 megkövetelése, mayor backup: alapértelmezett lock-olás mayor backup --now: azonnali mentés lehetősége, mayor backup --skip-lock: lock-olás kihagyása +bőbeszédűbb log-olás lehetősége +új paraméterek a main-conf-ba: #======================# # Main # #======================# MYSQLDUMP=/usr/bin/mysqldump VERBOSE=2 ## 0,1,2 lehetséges --- mayor/bin/backup.sh | 156 ++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 138 insertions(+), 18 deletions(-) (limited to 'mayor/bin/backup.sh') diff --git a/mayor/bin/backup.sh b/mayor/bin/backup.sh index 46a11f4b..af02cccf 100644 --- a/mayor/bin/backup.sh +++ b/mayor/bin/backup.sh @@ -1,7 +1,7 @@ #!/bin/bash -OPT_SPEC="hf:d::" -LONG_OPT_SPEC="help,file:,backup-file:,dir:,backup-dir::" +OPT_SPEC="hnlf:d::" +LONG_OPT_SPEC="help,now,skip-lock,file:,backup-file:,dir:,backup-dir::" PARSED_OPTIONS=$(getopt -n "$0" -a -o $OPT_SPEC --long $LONG_OPT_SPEC -- "$@") OPTIONS_RET=$? eval set -- "$PARSED_OPTIONS" @@ -15,13 +15,22 @@ A parancs segítségével menthetjük a MaYoR rendszer adatbázisait, aktuális beállításait. A mentés alapértelmezetten az aktuális dátum alapján lesz elnevezve "YYYYmmdd.tgz" alakban (pl. $DATE.tgz). +Lehetőség van azonnali mentésre, akkor is, ha már volt aznap mentés, +ehhez használjuk a --now kapcsolót. + A mentési könyvtár, a szükséges jelszavak és egyéb mentési paraméterek beállításait a /etc/mayor/main.conf állományban kell megadni. +Újdonság: + Ezentúl a backup folyamat egyben a napló Lock-file -vel történő ideiglenes zárolásával jár, + ha ezt el szeretnénk kerülni, akkor használjuk a --skip-lock kapcsolót. + Opciók: - -h, --help: A parancs leírása (amit most olvasol...) - -f, --file, --backup-file: A mentési állomány neve - -d, --dir, --backup-dir: A mentési könyvtár elérési útja + -h, --help: A parancs leírása (amit most olvasol...) + -f, --file, --backup-file: A mentési állomány neve + -d, --dir, --backup-dir: A mentési könyvtár elérési útja + -l, --skip-lock: A mellőzi a mayor zárolását a backup futása alatt. + -n, --now: Mentést készít most/azonnal. EOF } @@ -46,6 +55,14 @@ while [ $# -ge 1 ]; do echo "Backup könyvtár: $BACKUPDIR" ;; + --skip-lock | -l ) SKIPLOCK=1 + ;; + + --now | -n ) DATE=$(date "+%Y%m%d_%H%M%S") + BACKUPFILE="$DATE" + #echo "Backup fájl: $BACKUPFILE.tgz" + ;; + -- ) shift break ;; @@ -73,6 +90,37 @@ if [ -z $BACKUPDIR ]; then fi fi +### A lockfile beállítása + +if [ "$SKIPLOCK" != "1" ]; then + if [ ! -z $LOCKFILE ]; then + if [ "$VERBOSE" -gt 0 ]; then + echo -e "* A web-es elérés letiltása:" + echo -n "- Lock-file létrehozása... " + echo -e "kész." + fi + echo "$DATE: Backup fut... " > $LOCKFILE +# echo -n " - Aktív munkamenetek törlése... " ### erre elvileg itt nincs szükség +# $MYSQL $MYSQL_PARAMETERS -e"DELETE FROM mayor_login.session" +# echo "kész." + else + if [ $VERBOSE -gt 0 ]; then echo -e "* A web-es elérés már le van tiltva..."; fi + fi +else + if [ $VERBOSE -gt 0 ]; then echo -e "* A lock-olást a kérésedre kihagytam..."; fi +fi + +function freeup_lock { +if [ -e $LOCKFILE ]; then + if [ ! -z $LOCKFILE ]; then + if [ $VERBOSE -gt 0 ]; then echo -e "-"; echo -n "* A web-es hozzáférés engedélyezése:..."; fi + rm $LOCKFILE + if [ $VERBOSE -gt 0 ]; then echo -e "kész."; echo -e "-"; fi + fi +fi +} + + ## # A könyvtárak létrehozása ## @@ -80,8 +128,9 @@ fi if [ ! -e $BACKUPDIR ]; then mkdir $BACKUPDIR > /dev/null 2>&1 if [ $? -ne 0 ]; then - echo "Nem sikerült a ${BACKUPDIR} könyvtárat létrehozni!" - echo "MaYoR Backup failure!" + echo "*** Nem sikerült a $BACKUPDIR könyvtárat létrehozni!" + echo "**** MaYoR Backup failure! ****" + freeup_lock exit 1 fi fi @@ -89,7 +138,8 @@ chown $WEB_SERVER_USER $BACKUPDIR chmod 700 $BACKUPDIR if [ -e $BACKUPDIR/$BACKUPFILE.tgz ]; then - echo -e "\n\nERROR: már volt mentés: $BACKUPDIR/$BACKUPFILE.tgz\n" + echo -e "\n**** ERROR: már volt mentés: $BACKUPDIR/$BACKUPFILE.tgz ****\n" + freeup_lock exit 1 fi mkdir $BACKUPDIR/$BACKUPFILE @@ -99,43 +149,101 @@ chmod 700 $BACKUPDIR/$BACKUPFILE ## # mysql adatbázis mentése ## +if [ $VERBOSE -gt 0 ]; then + echo -e "-" + echo -e "* Backup fájl: $BACKUPFILE.tgz" +fi if [ "$MYSQL_HOST" == "" ]; then MYSQL_HOST="localhost" fi -if [ -f $MYSQL ]; then +DB_INTEZMENYEK='' +if [ -f $MYSQL ] && [ -f $MYSQLDUMP ]; then + + if [ -f "$BASEDIR/config/my.cnf" ]; then + MYSQL_CONFIG="--defaults-extra-file=$BASEDIR/config/my.cnf" ##Vigyázat! a 'mysql' kliens rossz! Néha beleveszi a $(pwd) tartamát is! + TEST=$(echo "SHOW VARIABLES LIKE '%character_set_client%'" | $MYSQL "$MYSQL_CONFIG" | tail -n+2 | cut -f 2) +### Csak character_set_client=utf8 engedélyezett + if [ "$TEST" == "utf8" ]; then + if [ $VERBOSE -gt 1 ]; then echo -e "- MySQL-connect OK (my.cnf)" ; fi + else + MYSQL_CONFIG="-h$MYSQL_HOST -u$MYSQL_USER -p$MYSQL_PW --default-character-set=utf8" + fi + else + MYSQL_CONFIG="-h$MYSQL_HOST -u$MYSQL_USER -p$MYSQL_PW --default-character-set=utf8" + fi + +### Ellenőrizzük + TEST=$(echo "SHOW VARIABLES LIKE '%character_set_client%'" | $MYSQL $MYSQL_CONFIG | tail -n+2 | cut -f 2) + if [ "$TEST" == "utf8" ]; then + if [ $VERBOSE -gt 1 ]; then echo -e "- MySQL-connect OK (utf8+user/passw)"; fi + else + echo -e "*** MySQL-connect ERROR (nem utf8 vagy hibás user/passw)" + exit 2 + fi + DATABASES='' - for DB in `echo 'SHOW DATABASES' | mysql -h$MYSQL_HOST -p$MYSQL_PW -u$MYSQL_USER`; do + for DB in $(echo 'SHOW DATABASES' | $MYSQL $MYSQL_CONFIG); do if [[ ! $EXCLUDED_DBS =~ .*$DB.* ]] && { [[ $DB =~ ^mayor.* ]] || [[ $DB =~ ^naplo.* ]] || [[ $DB =~ ^intezmeny.* ]]; } then DATABASES="$DATABASES $DB" fi done + DB_INTEZMENYEK=$($MYSQL $MYSQL_CONFIG -e "SET NAMES 'utf8'; SELECT rovidNev FROM mayor_naplo.intezmeny; " | tail -n+2 ) ### Elvileg itt sem lehetne ékezetes else - echo -e "\n\nERROR: A mysql kliens nem található: $MYSQL\n" + echo -e "*** MySQL ERROR: A mysql kliens nem található: $MYSQL\n" + freeup_lock exit 2 fi + +## +# Adatbázisok mentése +## + +if [ $VERBOSE -gt 0 ]; then echo -e "* Adatbázisok mentése:"; fi + for DATABASE in $DATABASES; do - mysqldump -R -h$MYSQL_HOST -p$MYSQL_PW -u$MYSQL_USER $DATABASE >> $BACKUPDIR/$BACKUPFILE/$DATABASE.sql + if [ ! -z $MYSQLDUMP ]; then + ### SET NAMES-hez: --set-charset + ### Szebb: --result-file=file_name +# mysqldump $MYSQL_CONFIG -R --set-charset --result-file="$BACKUPDIR/$BACKUPFILE/$DATABASE.sql" $DATABASE + $MYSQLDUMP $MYSQL_CONFIG -R --set-charset --result-file="$BACKUPDIR/$BACKUPFILE/$DATABASE.sql" $DATABASE + else + mysqldump $MYSQL_CONFIG -R --set-charset --result-file="$BACKUPDIR/$BACKUPFILE/$DATABASE.sql" $DATABASE + fi + if [ $VERBOSE -gt 1 ]; then echo -e "- $DATABASE"; fi done + ## # A honlap mentése ## - +if [ $VERBOSE -gt 0 ]; then echo -e "* Fájlok mentése:"; fi mkdir $BACKUPDIR/$BACKUPFILE/log cp -a $BASEDIR/log/revision $BACKUPDIR/$BACKUPFILE/log/revision +if [ $VERBOSE -gt 1 ]; then echo -e "- revision"; fi cp -a $BASEDIR/www $BACKUPDIR/$BACKUPFILE/www +if [ $VERBOSE -gt 1 ]; then echo -e "- www/*"; fi cp -a $BASEDIR/config $BACKUPDIR/$BACKUPFILE/config - +if [ $VERBOSE -gt 1 ]; then echo -e "- config/*"; fi + +if [ $VERBOSE -gt 0 ]; then echo -e "* Templétek mentése:"; fi +for RN in $(echo $DB_INTEZMENYEK); do ## a nyomtatási templétek is legyenek benne a mentésben +if [ -d "$BASEDIR/print/module-naplo/templates/$RN" ]; then + mkdir -p $BACKUPDIR/$BACKUPFILE/print/module-naplo/templates/ + cp -a $BASEDIR/print/module-naplo/templates/$RN $BACKUPDIR/$BACKUPFILE/print/module-naplo/templates/$RN + if [ $VERBOSE -gt 1 ]; then echo -e "- $RN/*"; fi +fi +done if [ "$SAVELDAP" == 1 ]; then ## # Az LDAP adatbázis ## + if [ $VERBOSE -gt 0 ]; then echo -e "* LDAP mentése"; fi /etc/init.d/slapd stop sleep 1 @@ -159,20 +267,26 @@ fi # Becsomagolás ## +if [ $VERBOSE -gt 0 ]; then echo -e "* Becsaomagolás"; fi cd $BACKUPDIR -## Ez a korábbi szerintem hibás: -## tar cfz ${BACKUPFILE}.tgz ${DATE} -tar cfz ${BACKUPFILE}.tgz ${BACKUPFILE} +#### Ez a korábbi szerintem hibás: +#### tar cfz ${BACKUPFILE}.tgz ${DATE} +#tar cfz ${BACKUPFILE}.tgz ${BACKUPFILE} ##Ez is néha... + +# ez már jó +tar -czf "$BACKUPFILE.tgz" "$BACKUPFILE/" rm -rf $BACKUPFILE #Debian6 inkompatibilis: tar cfz ${BACKUPFILE}.tgz --remove-files ${BACKUPFILE} +if [ $VERBOSE -gt 0 ]; then echo -e "* Takarítás"; fi ## # Mentés átmásolása másik szerverre # rsync # Losonci János kiegészítése (losy@agymk.sulinet.hu) ## if [ "$RSYNC" == 1 ]; then - RSYNCBIN=`which rsync` + if [ $VERBOSE -gt 0 ]; then echo -e "* RSYNC küldés"; fi + RSYNCBIN=$(which rsync) if [ "$RSYNCBIN" != "" ]; then echo $RSYNCBIN -auvE $BACKUPDIR/ $RUSER@$RHOST:$RPATH/ $RSYNCBIN -auvE $BACKUPDIR/ $RUSER@$RHOST:$RPATH/ @@ -190,3 +304,9 @@ declare -i BDAYS=BACKUPDAYS if [ $BDAYS -gt 0 ]; then find $BACKUPDIR -mtime +$BDAYS -exec rm {} \; fi + +### +## Végül a lock-olás feloldása +# +freeup_lock +if [ $VERBOSE -gt 0 ]; then echo -e "* Backup-script vége.\n"; fi -- cgit v1.2.3