오브젝트 스토리지를 이용한 데이터 백업 방법
S3cmd를 이용하여 카페24 클라우드 오브젝트 스토리지로 데이터(db 포함) 백업을 설정합니다. 해당 스크립트는 OS(Centos/ubuntu/Rocky/Almalinux) 구분없이 적용 가능합니다.
Last updated
#### 매뉴얼에선 /dev/vda1 파티션의 /home/backup 디렉토리로 백업을 진행.
#### /dev/vda1 파티션이 마운트된 / 디렉토리 사용량이 12%(약3.4G)로 여유 공간 확인
$ sudo df -Th
Filesystem Type Size Used Avail Use% Mounted on
udev devtmpfs 2.0G 0 2.0G 0% /dev
tmpfs tmpfs 394M 1.1M 393M 1% /run
/dev/vda1 ext4 29G 3.4G 26G 12% /
tmpfs tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/loop0 squashfs 92M 92M 0 100% /snap/lxd/24061
/dev/vda15 vfat 105M 6.1M 99M 6% /boot/efi
/dev/loop3 squashfs 50M 50M 0 100% /snap/snapd/18357
/dev/loop4 squashfs 64M 64M 0 100% /snap/core20/1828
/dev/loop5 squashfs 50M 50M 0 100% /snap/snapd/18596
/dev/loop2 squashfs 64M 64M 0 100% /snap/core20/1852
tmpfs tmpfs 394M 0 394M 0% /run/user/1000lfunction _Main() {
mkdir -p ${BACKUP_DIR}
mkdir -p ${LOG_DIR}
BACKUP_S_TIME=$(date)
echo ${BACKUP_S_TIME} >> ${START_LOG}
_Data_Backup #### DB 백업만 원할 경우 해당 라인 주석
_MySQL_Dump #### data 백업만 원할 경우 해당 라인 주석
_Upload_OBS
rm -rf ${BACKUP_DIR}/${BACKUP_D_TIME}_${HOST}
s3cmd rm ${OBS_BUCKET}/${KEEP_DATE}_${HOST}/ --recursive
BACKUP_E_TIME=$(date)
echo ${BACKUP_E_TIME} >> ${END_LOG}
}#### 원하시는 두 스크립트중 선택하여 아래 명령어를 통해 다운로드 받습니다.
#### 스크립트 소유자를 root 계정으로 다운로드합니다.
#### mysql root 패스워드가 스크립트에 포함된 백업 스크립트
$ curl -s https://kr.cafe24obs.com/cafe24-cloud-backup/include_mysql_pw_backup.sh |sudo tee /home/include_mysql_pw_backup.sh > /dev/null
#### mysql root 패스워드가 스크립트에 포함되지 않는 백업 스크립트
$ curl -s https://kr.cafe24obs.com/cafe24-cloud-backup/exclude_mysql_pw_backup.sh |sudo tee /home/exclude_mysql_pw_backup.sh > /dev/nullmysqldump: [Warning] Using a password on the command line interface can be insecure.$ sudo mysql_config_editor set --login-path=root --host=localhost --user=root --password --port=3306
Enter password: [root 패스워드 입력]
$ sudo ls -alt /root/.mylogin.cnf ####해당 파일이 생성되었는지 확인
-rw------- 1 root root 156 Mar 22 10:38 /root/.mylogin.cnf
$ sudo mysql --login-path=root ####"--login-path=root" 옵션으로 패스워드 없이 mysql 접근 가능한지 확인
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3958
Server version: 8.0.32-0ubuntu0.20.04.2 (Ubuntu)
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>#### 백업 스크립트 다운로드한 경로에서 vi 명령어를 실행하는게 아닐 경우 절대 경로로 입력 필요
$ sudo vi include_mysql_pw_backup.sh
$ sudo vi exclude_mysql_pw_backup.sh##### Custom Variable Zone ###################################################################################
BACKUP_D_TIME=$(date -I)
HOST=$(hostname)
MYSQL=$(which mysql)
MYSQLDUMP=$(which mysqldump)
MYSQL_PW="####"
DUMP_OPTION="--max-allowed-packet=1024M --add-drop-table --add-drop-database --single-transaction"
SRC_DIR="/home"
BACKUP_DIR="/home/backup"
RSYNC=$(which rsync)
S3CMD=$(which s3cmd)
OBS_BUCKET="###"
KEEP_DATE=$(date +%Y-%m-%d --date '7 days ago')##### Basic Constant Zone ####################################################################################
LOG_DIR="${BACKUP_DIR}/log"
LOG_FILE="${LOG_DIR}/rsync_backup.log"
OBS_LOG_FILE="${LOG_DIR}/obs_upload.log"
START_LOG="${LOG_DIR}/backup_start.log"
END_LOG="${LOG_DIR}/backup_end.log"#### 아래 명령어를 통해 crontab 파일을 엽니다.
$ sudo crontab -e
#### 스케줄 등록 방법
* * * * * command to be executed
- - - - -
| | | | |
| | | | +----- day of the week (0 - 6) (Sunday = 0)
| | | +------- month (1 - 12)
| | +--------- day of the month (1 - 31)
| +----------- hour (0 - 23)
+------------- minute (0 - 59)
#### 백업 스크립트 등록 예시
#### 매일 08시 45분에 /bin/bash /home/include_mysql_pw_backup.sh 스크립트를 실행함
45 8 * * * /bin/bash /home/include_mysql_pw_backup.sh$ sudo systemctl reload crond$ sudo systemctl restart cron#### 아래와 같이 실행 권한이 없음
$ sudo ls -alt exclude_mysql_pw_backup.sh
-rw-r--r--. 1 root root 2536 Apr 6 09:41 exclude_mysql_pw_backup.sh
#### user에 대하여 실행(x) 권한 부여
$ sudo chmod u+x exclude_mysql_pw_backup.sh
#### root 계정에 대하여 실행 권한 부여됨
$ sudo ls -alt exclude_mysql_pw_backup.sh
-rwxr--r--. 1 root root 2536 Apr 6 09:41 exclude_mysql_pw_backup.sh