Chức năng: Tự backup Source code + Database và đẩy sang VPS thứ 2 theo định kì. Tại VPS thứ 2 chỉ cần 1 câu lệnh sẽ tự động Restore.
Chú ý: Demo được thực hiện trên VPS Centminmod.
Tạm gọi VPS chính là VPS A, VPS phụ nhận file backup là VPS B có IP là: 192.168.0.1
I. BASIC
Trên VPS A.
Cài đặt rsync.
yum install -y rsync
Gõ tiếp
ssh-keygen -t dsa
Tới bước: “Enter file in which to save the key (/root/.ssh/id_dsa):”
/root/.ssh/id_dsa_vps_a
Khi được hỏi
“Enter passphrase (empty for no passphrase):”
“Enter same passphrase again:”
Nhấn Enter
Copy Key vừa tạo sang VPS B bằng lệnh
scp /root/.ssh/id_dsa_vps_a.pub root@192.168.0.1:/root/
Tại VPS B
mkdir -p /root/.ssh/
touch -f /root/.ssh/authorized_keys
cat /root/id_dsa_vps_a.pub >> /root/.ssh/authorized_keys
chmod 644 /root/.ssh/authorized_keys
Tại VPS A
Đồng bộ hóa 2 thư mục /home/nginx/domains
rsync -aurzW -e "ssh -i /root/.ssh/id_dsa_vps_a" /home/nginx/domains root@192.168.0.1:/home/nginx/domains
Hẹn giờ đồng bộ hóa
Gõ
crontab -e
Nhập (tự chạy đồng bộ hóa lúc 2h30 hàng ngày)
30 2 * * * rsync -aurzW -e "ssh -i /root/.ssh/id_dsa_vps_a" /home/nginx/domains root@192.168.0.1:/home/nginx/domains
Lưu và thoát
Ctrl + X --> Y --> Enter
II. Advanced
Nhiệm vụ là Backup toàn bộ Source và Database của Tất cả website bên VPS A, Đẩy sang VPS B và sau đó VPS B tự động Restore.
Chú ý: Tất cả đều thực hiện trên VPS nginx cài Centminmod, nên nếu bạn cài Apache hoặc gì gì đó thì tùy chỉnh thêm nhé.
Trên VPS A
Tạo 1 file backup.sh trong /root/ với nội dung như sau:
#!/bin/bash
{
printf "subject:Backup for VPS My_IP\nfrom:info@websitecuaban.com\n\n"
echo "Deleting file Old Backups..."
rm -rf /var/backups
mkdir /var/backups/
chmod -R 777 /var/backups/
mkdir /var/backups/$(date +"%d-%m-%Y")/
mkdir /var/backups/$(date +"%d-%m-%Y")/websitecuaban.com/
echo "Starting backup database for websitecuaban.com..."
mysqldump --single-transaction --routines --triggers --add-drop-table --extended-insert -u usercuasql -h 127.0.0.1 -p'matkhau' tendatabase | gzip > /var/backups/$(date +"%d-%m-%Y")/websitecuaban.com/websitecuaban_$(date +"%d-%m-%Y")_database.sql.gz
echo "Starting backup files for websitecuaban.com..."
cd /home/nginx/domains/websitecuaban.com
zip -r /var/backups/$(date +"%d-%m-%Y")/websitecuaban.com/websitecuaban_$(date +"%d-%m-%Y")_source.zip public/ -q -x /public/wp-content/cache/**\*
echo "Starting backup database for All..."
passdata=`grep -oP "(?<=password=).*" ~/.my.cnf`
mysqldump -u root -p$passdata --all-databases | gzip > /var/backups/$(date +"%d-%m-%Y")/$(date +"%d-%m-%Y")_My_IP_database.sql.gz
echo "Starting Rsync to VPS Backup..."
rsync -aurzW -e "ssh -i /root/.ssh/id_dsa_vps_a" /usr/local/nginx/conf /var/backups/$(date +"%d-%m-%Y") root@192.168.0.1:/var/backups
} | /usr/sbin/sendmail "emailcuaban@gmail.com"
Bạn thay đổi phần màu đỏ cho phù hợp với VPS của bạn.
Trên VPS B
Tạo 1 file restore.sh trong /root/ với nội dung như sau:
#!/bin/bash
{
printf "subject:Restore for VPS\nfrom:info@websitecuaban.com\n\n"
echo "Starting Restore source for All..."
day=22-12-2015
cd /var/backups/$day
find . -name "*.zip" | grep -oP "(?<=.).*/" | while read filename; do mkdir "/var/backups/"$day$filename"log/"; done;
yes | cp -rf /var/backups/$day/* /home/nginx/domains/
yes | cp -rf /var/backups/conf/* /usr/local/nginx/conf/
cd /home/nginx/domains
find . -name "*.zip" | while read filename; do unzip -o -d "`dirname "$filename"`" "$filename"; done;
find . -name *source.zip -exec rm -rf {} \;
echo "Starting Restore database for All..."
gunzip *.sql.gz
passdata=`grep -oP "(?<=password=).*" ~/.my.cnf`
mysql -u root -p$passdata < *.sql
find . -name "*database.sql" -exec rm -rf {} \;
find . -name "*database.sql.gz" -exec rm -rf {} \;
service nginx restart
} | /usr/sbin/sendmail "emailcuaban@gmail.com"
Bạn thay đổi phần màu đỏ cho phù hợp với VPS của bạn.
Cấu hình Crontab cho chạy tự động, trong trường hợp VPS A có vấn đề là 1-2 phút sau mình đã có VPS B để dự phòng rồi.
Done!