Tự động sao lưu MySQL, tập tin và thư mục Web vào máy chủ FTP

Tác giả admin+, T.Ba 14, 2011, 06:13:20 CHIỀU

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 1 Khách đang xem chủ đề.

Tự động sao lưu MySQL, tập tin và thư mục Web vào máy chủ FTP


1. Giới thiệu.

Đây là một giải pháp sao lưu đơn giản cho những người chạy máy chủ web và máy chủ MySQL của riêng họ trên một máy chủ riêng chuyên dụng dedicated server hoặc VPS. Hầu hết các nhà cung cấp dịch vụ lưu trữ chuyên dụng cung cấp dịch vụ sao lưu bằng máy chủ NAS hoặc FTP. Các nhà cung cấp dịch vụ này sẽ nối bạn với mảng lưu trữ tập trung dự phòng của họ qua Vlan riêng.


Vì tôi quản lý vài máy chủ riêng chuyên dụng dedicated, đây là giải pháp tự động của riêng tôi. Nếu bạn chỉ muốn một tập lệnh shell script, hãy xem dưới đây, bạn chỉ cần cung cấp đầu vào thích hợp và nó sẽ tạo tập lệnh sao lưu FTP cho bạn.

2. Tạo bản sao lưu gia tăng incremental backups với tar

Bạn có thể tạo bản sao lưu qua băng tape. Tuy nhiên, đôi khi băng tape không phải là một lựa chọn. GNU tar cho phép bạn tạo các bản sao lưu gia tăng với tùy chọn -g. Ví dụ: lệnh sau sẽ tạo bản sao lưu gia tăng của các thư mục / var / www / html, / home và / etc:

Mã nguồn [Chọn]
# tar -g /var/log/tar-incremental.log -zcvf /backup/today.tar.gz /var/www/html /home /etc
Trong đó -g: Tạo / liệt kê / trích xuất bản sao lưu gia tăng định dạng GNU mới và lưu trữ thông tin vào tập tin /var/log/tar-incremental.log.

3. Tạo bản sao lưu cơ sở dữ liệu MySQL

mysqldumplà một chương trình máy khách client để kết xuất hoặc sao lưu cơ sở dữ liệu, bảng và dữ liệu của mysql. Ví dụ lệnh sau hiển thị danh sách các cơ sở dữ liệu:

Mã nguồn [Chọn]
$ mysql -u root -h localhost -p -Bse 'show databases'
Đầu ra ví dụ như sau:

Mã nguồn [Chọn]
Enter password:
brutelog
cake
faqs
mysql
phpads
snews
test
tmp
van
wp

Bây giờ bạn có thể sao lưu từng cơ sở dữ liệu bằng lệnh mysqldump:

Mã nguồn [Chọn]
$ mysqldump -u root -h localhost -pmypassword faqs | gzip -9> faqs-db.sql.gz
4. Một kế hoạch hệ thống sao lưu đơn giản

Ưu điểm chính của việc sử dụng sao lưu FTP hoặc NAS là bảo vệ khỏi mất dữ liệu. Bạn có thể sử dụng các giao thức khác nhau để sao lưu dữ liệu:

Mã nguồn [Chọn]
   1. FTP
   2. SSH
   3. RSYNC
   4. Các giải pháp thương mại khác

a. Tuy nhiên, tôi sẽ viết về giải pháp sao lưu FTP tại đây. Ý tưởng là như sau:

    - Tạo bản sao lưu đầy đủ vào mỗi tối chủ nhật, tức là sao lưu mọi thứ vào mỗi Chủ nhật
    - Chỉ sao lưu các tập tin đã được sửa đổi kể từ khi sao lưu toàn bộ (sao lưu gia tăng)
     
b. Đây là một chu kỳ sao lưu bảy ngày.
Thiết lập mẫu của chúng tôi

  Máy chủ của bạn ===> ftp/nas server
  IP: 202.54.1.10 ===> 208.111.2.5

c. Hãy để chúng ta giả định rằng chi tiết FTP server của bạn như sau:

    * IP máy chủ FTP: 208.111.2.5
    * Tên người dùng FTP:   Đăng nhập để xem liên kết
    * Mật khẩu FTP:   Đăng nhập để xem liên kết
    * Thư mục FTP: / home / nixcraft (hoặc /)

d. Bạn sẽ lưu trữ dữ liệu như sau:
=> / home /   Đăng nhập để xem liên kết full / mm-dd-yy / files - Sao lưu toàn bộ
=> / home /   Đăng nhập để xem liên kết tăng / mm-dd-yy / files - Sao lưu tăng dần

e. Tự động hóa các nhiệm vụ sao lưu với tar
Bây giờ bạn đã biết cách sao lưu các tập tin và cơ sở dữ liệu mysql bằng cách sử dụng các lệnh tar và mysqldump tương ứng. Đã đến lúc viết một kịch bản shell script sẽ tự động hóa toàn bộ thủ tục công việc này.

  1. Tập lệnh đầu tiên sẽ thu thập tất cả dữ liệu từ cả máy chủ cơ sở dữ liệu MySQL và từ hệ thống tập tin đến thư mục tạm thời được gọi / sao lưu bằng lệnh tar
  2. Tiếp theo, script sẽ đăng nhập vào máy chủ FTP và tạo cấu trúc thư mục như đã thảo luận ở trên
  3. Script sẽ kết xuất tất cả các tập tin từ /sao lưu sang máy chủ FTP
  4. Script sẽ xóa bản sao lưu tạm thời khỏi /sao lưu
  5. Script sẽ gửi cho bạn một thông báo email nếu sao lưu FTP không thành công vì bất kỳ lý do nào.

f. Bạn phải cài đặt lệnh sau:

    * Máy khách ftp ncftp
    * Lệnh mysqldump
    * Lệnh GNU tar

Đây là kịch bản shell script mẫu:

Mã nguồn [Chọn]
#!/bin/sh
# System + MySQL backup script
# Full backup day - Sun (rest of the day do incremental backup)
# Copyright (c) 2005-2006 vietnetwork.vn
# This script is licensed under GNU GPL version 2.0 or above
# ---------------------------------------------------------------------
### System Setup ###
DIRS="/home /etc /var/www"
BACKUP=/tmp/backup.$$
NOW=$(date +"%d-%m-%Y")
INCFILE="/root/tar-inc-backup.dat"
DAY=$(date +"%a")
FULLBACKUP="Sun"
### MySQL Setup ###
MUSER="admin"
MPASS="mysqladminpassword"
MHOST="localhost"
MYSQL="$(which mysql)"
MYSQLDUMP="$(which mysqldump)"
GZIP="$(which gzip)"
### FTP server Setup ###
FTPD="/home/vivek/incremental"
FTPU="vivek"
FTPP="ftppassword"
FTPS="208.111.11.2"
NCFTP="$(which ncftpput)"
### Other stuff ###
EMAILID="[email protected]"
### Start Backup for file system ###
[ ! -d $BACKUP ] && mkdir -p $BACKUP || :
### See if we want to make a full backup ###
if [ "$DAY" == "$FULLBACKUP" ]; then
FTPD="/home/vivek/full"
FILE="fs-full-$NOW.tar.gz"
tar -zcvf $BACKUP/$FILE $DIRS
else
i=$(date +"%Hh%Mm%Ss")
FILE="fs-i-$NOW-$i.tar.gz"
tar -g $INCFILE -zcvf $BACKUP/$FILE $DIRS
fi
### Start MySQL Backup ###
# Get all databases name
DBS="$($MYSQL -u $MUSER -h $MHOST -p$MPASS -Bse 'show databases')"
for db in $DBS
do
FILE=$BACKUP/mysql-$db.$NOW-$(date +"%T").gz
$MYSQLDUMP -u $MUSER -h $MHOST -p$MPASS $db | $GZIP -9 > $FILE
done
### Dump backup using FTP ###
#Start FTP backup using ncftp
ncftp -u"$FTPU" -p"$FTPP" $FTPS<
mkdir $FTPD
mkdir $FTPD/$NOW
cd $FTPD/$NOW
lcd $BACKUP
mput *
quit
EOF
### Find out if ftp backup failed or not ###
if [ "$?" == "0" ]; then
rm -f $BACKUP/*
else
T=/tmp/backup.fail
echo "Date: $(date)">$T
echo "Hostname: $(hostname)" >>$T
echo "Backup failed" >>$T
mail -s "BACKUP FAILED" "$EMAILID" <$T
rm -f $T
fi

g. Tạo lịch sẵn cron job
Chỉ tạo một lịch sẵn cron job theo yêu cẩu của bạn.

Mã nguồn [Chọn]
13 0 * * * /home/admin/bin/ftpbackup.sh >/dev/null 2>&1
h. Tạo tập lệnh sao lưu backup script qua FTP

Vì tôi quản lý nhiều máy chủ Linux riêng, đây là chương trình tạo tập lệnh sao lưu FTP của riêng tôi. Bạn chỉ cần cung cấp đầu vào thích hợp và nó sẽ tạo tập lệnh sao lưu FTP theo yêu cầu của bạn.

Lần sau tôi sẽ viết thêm về phương pháp này.