Skip to content

Instantly share code, notes, and snippets.

@vncloudsco
Created December 7, 2018 09:02
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vncloudsco/c6ea3b76d95f7b784b6595a87ad8b7bb to your computer and use it in GitHub Desktop.
Save vncloudsco/c6ea3b76d95f7b784b6595a87ad8b7bb to your computer and use it in GitHub Desktop.
SERVER_NAME=Backup_Vouu # thư mục sẽ lưu trữ dữ liệu
TIMESTAMP=$(date +"%F")
BACKUP_DIR="/root/backup/$TIMESTAMP"
MYSQL_USER="user"
MYSQL_PASSWORD="pass"
MYSQL=/usr/bin/mysql
MYSQLDUMP=/usr/bin/mysqldump
SECONDS=0
mkdir -p "$BACKUP_DIR/mysql"
databases=`$MYSQL --user=$MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema|mysql)"`
echo "Starting Backup Database";
for db in $databases; do
$MYSQLDUMP --force --opt --user=$MYSQL_USER -p$MYSQL_PASSWORD --databases $db | gzip > "$BACKUP_DIR/mysql/$db.sql.gz"
done
echo "Finished";
echo '';
echo "Starting Backup Website";
# Loop through /home directory
for D in /var/www/*; do
if [ -d "${D}" ]; then #If a directory
domain=${D##*/} # Domain name
echo "- "$domain;
zip -r $BACKUP_DIR/$domain.zip /var/www/$domain/ -q -x home/$domain/wp-content/cache/**\* # Không backup cache của website
fi
done
# thay /var/www/ thành thư mục chứa dữ liệu cần backup
echo "Finished";
echo '';
echo "Starting Backup Nginx Configuration";
cp -r /etc/httpd/ $BACKUP_DIR/httpd/
cp -r /var/log $BACKUP_DIR/log
rm -rf /var/log/*
echo "Finished";
echo '';
size=$(du -sh $BACKUP_DIR | awk '{ print $1}')
echo "Starting Uploading Backup";
rclone cp $BACKUP_DIR "backupauto:$SERVER_NAME/$TIMESTAMP" >> /var/log/rclone.log 2>&1 # backup lên google drive. Thay backupauto thành remote name
rclone move $BACKUP_DIR "ondrive:$SERVER_NAME/$TIMESTAMP" >> /var/log/rclone.log 2>&1 # backup lên ondrive. Thay ondrive thành remote name
# Clean up
rm -rf $BACKUP_DIR
rclone -q --min-age 365d delete "backupauto:$SERVER_NAME" # xóa bản backup cũ quá 365 ngày
rclone -q --min-age 365d rmdirs "backupauto:$SERVER_NAME" # xóa bản thư mục backup cũ quá 365 ngày
echo "Finished";
echo '';
duration=$SECONDS
echo "Total $size, $(($duration / 60)) minutes and $(($duration % 60)) seconds elapsed."
@vncloudsco
Copy link
Author

đây là code cho các hệ thống lớn nhiều vps các bạn không mất công để đi đặt từng server name mà thay vào đó nó sẽ dùng ip làm server name cho các bạn dễ quản lý

SERVER_NAME="$(ifconfig | grep broadcast | awk {'print $2'})"
TIMESTAMP=$(date +"%F")
BACKUP_DIR="/root/backup/$TIMESTAMP"
MYSQL_USER="user"
MYSQL_PASSWORD="pass"
MYSQL=/usr/bin/mysql
MYSQLDUMP=/usr/bin/mysqldump
SECONDS=0

mkdir -p "$BACKUP_DIR/mysql"
databases=`$MYSQL --user=$MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema|mysql)"`

echo "Starting Backup Database";

for db in $databases; do
    $MYSQLDUMP --force --opt --user=$MYSQL_USER -p$MYSQL_PASSWORD --databases $db | gzip > "$BACKUP_DIR/mysql/$db.sql.gz"
done
echo "Finished";
echo '';

echo "Starting Backup Website";
# Loop through /home directory
for D in /var/www/*; do
    if [ -d "${D}" ]; then #If a directory
        domain=${D##*/} # Domain name
        echo "- "$domain;
        zip -r $BACKUP_DIR/$domain.zip /var/www/$domain/ -q -x home/$domain/wp-content/cache/**\* # Không backup cache của website
    fi
done
# thay /var/www/ thành thư mục chứa dữ liệu cần backup 
echo "Finished";
echo '';

echo "Starting Backup server Configuration";
# thay /etc/httpd thành thư mục của bạn
cp -r /etc/httpd/ $BACKUP_DIR/httpd/
cp -r /var/log $BACKUP_DIR/log
rm -rf /var/log/*
echo "Finished";
echo '';

size=$(du -sh $BACKUP_DIR | awk '{ print $1}')

echo "Starting Uploading Backup";
rclone cp $BACKUP_DIR "backupauto:$SERVER_NAME/$TIMESTAMP" >> /var/log/rclone.log 2>&1 # backup lên google drive. Thay backupauto thành remote name
rclone move $BACKUP_DIR "ondrive:$SERVER_NAME/$TIMESTAMP" >> /var/log/rclone.log 2>&1  # backup lên ondrive.  Thay ondrive thành remote name
# Clean up
rm -rf $BACKUP_DIR
rclone -q --min-age 365d delete "backupauto:$SERVER_NAME" # xóa bản backup cũ quá 365 ngày
rclone -q --min-age 365d rmdirs "backupauto:$SERVER_NAME" # xóa bản thư mục backup cũ quá 365 ngày
echo "Finished";
echo '';

duration=$SECONDS
echo "Total $size, $(($duration / 60)) minutes and $(($duration % 60)) seconds elapsed."

@vncloudsco
Copy link
Author

vncloudsco commented Dec 9, 2018

SERVER_NAME="$(ifconfig | grep broadcast | awk {'print $2'})" đoạn này sẽ sửa thành như sau cho trường hợp vps có nhiều IP
=>>>
SERVER_NAME="$(ifconfig | grep broadcast | awk {'print $2'} | sed -n '1')" # muti IP

@vncloudsco
Copy link
Author

ba lệnh bên dưới có tác dụng như nhau khi các bạn muốn lấy 1 IP trong server nhiều ip

SERVER_NAME="$(ifconfig | grep broadcast | awk {'print $2'} | head -1)"
SERVER_NAME="$(ifconfig | grep broadcast | awk {'print $2'} | awk '{if(NR==1) print $0}')"
SERVER_NAME="$(ifconfig | grep broadcast | awk {'print $2'} | sed -n 1p)"

@minhpt0903
Copy link

Thank you so much!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment