Computer >> Hướng Dẫn Máy Tính >  >> Điện Thoại Thông Minh >> Linux

Tạo bản sao lưu tự động trên Linux/Unix

Hướng dẫn này sẽ đưa bạn từng bước tạo bản sao lưu tự động trên Linux (và hầu hết hệ điều hành *nix).

"Một chút phòng ngừa trị hơn chữa trị" - câu nói cũ này trong máy tính gọi là sao lưu. Khi vận hành hạ tầng IT sản xuất, cần đạt thời gian hoạt động gần 100%. Dù có nhiều cách củng cố hạ tầng, không thể làm cho nó không bao giờ lỗi. Vì vậy cần kế hoạch B.

Máy chủ gồm ba lớp: phần cứng, hệ điều hành & ứng dụng, và dữ liệu. Nếu phần cứng hỏng, dễ dàng thay máy mới. Cài lại OS và ứng dụng cũng đơn giản. Phần khó thay thế nhất là dữ liệu và cấu hình ứng dụng. Nếu lỗi, đây là phần không thể khôi phục. Do đó phải sao lưu dữ liệu định kỳ, dễ dàng truy xuất khi khẩn cấp.

Tôi sẽ hướng dẫn viết script sao lưu hàng ngày tự động. Ví dụ dùng máy chủ chạy Apache, MySQL, và thư mục dữ liệu trên phân vùng /home. Cũng sao lưu log truy cập Apache hôm trước vào thư mục riêng. Trước tiên tạo thư mục chứa bản sao lưu. Tôi tạo thư mục BACKUP trên phân vùng /opt. Tổ chức sao lưu theo cấu trúc /opt/BACKUP/YEAR/MONTH/DATE/. Ví dụ ngày 11/8/2008 lưu vào /opt/BACKUP/2008/08/11/. Tạo thư mục (chạy với quyền root):

# mkdir -p /opt/backup/DATA/2008
# cd /opt/backup/DATA/2008
# mkdir 01 02 03 04 05 06 07 08 09 10 11 12
# cd /opt/backup/DATA/
# cp -r 2008 2009
# cd /opt/backup/
# cp -r DATA LOG

Xem ghi chú dưới trước khi chạy lệnh cuối.

# chown -R calvin.calvin /opt/backup

Giờ có hai tập thư mục sao lưu: dữ liệu và log. Lưu ý: Tôi dùng user calvin trong bài, hãy thay bằng tên user của bạn.


#####################################################
# CODE BẮT ĐẦU TẠI ĐÂY
#####################################################

#!/bin/bash

# SAO LƯU DỮ LIỆU MÁY CHỦ V1.0

#########################
# CẤU HÌNH SAO LƯU
#########################

# Cấu hình năm, tháng, ngày
YEAR=`date +"%Y"` # 2008
MONTH=`date +"%m"` # 11
DAY=`date +"%d"` # 14
YESTERDAY=`date --date="yesterday" +%Y-%m-%d` # 2008-11-13
YESTERDAY_DATE=`date --date=yesterday +%d` # 13
YESTERDAY_MONTH=`date --date=yesterday +%m` # 11
YESTERDAY_YEAR=`date --date=yesterday +%Y` # 2008
TODAY=`date +%Y-%m-%d` # 2008-11-14
TODAY_DATE=`date +%d` # 14

# Thư mục sao lưu

DATA_BACKUP_PARENT_DIR=/opt/backup/DATA/ # <-- Thay bằng thư mục sao lưu dữ liệu của bạn
LOG_BACKUP_PARENT_DIR=/opt/backup/LOG/ # <-- Thay bằng thư mục sao lưu log của bạn

# Thư mục gốc tài liệu Apache
APACHE_DOCROOT=/var/www/html/

# Cấu hình MySQL
DB_IP="localhost" # <-- Thay bằng IP máy chủ database
DB_USER="calvin" # <-- Thay bằng user database
DB_PASS="calvin_password" # <-- Thay bằng mật khẩu database
DB_NAME="clientlist" # <-- Thay bằng tên database

# Thư mục log Apache
APACHE_LOG_DIR="/var/log/httpd/" # <-- Thay bằng đường dẫn log của bạn

# Thư mục file ứng dụng
APP_FILES="/home/calvin/application_files/" # <-- Thay bằng đường dẫn thư mục dữ liệu

# Thư mục cấu hình
CONFIG_DIR="/etc/" # <-- Thay bằng đường dẫn thư mục dữ liệu

# Địa chỉ email báo cáo
EMAIL_ID="you@youremailid.com" # <-- Thay bằng email của bạn

#####################################################
# SAO LƯU DỮ LIỆU
#####################################################

# Tạo và vào thư mục sao lưu
cd $DATA_BACKUP_PARENT_DIR/$YEAR/$MONTH
mkdir $DAY
cd $DAY

# Sao lưu database
mysqldump -h ${DB_IP} -u ${DB_USER} -p${DB_PASS} ${DB_NAME} > ${DB_NAME}.db
tar -zcvf ${DB_NAME}.tar.gz ${DB_NAME}.db
rm -f ${DB_NAME}.db

# Sao lưu /etc
tar -zcf etc.tar.gz /etc

# Sao lưu ứng dụng
tar -zcf Apache_Doc_Root.tar.gz ${APACHE_DOCROOT}
tar -zcf App_Files.tar.gz ${APP_FILES}

#####################################################
# SAO LƯU LOG
#####################################################

# Tạo và vào thư mục sao lưu log
cd $LOG_BACKUP_PARENT_DIR/$YESTERDAY_YEAR/$YESTERDAY_MONTH
mkdir $YESTERDAY_DATE
cd $YESTERDAY_DATE

# Sao lưu log HTTPD
for i in ${APACHE_LOG_DIR}/access_log.${YESTERDAY}*; do cp $i .; done
for i in access_log.${YESTERDAY}*; do gzip $i; done

#####################################################
# GỬI THÔNG BÁO QUA EMAIL
#####################################################

# Thông báo email
du -shc $DATA_BACKUP_PARENT_DIR/$YEAR/$MONTH/$DAY/* | mail -s "Backup for ${HOSTNAME}::DATA done :)" ${EMAIL_ID}
du -shc $LOG_BACKUP_PARENT_DIR/$YESTERDAY_YEAR/$YESTERDAY_MONTH/$YESTERDAY_DATE/* | mail -s "Backup for ${HOSTNAME}::LOG done :)" ${EMAIL_ID}

#####################################################
# KẾT THÚC CODE
#####################################################

Lưu script tại ví dụ /home/calvin/scripts/backup.sh. Cấp quyền thực thi:

# chmod +x /home/calvin/scripts/backup.sh

Chạy script:

# /home/calvin/scripts/backup.sh

Có thể thêm vào cron job để chạy tự động hàng ngày. Ví dụ chạy lúc 4 giờ sáng:

# crontab -e

Thêm dòng:

0 4 * * * /home/calvin/scripts/backup.sh > /dev/null

Xong! Máy chủ sẽ tự động sao lưu dữ liệu, database, cấu hình, file ứng dụng, log vào /opt/backup hàng ngày lúc 4 sáng. Bước tiếp hay là mã hóa chúng :)