Hướng dẫn tự động backup code và database sang một server/VPS khác

Sau đây mình sẽ hướng dẫn các bạn cách tự động backup hàng ngày code và database của VPS sang một VPS khác.
Bài viết cho VPS sử dụng hocpvs. vpssim, lazvps, hostvn…. để cài đặt PHP-FPM, Nginx và MariaDB nên folder chứa tất cả các website là home. Bạn thay đường dẫn cho phù hợp với VPS của mình nhé !

Về cách phục hồi lại VPS từ VPS backup, bạn có thể xem tại: Hướng dẫn phục hồi website và database trên VPS/Server từ VPS backup

Chuẩn bị VPS để lưu backup

Bạn có thể tận dụng các mã giảm giá của VULTR , Digitalocean, Ramnode, để mua cho mình một VPS mới để sử dụng làm VPS backup. VPS này không cần cấu hình cao mà chỉ cần dung lượng ổ cứng đáp ứng đủ nhu cầu của bạn là được.

Cài đặt rsync cho cả hai VPS chính và phụ

Chúng ta cần có phần mềm rsync ở cả hai VPS để quá trình backup có thể thực hiện được.

Chúng ta sẽ cài rsync ở cả hai VPS bằng lệnh:
Nếu VPS dùng Centos

yum -y install rsync

Nếu VPS dùng UBUNTU

apt-get install rsysnc -y

 Cho phép VPS đang sử dụng có thể đăng nhập vào VPS lưu backup mà không cần nhập mật khẩu

Với VPS lưu backup, bạn có thể chọn hệ điều hành ubuntu hoặc centos. Mình chọn centos và không cài đặt thêm một phần mềm nào khác ngoài CSF để chống hacker scan port và hack VPS này. Nếu VPS phụ cài đặt CSF thì Khi cài đặt CSF xong phải điền địa chỉ IP VPS chính vào csf.allow trong /etc/csf/ để VPS chính không bị csf chặn khi đăng nhập vào VPS phụ trong tất cả các trường hợp.

Bây giờ ta sẽ cho phép VPS chính có thể đăng nhập vào VPS phụ mà không cần nhập mật khẩu. Điều này giúp ta chuyển file backup sang vps phụ một cách tự động mà không cần login mỗi khi traffer file sang. Ta làm như sau:

Bạn đăng nhập vào VPS chính qua SSH và gõ lệnh sau:

   ssh-keygen -f ~/.ssh/id_rsa -q -P ""

Lệnh trên sẽ tạo một SSH-Key trên VPS chính. Sau đó ta sẽ copy ssh -key này sang VPS phụ

ssh-copy-id -i ~/.ssh/id_rsa.pub IP_VPS_PHỤ

Nhập mật khẩu tài khoản root VPS phụ để hoàn thành việc copy ssh-key .
bạn thay IP_VPS_Phụ bằng IP chứa file backup của bạn nhé !

Ví dụ: IP VPS phụ là 123.456.789 thì ta dùng lệnh như sau:

ssh-copy-id -i ~/.ssh/id_rsa.pub 123.456.789

Sau khi hoàn thành bước này, ta tiếp tục tới bước tiếp theo.

Tạo script backup Code và database

Chú ý:  Ta sẽ backup dữ liệu bên VPS chính sang VPS phụ vào thư mục backup trong home. Vì vậy trước khi backup, bên VPS phụ ta cần tạo foder backup trong home và chmod 777 cho folder này.

Ta dùng lệnh sau bên VPS phụ :

mkdir /home/backup

chmod -R 777 /home/backup

 

Trường hợp với MySQL engine là MyISAM

(xem thêm về MySQL engine và cách chọn engine tốt nhất cho website )
Với MySQL là MyISAM ta có thể sử dụng cách backup đơn giản dưới đây hoặc dùng cách backup dành cho innodb đều được

Với MyISAM bạn có thể backup database rât đơn giản bằng cách chuyển toàn bộ thư mục mdysql sang vps phụ là ta có thể backup xong database rồi. Khi cần restore, ta chỉ việc đưa folder mysql backup về vị trí cũ là xong.
Bây giờ ta sẽ tạo một script sử dụng rsync (một tiện ích có sẵn trên linux) để backup toàn bộ code, database, folder nginx (chứa các file vhost )

Tạo một file trên backup_VPS.sh với nội dung sau:

#!/bin/bash
rsync -avz -e ssh /home/ root@IP_VPS_PHỤ:/home/backup/home/
rsync -avz -e ssh /var/lib/mysql/ root@IP_VPS_PHỤ:/home/backup/mysql/
rsync -avz -e ssh /etc/nginx/ root@IP_VPS_PHỤ:/home/backup/nginx

Khi script backup_VPS chay, nó sẽ sao lưu thư mục home, mysql , và nginx sang bên VPS phụ với các folder tương đương trong home/backup bên VPS phụ. Nếu bạn muốn backup từng website cụ thể, bạn có thể chỉnh sửa đoạn mã trên theo ý mình.

Nếu bạn sử dụng cache cho website của mình, ta có thể thêm lệnh clear cache trước khi backup. Ta thêm lệnh sau vào dưới dòng #!/bin/bash trong backup_VPS.sh :

rm -r -f /home/hostingaz.info/public_html/wp-content/cache

Bạn thay đường dẫn folder cache cho chính xác với đường dẫn của bạn nhé !

Trường hợp với MysSQL engine là Innodb hay bất kỳ Engine khác

Trong trường hợp này, bạn sử dụng mysqldump để backup database sau đó rsync file backup sang VPS phu. Xem thêm về mysqldump tại Sao lưu và phục hồi database dung lượng lớn bằng mysqldump

Cách thực hiện như sau:
Tạo một folder mới trong thư mục chứa tất cả các website – home. Ta đặt tên folder này là backupmysql chẳng hạn.

mkdir /home/backupmysql

Bạn tạo một file tên là backup_VPS.sh với nội dung sau:

#!/bin/bash
mysqldump -u root -p[mat_khau_mysql] --all-databases | gzip > /home/backupmysql/`date +"%Y-%m-%d"`_dbbackup_.sql.gz
rsync -avz -e ssh /home/ root@IP_VPS_phụ:/home/backup/
rsync -avz -e ssh /etc/nginx/ root@IP_VPS_PHỤ:/home/backup/nginx

Mình giải thích đoạn mã trên nhé !

mysqldump -u root -p[mat_khau_mysql] --all-databases | gzip > /home/backupmysql/`date +"%Y-%m-%d"`_dbbackup_.sql.gz

chúng ta sẽ backup tất cả các database với người dùng là root, nén nó lại và đưa về folder backupmysql trong thư mục home. File backup này đặt tên theo ngày tháng backup.
Nếu bạn backup từng database thì dùng lệnh sau thay cho lệnh trên:

mysqldump -u root -p[mật_khẩu] tên_database | gzip > /home/backupmysql/`date +"%Y-%m-%d"`_ten_database_.sql.gz

ví dụ: ta backup tất cả các database với user là root, mật khẩu là 123456 ta được lệnh như sau:

mysqldump -u root -p123456 --all-databases | gzip > /home/backupmysql/`date +"%Y-%m-%d"`_dbbackup_.sql.gz

file backup sẽ có dạng: 2014-06-10_dbbackup_.sql.gz nếu lệnh tự động chạy trong ngày 10/6/2014.

Sau khi tạo xong file nén backup database, toàn bộ folder chứa các file nén này cùng với tất cả website sẽ rsync sang VPS phụ.

Cũng như trên ta có thể thêm tùy chọn delete cache bằng cách thêm mã sau vào dưới dòng #!/bin/bash trong file backup_VPS.sh

rm -r -f /home/hostingaz.info/public_html/wp-content/cache

thay đường dẫn đúng với đường dẫn cache website của bạn.

Upload file backup_VPS.sh lên VPS và Chmod

Ta upload backup_VPS lên thư mục home của VPS chính, sau đó sử dụng lệnh sau trong ssh để chmod file này

chmod +x /home/backup_VPS.sh

Tạo Cronjob để backup VPS tự động

Sau khi đã tạo xong backup_VPS.sh, upload lên vps, chmod xong. ta tạo một cronjob để nó run tự động theo thời gian định trước. Nếu bạn chưa có Cronjob nào đang chạy bạn có thể dùng lệnh dưới:

echo '30 3 * * *  /home/backup_VPS.sh' | crontab -

hoặc  bạn dùng lệnh dưới để thêm cronjob backup vào phía dưới dòng cronjob đang chạy:

crontab -l > file; echo '30 3 * * *  /home/backup_VPS.sh >/dev/null 2>&1' >> file; crontab file

Đoạn mã trên có nghĩa là hàng ngày vào lúc 3h30, script backup_VPS.sh sẽ tự động chạy để backup VPS cho bạn.

Kiểm tra cronjob đã add thành công chưa

Ta dùng lệnh sau để kiểm tra.

crontab -l

Nếu được kết quả như dưới là thành công

[root@hostingaz ~]# crontab -l
30 3 * * *  /home/backup_VPS.sh

Để chọn thời điểm backup hàng ngày, hàng tuần hay các mốc thời gian khác một cách dễ dàng, bạn có thể sử dụng tiện ích tạo lệnh cronjob bằng GUi trên hostingaz.info. Bạn vào Tạo CronJob đơn giản cho VPS/Server bằng GUI nha.

Tất cả file backup sẽ đặt trong foler home bên VPS phụ nhé!

About admin

Nhiều bạn chỉ biết mình là kỹ thuật viên chuyên ngành điện tử công nghiệp, điện tử dân dụng, nhưng đồng thời mình cũng là 1 Webmaster điều hành 1 số web và blog... Mình muốn đem những kiến thức mình biết để chia sẻ cho những anh em không biết, chưa biết... Hãy cùng nhau chia sẻ những gì chúng ta có, hãy chia sẻ thoải mái nếu nó không làm bạn nghèo đi nhé!

Theo dõi
Thông báo về
guest
0 Comments
Cũ nhất
Mới nhất Bình chọn nhiều nhất
Phản hồi nội tuyến
Xem tất cả các ý kiến