Thứ năm, 18/04/2013 | 00:00 GMT+7

Cách tạo bản backup Off-Site cho trang web của bạn với Rsync trên Centos 6


Giới thiệu

Bài viết này cung cấp một cách nhanh chóng để backup những thứ phổ biến nhất trong một kịch bản lưu trữ web điển hình: file trang web và dữ liệu database . Ta sẽ cài đặt một bản backup đầy đủ hàng ngày cho một folder trang web và sao chép dữ liệu này vào một server từ xa (điều này cũng có thể hoạt động đối với một VPS khác). Ta cũng sẽ cài đặt một ví dụ rsync để chỉ sao chép các thay đổi gia tăng. Cuối cùng, ta sẽ cài đặt backup database MySQL. Các thủ tục được mô tả sử dụng một số lệnh Bash đơn giản, rsync và cron để lập lịch backup . Ví dụ về dữ liệu, ta có thể cài đặt Wordpress theo hướng dẫn này . Nó sẽ đặt Wordpress trong folder / var / www / wordpress và database MySQL wordpress và bây giờ ta muốn backup tất cả dữ liệu.

DigitalOcean cung cấp Ảnh chụp nhanh và Backup , để xử lý các bản backup và ảnh chụp nhanh rất tốt. Ngoài ra còn có các giải pháp backup dưới dạng dịch vụ tuyệt vời hoạt động với cấu hình tối thiểu. Nhưng đôi khi ta muốn sử dụng một server dự phòng khác hoặc có thể là một server nội bộ và ta muốn một cách nhanh chóng để kéo dữ liệu từ web server trở lại server của bạn . Trong trường hợp đó, những lời khuyên này có thể hữu ích.

Có hai cách để thực hiện backup : backup gia tăng và backup toàn bộ. Bản backup đầy đủ sẽ sao chép tất cả dữ liệu, trong khi ảnh chụp nhanh chỉ xử lý các thay đổi kể từ lần cập nhật cuối cùng.

Backup đầy đủ

Backup đầy đủ thường thực hiện những việc sau:

  • Tạo repository tất cả các file trong một folder
  • Sao chép repository kết quả vào một server từ xa.

Như đã lưu ý, dữ liệu của ta sẽ nằm trong folder / var / www / wordpress. Ta sẽ chỉ định một vị trí folder backup .

mkdir -p /backup/wordpress

Lệnh trên sẽ tạo một folder / backup và một folder / backup / wordpress, nếu chúng không tồn tại. Để tạo một bản chụp toàn bộ dữ liệu của ta , ta sử dụng công cụ linux có tên là tar.

tar -czf /backup/wordpress/initial_backup.tar.gz
/var/www/wordpress

Tar sẽ c reate ag z ip lưu trữ trong một f ile initial_backup.tar.gz . Ta có thể thêm một cờ v (vì vậy ta nhận được tar -czvf ) nếu ta muốn có một kết quả dài dòng (danh sách các tên file ). Ta đặt tên file là initial_backup.tar.gz để ta biết rằng đây là bản backup ban đầu, nó được lưu trữ bằng tar và iz được nén ở định dạng gzip. Tar sẽ sử dụng bất kỳ đối số nào ta cung cấp làm nguồn, trong trường hợp của ta , nó sẽ backup folder / var / www / wordpress . Ta có thể chuyển hai hoặc nhiều đối số, cho dù chúng là file hay folder : tức là.

tar -czf /backup/cms_systems_backup.tar.gz /var/www/wordpress
/var/www/drupal /var/www/joomla

Lệnh cuối cùng sẽ backup tất cả các hệ thống cms đã cài đặt của ta .

Bây giờ, đối với các bản backup trong tương lai, ta có thể cần thêm ngày khi bản backup được thực hiện:

tar -czf /backup/wordpress/wordpress-`date '+%m%d%y'`.tar.gz
/var/www/wordpress

Hãy xem những gì ta có bây giờ:

[root@Backup ~]# ls -l /backup/wordpress/
total 9760
-rw-r--r-- 1 root root 4995743 Apr 17 12:16 initial_backup.tar.gz
-rw-r--r-- 1 root root 4995743 Apr 17 12:25 wordpress-041713.tar.gz
[root@Backup ~]#

Ta có hai file , một file tên là initial_backup, một file có tên là wordpress-041713 (vào ngày 17 tháng 4 năm 2013, thời điểm viết bài này). Bây giờ, để lập lịch trình này hàng ngày, ta cần tạo một mục crontab. Crontab là một bộ lập lịch tác vụ linux: ta cho nó biết khi nào cần làm điều gì đó và tác vụ thực sự phải làm. Dù sao, ta mở editor crontab:

EDITOR=nano crontab -e

Nó sẽ mở một file crontab trong một editor . Theo mặc định, hình ảnh DO CentOS bao gồm vim làm editor , yêu cầu một chút cài đặt , vì vậy ta đã sử dụng editor đơn giản hơn cho mục đích này, được gọi là editor nano. Ta có thể đã sử dụng editor mặc định với:

crontab -e

Bây giờ ta cần yêu cầu cron backup , chẳng hạn như mỗi ngày vào lúc 3h30 sáng, khi hy vọng không có nhiều lưu lượng truy cập. Ta cũng sẽ thông báo cho nó để gửi email cho ta bất kỳ phát hiện nào. Ta đưa nội dung này vào crontab:

MAILTO=email@example.com
30 3 * * * /bin/tar -czf /backup/wordpress/wordpress-`date
+\%m\%d\%y`.tar.gz /var/www/wordpress

Ta lưu file bằng CTRL-X và xác nhận bằng Y và Enter. Lệnh trên sẽ yêu cầu linux lặp lại lệnh của ta mỗi ngày vào lúc 3:30. Ta cũng yêu cầu cron gửi email cho ta kết quả. Bạn sẽ nhận được thông báo: / bin / tar: Xóa đầu `/ 'khỏi tên thành viên , như một dấu hiệu cho thấy mọi thứ đã trôi qua. Trong trường hợp có sai sót, tin nhắn sẽ có thông tin chi tiết để ta có thể sửa lỗi này. Vì vậy, một bản backup hàng ngày đã sẵn sàng và hoạt động.

Sao chép các bản backup sang một server từ xa khác

Để sao chép các bản backup sang một server từ xa khác, ta sẽ sử dụng scp-secure copy. Đầu tiên, ta cần tạo SSH key :

ssh-keygen

Bây giờ ta có thể để trống passphrase (password bảo vệ) và sử dụng file khóa /root/.ssh/id_rsa_backup (hoặc /home/username/.ssh/id_rsa_backup nếu ta không chạy dưới dạng root). Bây giờ ta có thể kiểm tra phần public key :

cat .ssh/id_rsa_backup.pub

Ta cần sao chép phần công khai này của SSH key vào server từ xa, vào một file ủy quyền. Tôi giả sử ta đã có một server từ xa có tên backup.example.com và một bản backup của user . Đây có thể là một VPS DigitalOcean mới được tạo trống ( server ), nhưng user phải được tạo trước. Ta sẽ chỉ làm phần này một lần.

scp .ssh/id_rsa_backup.pub
backup@backup.example.com:/home/backup/backup_key.pub

Ta sẽ được yêu cầu nhập password của user backup . Ta đã sao chép file , bây giờ hãy thêm file đó vào vị trí cần thiết, trong các khóa ủy quyền. Tôi không thể cho rằng user này đã cài đặt file và folder , vì vậy hãy kiểm tra thông tin đó:

ssh backup@backup.example.com "mkdir -p /home/backup/.ssh"
ssh backup@backup.example.com "chmod 700 /home/backup/.ssh"
ssh backup@backup.example.com "touch /home/backup/.ssh/authorized_keys"
ssh backup@backup.example.com "chmod 600 /home/backup/.ssh/authorized_keys"
ssh backup@backup.example.com "mkdir -p /home/backup/backups"

Một vài lệnh ở trên đã tạo một folder để SSH làm việc, nếu nó không tồn tại, và cả file ủy quyền_cũng, cần phải có để backup hoạt động. Ta cũng đã tạo một folder backup để lưu trữ các file của ta . Bây giờ những gì còn lại là sao chép public key của ta vào file đó.

ssh backup@backup.example.com "cat /home/backup/backup_key.pub >>
/home/backup/.ssh/authorized_keys"

Bây giờ ta có thể sử dụng khóa này để sao chép nội dung trong tương lai.

Bây giờ, hãy sao chép file backup ở đó:

scp -i .ssh/id_rsa_backup
/backup/wordpress/wordpress-041713.tar.gz
backup@backup.example.com:/home/backup/backups

Nếu cài đặt khóa của ta đúng, file sẽ được sao chép và ta sẽ không bị yêu cầu nhập password . Ta có thể kiểm tra xem file có thực sự ở đó không:

ssh backup@backup.example.com "ls -l /home/backup/backups"

Ok, bây giờ ta cũng có thể lên lịch hành động này cho crontab. Khởi động lại trình soạn thảo crontab:

EDITOR=nano crontab -e

Bây giờ ta sẽ thay đổi dòng backup của bạn : ta muốn thêm thông tin để sao chép repository backup khi nó được tạo. Vì vậy, ta thêm lệnh mới để nó trông giống như sau:

30 3 * * * /bin/tar -czf /backup/wordpress/wordpress-`date
+\%m\%d\%y`.tar.gz /var/www/wordpress;/usr/bin/scp -i
/root/.ssh/id_rsa_backup /backup/wordpress/wordpress-`date
+\%m\%d\%y`.tar.gz
backup@backup.example.com:/home/backup/backups

Lưu ý: đây không phải là cách thông thường để thực hiện, tốt hơn là bạn nên cài đặt một tập lệnh thực hiện tất cả các việc và sau đó lên lịch cho tập lệnh. Nhưng để cho ngắn gọn của bài viết này, ta sẽ sử dụng hình thức đó.

Backup gia tăng

Nhưng nếu ta có phần mềm backup của riêng mình ở một server khác thì sao? Ta chỉ muốn đồng bộ hóa dữ liệu và sau đó để server khác thực hiện công việc backup . Ngoài ra, ta muốn bảo quản tem file . Sau đó, ta sử dụng rsync . Trường hợp sử dụng ở đây là ta chỉ muốn sao chép tăng dần mọi thứ từ / var / www / wordpress sang server từ xa, lần này vào folder / home / backup / snapshots / wordpress . Đây là một lệnh đơn giản để thực hiện tất cả điều đó:

ssh backup@backup.example.com "mkdir -p /home/backup/sync"
rsync -avz --delete -e "ssh -i /root/.ssh/id_rsa_backup"
/var/www/wordpress backup@backup.example.com:/home/backup/sync

Dòng đầu tiên tạo một folder ảnh chụp nhanh và dòng thứ hai sao chép các file đã thay đổi . Điều đó nghĩa là các file đã được sửa đổi, được tạo mới hoặc bị xóa. Ta cũng có thể lên lịch bằng cron:

EDITOR=nano crontab -e

Dòng crontab sẽ trông như thế này:

30 3 * * * /usr/bin/rsync -avz --delete -e "ssh -i
/root/.ssh/id_rsa_backup" /var/www/wordpress
backup@backup.example.com:/home/backup/sync

Như vậy, server từ xa của ta sẽ luôn có một bản sao dữ liệu mới được đồng bộ hóa và ta có thể thực hiện backup ở đó.

Database backup

Ta cũng có thể backup database của bạn . Đầu tiên, ta muốn kết xuất dữ liệu. Nếu ta làm theo hướng dẫn cài đặt wordpress, ta cũng có một database wordpress , được user wordpressuser truy cập bằng mật khẩu password . Ta có thể thực hiện kết xuất ban đầu như thế này:

mkdir /backup/mysql
mysqldump < wordpress -u wordpressuser -ppassword | gzip >
/backup/mysql/initial.sql.gz

Lệnh này đã tạo một file SQL gziped ban đầu.sql.gz. Để làm điều đó hàng ngày, ta có thể lên lịch bằng cron, giống như trước đây. Dòng cron kết quả của ta sẽ trông như thế này:

0 4 * * * /usr/bin/mysqldump < wordpress -u wordpressuser
-ppassword | /bin/gzip > /backup/mysql/mysql--`date +\%m\%d\%y`.sql.gz

Bây giờ ta cũng có thể kết hợp nó với scp hoặc rsync để sao chép nó từ xa.

0 4 * * * /usr/bin/mysqldump < wordpress -u wordpressuser
-ppassword | /bin/gzip > /backup/mysql/mysql-`date +\%m\%d\%y`.sql.gz;
/usr/bin/scp -i /root/.ssh/id_rsa_backup /backup/mysql/mysql-`date
+\%m\%d\%y`.sql.gz  backup@backup.example.com:/home/backup/

Với cài đặt này, ta có một bản backup cơ bản của dữ liệu được cài đặt cho trường hợp khẩn cấp.


Tags:

Các tin trước

Cách cài đặt và chạy ứng dụng Node.js trên Centos 6.4 64bit 2013-04-15
Cách cài đặt Squid Proxy trên CentOS 6 2013-04-04
Cách cài đặt Nagios trên CentOS 6 2013-03-29
Cách cài đặt OpenX trên CentOS 6 2013-03-29
Cách cài đặt PowerDNS trên CentOS 6.3 x64 2013-03-18
Cách cài đặt iRedMail trên CentOS 6.5 x64 2013-03-18
Cách cài đặt VirtualBox trên CentOS 6.3 x64 2013-03-17
Cách thiết lập NFS Mount trên CentOS 6 2012-09-18
Cách thêm swap trên CentOS 6 2012-08-17
Cách cài đặt Ruby on Rails trên CentOS 6 với RVM 2012-07-02