Quellcode durchsuchen

backup system 92% is done

Serghey Rodin vor 14 Jahren
Ursprung
Commit
5e09a913fd
4 geänderte Dateien mit 197 neuen und 18 gelöschten Zeilen
  1. 107 9
      bin/v_backup_sys_user
  2. 1 1
      conf/vars.conf
  3. 80 8
      func/db_func.sh
  4. 9 0
      func/shared_func.sh

+ 107 - 9
bin/v_backup_sys_user

@@ -27,12 +27,14 @@ check_args '1' "$#" 'user [output]'
 # Checking argument format
 format_validation 'user'
 
-# Checking web system is enabled
+# Checking backup system is enabled
 is_system_enabled 'backup'
 
 # Checking user
 is_user_valid
 
+# Checking user backups
+is_backup_enabled
 
 
 #----------------------------------------------------------#
@@ -56,8 +58,31 @@ fi
 echo "1.0" >$tmpdir/backup_version
 echo "$VERSION" > $tmpdir/vesta_version
 
+# Checking excludes
+OLD_IFS="$IFS"
+IFS=$'\n'
+if [ -e "$V_USERS/$user/backup.excludes" ]; then
+    if [ -z "$output" ]; then
+        echo "-- Excludes --"
+    fi
+
+    for exclude in $(cat $V_USERS/$user/backup.excludes); do
+        if [ -z "$output" ]; then
+            echo -e "\t $exclude"
+        fi
+        # Indirect variable references (a bit of black magic)
+        eval ${exclude%%=*}=${exclude#*=}
+    done
+
+    if [ -z "$output" ]; then
+        echo
+    fi
+fi
+IFS="$OLD_IFS"
+
 # WEB domains
-if [ ! -z "$WEB_SYSTEM" ] && [ "$WEB_SYSTEM" != 'no' ]; then
+if [ ! -z "$WEB_SYSTEM" ] && [ "$WEB_SYSTEM" != 'no' ] && [ "$WEB" != '*' ]
+then
     if [ -z "$output" ]; then
         echo "-- WEB --"
     fi
@@ -68,8 +93,17 @@ if [ ! -z "$WEB_SYSTEM" ] && [ "$WEB_SYSTEM" != 'no' ]; then
     field='$DOMAIN'
     search_string='DOMAIN='
     domains=$(dom_clear_search)
+    domain_list=''
 
+    # Cleaning excludes
     for domain in $domains; do
+	check_exl=$(echo "$WEB"|grep -w $domain)
+        if [ -z "$check_exl" ]; then
+            web_list="$web_list $domain"
+        fi
+    done
+
+    for domain in $web_list; do
         if [ -z "$output" ]; then
             echo -e "\t$(date +%H:%m:%S) $domain"
         fi
@@ -139,7 +173,10 @@ if [ ! -z "$WEB_SYSTEM" ] && [ "$WEB_SYSTEM" != 'no' ]; then
         tar -rf $tmpdir/web/$domain/$domain.tar conf cert
         mv $tmpdir/web/$domain/$domain.tar $tmpdir/web/
         rm -rf $tmpdir/web/$domain
-        gzip -$V_BACKUP_GZIP $tmpdir/web/$domain.tar
+
+        if [ ! -z "$V_BACKUP_GZIP" ]; then 
+            gzip -$V_BACKUP_GZIP $tmpdir/web/$domain.tar
+        fi
 
     done
     if [ -z "$output" ]; then
@@ -149,7 +186,8 @@ if [ ! -z "$WEB_SYSTEM" ] && [ "$WEB_SYSTEM" != 'no' ]; then
 fi
 
 # DNS domains
-if [ ! -z "$DNS_SYSTEM" ] && [ "$DNS_SYSTEM" != 'no' ]; then
+if [ ! -z "$DNS_SYSTEM" ] && [ "$DNS_SYSTEM" != 'no' ] && [ "$DNS" != '*' ]
+then
     if [ -z "$output" ]; then
         echo "-- DNS --"
     fi
@@ -161,7 +199,15 @@ if [ ! -z "$DNS_SYSTEM" ] && [ "$DNS_SYSTEM" != 'no' ]; then
     search_string='DOMAIN='
     domains=$(dom_clear_search)
 
+    # Cleaning excludes
     for domain in $domains; do
+	check_exl=$(echo "$DNS"|grep -w $domain)
+        if [ -z "$check_exl" ]; then
+            dns_list="$dns_list $domain"
+        fi
+    done
+
+    for domain in $dns_list; do
         if [ -z "$output" ]; then
             echo -e "\t$(date +%H:%m:%S) $domain"
         fi
@@ -189,7 +235,7 @@ fi
 # TBD
 
 # DatbaBases
-if [ ! -z "$DB_SYSTEM" ] && [ "$DB_SYSTEM" != 'no' ]; then
+if [ ! -z "$DB_SYSTEM" ] && [ "$DB_SYSTEM" != 'no' ] && [ "$DB" != '*' ]; then
     if [ -z "$output" ]; then
         echo "-- DB --"
     fi
@@ -201,10 +247,34 @@ if [ ! -z "$DB_SYSTEM" ] && [ "$DB_SYSTEM" != 'no' ]; then
     search_string='DB='
     dbs=$(dom_clear_search)
 
-    for db in $dbs; do
+    # Cleaning excludes
+    for database in $dbs; do
+	check_exl=$(echo "$DB"|grep -w $database)
+        if [ -z "$check_exl" ]; then
+            db_list="$db_list $database"
+        fi
+    done
+
+    for database in $db_list; do
+        type=$(get_db_value '$TYPE')
+        host=$(get_db_value '$HOST')
+        db_user=$(get_db_value '$USER')
+        dump="$tmpdir/db/$database.$type.sql"
+        grants="$tmpdir/db/$database.$type.$db_user"
+
         if [ -z "$output" ]; then
-            echo -e "\t$(date +%H:%m:%S) $db"
+            echo -e "\t$(date +%H:%m:%S) $database $type"
+        fi
+
+        case $type in
+            mysql) dump_db_mysql ;;
+            pgsql) dump_db_pgsql ;;
+        esac
+
+        if [ ! -z "$V_BACKUP_GZIP" ]; then 
+            gzip -$V_BACKUP_GZIP $dump
         fi
+
     done
 
     if [ -z "$output" ]; then
@@ -214,7 +284,8 @@ if [ ! -z "$DB_SYSTEM" ] && [ "$DB_SYSTEM" != 'no' ]; then
 fi
 
 # Cron jobs
-if [ ! -z "$CRON_SYSTEM" ] && [ "$CRON_SYSTEM" != 'no' ]; then
+if [ ! -z "$CRON_SYSTEM" ] && [ "$CRON_SYSTEM" != 'no' ] && [ "$CRON" != '*' ]
+then
     if [ -z "$output" ]; then
         echo "-- CRON --"
     fi
@@ -238,7 +309,7 @@ if [ ! -z "$CRON_SYSTEM" ] && [ "$CRON_SYSTEM" != 'no' ]; then
 fi
 
 # SSL CERTIFICATES
-if [ ! -z "$WEB_SSL" ] && [ "$WEB_SSL" != 'no' ]; then
+if [ ! -z "$WEB_SSL" ] && [ "$WEB_SSL" != 'no' ] && [ "$SSL" != '*' ]; then
     if [ -z "$output" ]; then
         echo "-- CERTIFICATES --"
     fi
@@ -293,6 +364,33 @@ if [ -e "$V_USERS/$user/history.log" ]; then
     cp -r $V_USERS/$user/history.log $tmpdir/vesta/
 fi
 
+if [ -e "$V_USERS/$user/backup.excludes" ]; then
+    if [ -z "$output" ]; then
+        echo -e "\t$(date +%H:%m:%S) backup.excludes"
+    fi
+    cp -r $V_USERS/$user/backup.excludes $tmpdir/vesta/
+fi
+
+if [ -z "$output" ]; then
+    echo
+fi
+
+# Move tmp backup to local storage
+if [ "$BACKUP_SYSTEM" = 'local' ]; then
+    if [ -z "$output" ]; then
+        echo "ARCHIVE $V_BACKUP/$user.$V_DATE.tar"
+    fi
+
+    # Checking retention
+    check_ret=$()
+
+    cd $tmpdir
+    tar -cf $V_BACKUP/$user.$V_DATE.tar .
+fi
+
+cd /
+rm -rf $tmpdir
+
 if [ -z "$output" ]; then
     echo
 fi

+ 1 - 1
conf/vars.conf

@@ -23,9 +23,9 @@ V_LOCK=/var/lock/vesta
 V_HOME='/home'
 V_TMP='/tmp'
 V_BACKUP='/backup'
-V_BACKUP_GZIP='5'
 
 # Other vars
+V_BACKUP_GZIP='5'
 V_SUSPEND_URL='vestacp.com/faq/acc_suspended/'
 V_SCRIPT=$(basename $0)
 V_EVENT="$(date +%m-%d-%y" "%H:%m:%S) $V_SCRIPT $*"

+ 80 - 8
func/db_func.sh

@@ -432,7 +432,7 @@ create_db_pgsql() {
 
     $sql "CREATE ROLE $db_user WITH LOGIN PASSWORD '$db_password'"
     $sql "GRANT ALL PRIVILEGES ON DATABASE $database TO $db_user"
-    export PGPASSWORD='pgsqk'
+    export PGPASSWORD='pgsql'
 }
 
 is_db_host_new() {
@@ -563,7 +563,7 @@ change_db_pgsql_password() {
     fi
 
     $sql "ALTER ROLE $db_user WITH LOGIN PASSWORD '$db_password'" >/dev/null
-    export PGPASSWORD='pgsqk'
+    export PGPASSWORD='pgsql'
 }
 
 get_db_value() {
@@ -670,7 +670,7 @@ del_db_pgsql() {
     else
         $sql "REVOKE ALL PRIVILEGES ON $database FROM $db_user">/dev/null
     fi
-    export PGPASSWORD='pgsqk'
+    export PGPASSWORD='pgsql'
 }
 
 
@@ -687,6 +687,77 @@ del_db_vesta() {
     sed -i "$string d" $conf
 }
 
+dump_db_mysql() {
+    # Defining vars
+    host_str=$(grep "HOST='$host'" $V_DB/mysql.conf)
+    for key in $host_str; do
+        eval ${key%%=*}=${key#*=}
+    done
+    sql="mysql -h $HOST -u $USER -p$PASSWORD -P$PORT -e"
+    dumper="mysqldump -h $HOST -u $USER -p$PASSWORD -P$PORT -r"
+
+    # Checking empty vars
+    if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $PORT ]; then
+        echo "Error: config is broken"
+        log_event 'debug' "$E_PARSE_ERROR $V_EVENT"
+        exit $E_PARSE_ERROR
+    fi
+
+    # Checking connection
+    $sql "SELECT VERSION()" >/dev/null 2>&1; code="$?"
+    if [ '0' -ne "$code" ]; then
+        echo "Error: Connect failed"
+        log_event 'debug' "$E_DBHOST_UNAVAILABLE $V_EVENT"
+        exit $E_DBHOST_UNAVAILABLE
+    fi
+
+    # Dumping database
+    $dumper $dump $database
+
+    # Dumping user grants
+    $sql "SHOW GRANTS FOR $db_user@localhost" | grep -v "Grants for" > $grants
+    $sql "SHOW GRANTS FOR $db_user@'%'" | grep -v "Grants for" >> $grants
+}
+
+dump_db_pgsql() {
+    # Defining vars
+    host_str=$(grep "HOST='$host'" $V_DB/pgsql.conf)
+    for key in $host_str; do
+        eval ${key%%=*}=${key#*=}
+    done
+
+    export PGPASSWORD="$PASSWORD"
+    sql="psql -h $HOST -U $USER -d $TPL -p $PORT -c"
+    dumper="pg_dump -h $HOST -U $USER -p $PORT -c -d -O -x -i -f"
+    # Checking empty vars
+    if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $TPL ]; then
+        echo "Error: config is broken"
+        log_event 'debug' "$E_PARSE_ERROR $V_EVENT"
+        exit $E_PARSE_ERROR
+    fi
+
+    # Checking connection
+    $sql "SELECT VERSION()" >/dev/null 2>&1;code="$?"
+    if [ '0' -ne "$code" ];  then
+        echo "Error: Connect failed"
+        log_event 'debug' "$E_DBHOST_UNAVAILABLE $V_EVENT"
+        exit $E_DBHOST_UNAVAILABLE
+    fi
+
+    # Dumping database
+    $dumper $dump $database
+
+    # Dumping user grants
+    md5=$($sql "SELECT rolpassword FROM pg_authid WHERE rolname='$db_user';")
+    md5=$(echo "$md5" | head -n 1 | cut -f 2 -d ' ')
+    pw_str="UPDATE pg_authid SET rolpassword='$md5' WHERE rolname='$db_user';"
+    gr_str="GRANT ALL PRIVILEGES ON DATABASE $database to '$db_user'"
+    echo -e "$pw_str\n$gr_str" >> $grants
+    export PGPASSWORD='pgsql'
+}
+
+
+
 is_db_host_free() {
     # Defining vars
     host_str=$(grep "HOST='$host'" $V_DB/$type.conf)
@@ -801,7 +872,7 @@ suspend_db_pgsql() {
 
     # Suspending user
     $sql "REVOKE ALL PRIVILEGES ON $database FROM $db_user">/dev/null
-    export PGPASSWORD='pgsqk'
+    export PGPASSWORD='pgsql'
 }
 
 unsuspend_db_mysql() {
@@ -859,7 +930,7 @@ unsuspend_db_pgsql() {
 
     # Unsuspending user
     $sql "GRANT ALL PRIVILEGES ON DATABASE $database TO $db_user" >/dev/null
-    export PGPASSWORD='pgsqk'
+    export PGPASSWORD='pgsql'
 }
 
 db_clear_search() {
@@ -946,9 +1017,10 @@ get_disk_db_pgsql() {
     fi
 
     # Raw query
+
     raq_query=$($sql "SELECT pg_database_size('$database');")
-    raw_size=$(echo raq_query | grep -v "-" | grep -v 'row' | sed -e "/^$/d"|\
-        awk '{print $1}')
+    raw_size=$(echo "$raq_query" | grep -v "-" | grep -v 'row' |\
+        sed -e "/^$/d" |grep -v "pg_database_size" | awk '{print $1}')
 
     # Checking null output (this means error btw)
     if [ -z "$raw_size" ]; then
@@ -956,7 +1028,7 @@ get_disk_db_pgsql() {
     fi
 
     # Converting to MB
-    size=$(expr $raw_size \ 1048576)
+    size=$(expr $raw_size / 1048576)
 
     # Rounding zero size
     if [ "$size" -eq '0' ]; then

+ 9 - 0
func/shared_func.sh

@@ -1364,3 +1364,12 @@ get_config_value() {
     # Print value
     echo "$value"
 }
+
+is_backup_enabled() {
+    backups=$(grep "BACKUPS='" $V_USERS/$user/user.conf |cut -f 2 -d \')
+    if [ -z "$backups" ] || [[ "$backups" -le '0' ]]; then
+        echo "Error: User backups are disabled"
+        log_event 'debug' "$E_BACKUP_DISABLED $V_EVENT"
+        exit $E_BACKUP_DISABLED
+    fi
+}