Computer >> คอมพิวเตอร์ >  >> สมาร์ทโฟน >> Linux

วิธีสร้างการสำรองข้อมูลอัตโนมัติสำหรับ Linux/Unix

คู่มือนี้จะนำคุณทีละขั้นตอนผ่านกระบวนการสร้างการสำรองข้อมูลอัตโนมัติใน Linux (และระบบปฏิบัติการ *nix ส่วนใหญ่)

"การต่อเวลาช่วยประหยัดเวลาได้เก้า" คำพูดเก่า ๆ ในโลกของคอมพิวเตอร์ เราเรียกตะเข็บนั้นเป็นข้อมูลสำรอง เมื่อใช้งานโครงสร้างพื้นฐานด้านไอทีสำหรับการผลิต เราต้องทำให้เซิร์ฟเวอร์และแอปพลิเคชันของเรามีเวลาทำงานเกือบร้อยเปอร์เซ็นต์มากที่สุด แม้ว่าจะมีหลายวิธีที่จะทำให้โครงสร้างพื้นฐานด้านไอทีแข็งแกร่ง แต่ก็เป็นไปไม่ได้ที่จะพิสูจน์ความล้มเหลวได้ ดังนั้นเราจึงทำแผน B.

เซิร์ฟเวอร์ประกอบด้วยเลเยอร์กว้างๆ สามชั้น – ฮาร์ดแวร์ ระบบปฏิบัติการและแอปพลิเคชัน และข้อมูล ในกรณีที่ฮาร์ดแวร์ขัดข้อง การเปลี่ยนเครื่องใหม่ทำได้ค่อนข้างง่าย การติดตั้งระบบปฏิบัติการและแอพพลิเคชั่นก็ค่อนข้างง่ายเช่นกัน ส่วนที่เปลี่ยนได้ยากคือข้อมูลและการกำหนดค่าที่แอปพลิเคชันของคุณใช้ ในกรณีที่เกิดความล้มเหลวเป็นส่วนที่ไม่สามารถเปลี่ยนได้ ดังนั้นเราจึงสำรองข้อมูลนั้นเป็นประจำ เราสำรองข้อมูลเพื่อให้เรียกค้นคืนได้ง่ายในกรณีฉุกเฉิน

ฉันจะแนะนำคุณตลอดการเขียนสคริปต์เพื่อสำรองข้อมูลอัตโนมัติรายวันบนระบบ Linux ของคุณ สำหรับแบบฝึกหัดนี้ ฉันจะใช้เซิร์ฟเวอร์ที่รันเว็บเซิร์ฟเวอร์ Apache, เซิร์ฟเวอร์ฐานข้อมูล MySQL และมีไดเร็กทอรีบน /home พาร์ติชันที่มีข้อมูลบางอย่างที่ต้องสำรอง นอกจากนี้ เราจะสำรองข้อมูลบันทึกการเข้าถึง Apache ของวันก่อนหน้าในไดเร็กทอรีสำรองแยกต่างหาก ขั้นแรก เราต้องสร้างไดเร็กทอรีที่ข้อมูลสำรองของเราจะอยู่ ในส่วนหนึ่งของแบบฝึกหัดนี้ ฉันได้สร้างไดเร็กทอรีชื่อ BACKUP บน /opt พาร์ทิชัน เราจะจัดระเบียบข้อมูลสำรองในไดเรกทอรีนี้เพื่อให้ข้อมูลสำรองในแต่ละวันอยู่ในไดเรกทอรีที่มีรูปแบบดังนี้ – /opt/BACKUP/YEAR/MONTH/DATE/ . ดังนั้นในวันที่ 11 สิงหาคม 2008 ข้อมูลสำรองจะเข้าสู่ /opt/BACKUP/2008/08/11/ . มาสร้างไดเร็กทอรีเหล่านี้กัน เรียกใช้ชุดคำสั่งต่อไปนี้เป็น 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 บันทึกข้อมูล

ดูหมายเหตุด้านล่างก่อนออกคำสั่งสุดท้ายนี้

# chown -R calvin.calvin /opt/backup

ตอนนี้เรามีไดเร็กทอรีสำรองสองชุด ชุดหนึ่งสำหรับข้อมูลและอีกชุดสำหรับไฟล์บันทึก ด้วยไดเร็กทอรีสำรองที่สร้างขึ้น ตอนนี้เราพร้อมที่จะเริ่มเขียนสคริปต์แล้ว หมายเหตุ: ฉันกำลังใช้ผู้ใช้ calvin ตลอดบทความนี้ โปรดแทนที่ คาลวิน ด้วยชื่อผู้ใช้ของคุณเอง


########################################### ##################
# รหัสเริ่มต้นที่นี่
######################### ##############################

#!/bin/bash

# การสำรองข้อมูลเซิร์ฟเวอร์ V1.0

############################
# การกำหนดค่าการสำรองข้อมูล
################ #############

#กำหนดค่าเดือน วันที่ และวัน
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=`วันที่ + %Y-%m-%d` # 2008-11-14
TODAY_DATE=`date +%d` # 14

# ไดเรกทอรีที่จะสำรองข้อมูลไปยัง

DATA_BACKUP_PARENT_DIR=/opt/backup/DATA/ # <-- เปลี่ยนไดเร็กทอรีการสำรองข้อมูลของคุณ
LOG_BACKUP_PARENT_DIR=/opt/backup/LOG/ # <-- เปลี่ยนไฟล์บันทึกสำรองของคุณ

# ไดเรกทอรีรากของเอกสาร Apache
APACHE_DOCROOT=/var/www/html/

# การกำหนดค่าฐานข้อมูล MySQL
DB_IP=”localhost” # <-- เปลี่ยนเป็น IP ของเซิร์ฟเวอร์ฐานข้อมูลของคุณ
DB_USER=”calvin” # <-- เปลี่ยนเป็นชื่อผู้ใช้ฐานข้อมูลของคุณ
DB_PASS=”calvin_password” # <-- เปลี่ยนเป็นรหัสผ่านฐานข้อมูลของคุณ
DB_NAME=”clientlist” # <-- เปลี่ยนเป็นชื่อฐานข้อมูลของคุณ

# Apache Log Dir
APACHE_LOG_DIR=”/var/log/httpd/” # <-- เปลี่ยนเป็นข้อมูลพาธของบันทึกของคุณ

# Application Files ' Dir
APP_FILES=”/home/calvin/application_files/” # <- เปลี่ยนเป็นพาธของไดเร็กทอรีข้อมูล

# Config Dir
CONFIG_DIR=”/etc/” # <-- เปลี่ยนเป็นไดเรกทอรีข้อมูลเส้นทาง

# ที่อยู่รายงานทางไปรษณีย์
EMAIL_ID=”[email protected]# <-- เปลี่ยนเป็น ID อีเมลของคุณ

#################################################### ###
# การสำรองข้อมูล
####################################### ###################

# สร้างและไปที่ไดเร็กทอรีสำรอง
cd $DATA_BACKUP_PARENT_DIR/$YEAR/$MONTH
mkdir $DAY
cd $DAY

# สำรองฐานข้อมูล
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

# /etc สำรอง
tar -zcf etc.tar.gz /etc

# การสำรองข้อมูลแอปพลิเคชัน
tar -zcf Apache_Doc_Root.tar.gz ${APACHE_DOCROOT}
tar -zcf App_Files.tar.gz ${APP_FILES}

#################################################### ###
# บันทึกการสำรองข้อมูล
#################################### ###################

# สร้างและไปที่ไดเร็กทอรีสำรอง
cd $LOG_BACKUP_PARENT_DIR/$YESTERDAY_YEAR/$YESTERDAY_MONTH
mkdir $YESTERDAY_DATE
cd $YESTERDAY_DATE

# สำรองข้อมูลบันทึก HTTPD
สำหรับฉันใน ${APACHE_LOG_DIR}/access_log.${YESTERDAY}*; ทำ cp $i.; เสร็จสิ้น
สำหรับฉันใน access_log.${YESTERDAY}*; ทำ gzip $i; เสร็จเรียบร้อย

#################################################### ###
# ส่งการแจ้งเตือนทางอีเมล
################################## ######################

# แจ้งเตือนทางเมล
du -shc $DATA_BACKUP_PARENT_DIR/$YEAR/$MONTH/$DAY/* | mail -s “สำรองข้อมูลสำหรับ ${HOSTNAME}::DATA done :)” ${EMAIL_ID}
du -shc $LOG_BACKUP_PARENT_DIR/$YESTERDAY_YEAR/$YESTERDAY_MONTH/$YESTERDAY_DATE/* | mail -s “สำรองข้อมูลสำหรับ ${HOSTNAME}::LOG done :)” ${EMAIL_ID}

#################################################### ###
# รหัสสิ้นสุดที่นี่
##################################### #####################

บันทึกสคริปต์นี้ในไดเร็กทอรี เช่น /home/calvin/scripts/backup.sh ให้สิทธิ์ปฏิบัติการกับไฟล์:

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

ตอนนี้คุณพร้อมแล้วที่จะไป เรียกใช้สคริปต์จากบรรทัดคำสั่งของคุณ:

# /home/calvin/scripts/backup.sh

คุณยังสามารถเลือกที่จะเพิ่มสคริปต์นี้เป็นงาน cron เพื่อให้ทำงานได้ทุกวันในเวลาที่คุณเลือก หากคุณต้องการเรียกใช้สคริปต์นี้เวลา 04.00 น. ทุกวัน ให้ทำดังต่อไปนี้:

# crontab -e

สร้างบรรทัดใหม่ในไฟล์ที่เปิดขึ้นและเพิ่มสิ่งต่อไปนี้:

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

ไปเลย เซิร์ฟเวอร์ของคุณจะสำรองข้อมูล ฐานข้อมูล ไฟล์การกำหนดค่า ไฟล์แอปพลิเคชัน และไฟล์บันทึกไปที่ /opt/backup ทุกวันเวลา 4:00 น. – สำรองข้อมูล Linux อัตโนมัติโดยสิ้นเชิง! ขั้นตอนต่อไปที่ดีคือการเข้ารหัส :)