셸 스 크 립 트 는 MySQL 데이터베이스 데 이 터 를 정기 적 으로 백업 하고 지정 한 시간 을 유지 합 니 다.

회사 에서 사용 하 는 MySQL 데이터 베 이 스 는 동료 들 이 한 번 의 소 란 스 러 운 조작 을 통 해 중요 한 설정 데 이 터 를 잘못 삭제 하고 복구 할 때마다 많은 시간 이 걸 리 기 때문에 셸 스 크 립 트 를 썼 습 니 다.corntab 와 결합 하여 매일 새벽 데이터 베 이 스 를 백업 하고 7 일 동안 보관 합 니 다.
같은 백업 스 크 립 트 는 생산 환경 MySQL 데이터베이스 정시 백업 에 도 사용 할 수 있 습 니 다.
환경:CentOS 7.5/MySQL 5.7

#!/bin/sh

#        
DB_USER="root"
DB_PWD="root"
DB_HOST="127.0.0.1"
DB_PORT="3306"

# MYSQL    
MYSQL_DIR="/home/mysql"
#         
BAK_DIR="/home/db_backup"
#      ,  20200902
DATE=`date +%Y%m%d`
#          
DEL_DAY=7

#        ,    
DATABASES=("apolloconfigdb" "apolloportaldb" "apolloconfigdb-uat" "frame-assistor" "frame-authorization" )

#       
mkdir $BAK_DIR/$DATE

echo "-------------------$(date +%F_%T) start ---------------" >>${BAK_DIR}/db_backup.log
for database in "${DATABASES[@]}"
do
  #       
  $MYSQL_DIR/bin/mysqldump --opt -u$DB_USER -p$DB_PWD -h$DB_HOST -P$DB_PORT ${database} > $BAK_DIR/$DATE/${database}.sql
done

echo "--- backup file created: $BAK_DIR/db_backup_$DATE.tar.gz" >>${BAK_DIR}/db_backup.log

#      sql     db_backup_yyyyMMdd.tar.gz
tar -czf $BAK_DIR/db_backup_$DATE.tar.gz $BAK_DIR/$DATE

#    ,             
rm -f $BAK_DIR/$DATE/*
rmdir $BAK_DIR/$DATE

#             
LIST=$(ls ${BAK_DIR}/db_backup_*)
#       ,           
SECONDS=$(date -d "$(date +%F) -${DEL_DAY} days" +%s)

for index in ${LIST}
do
  #          ,        ,    20200902
  timeString=$(echo ${index} | egrep -o "?[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]")
  if [ -n "$timeString" ]
  then
    indexDate=${timeString//./-}
    indexSecond=$( date -d ${indexDate} +%s )
    #          ,   7        
    if [ $(( $SECONDS- $indexSecond )) -gt 0 ]
    then
      rm -f $index
      echo "---- deleted old backup file : $index " >>${BAK_DIR}/db_backup.log
    fi
  fi
done

echo "-------------------$(date +%F_%T) end ---------------" >>${BAK_DIR}/db_backup.log
backupDB.sh 스 크 립 트 로 저장 한 후 스 크 립 트 검증 을 실행 합 니 다.BAK 보기DIR 백업 디 렉 터 리 의 dbbackup.log 는 백업 의 실행 상황 을 볼 수 있 습 니 다.
-------------------2020-09-02_21:33:01 start ---------------
--- backup file created: /home/db_backup/db_backup_20200902.tar.gz
-------------------2020-09-02_21:33:18 end ---------------
인증 에 문제 가 없 으 면 crontab-e 를 통 해 정시 작업 으로 설정 하여 실행 합 니 다.주의해 야 할 것 은 my sqldump 백업 이 실 행 될 때 시 계 를 잠 그 는 것 입 니 다.새벽 에 아무 도 데이터 베 이 스 를 조작 하지 않 을 때 백업 작업 을 수행 하 는 것 을 권장 합 니 다.

#     3   
0 3 * * * sh /home/backupDB.sh > /dev/null 2>&1 &
주의:
백업 시 잠 금 표를 원 하지 않 으 면 my sqldump 명령 에 인자--skip-lock-tables 를 추가 할 수 있 습 니 다.
위 스 크 립 트 에 백업 할 데이터 베 이 스 를 지정 하 였 습 니 다.모든 데이터 베 이 스 를 백업 하려 면 데이터 베 이 스 를 지정 하지 않 아 도 됩 니 다.my sqldump 명령 에 인자 인 all-databases 를 추가 하면 됩 니 다.
셸 스 크 립 트 가 MySQL 데이터베이스 데 이 터 를 정기 적 으로 백업 하고 지 정 된 시간 을 유지 하 는 것 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 셸 이 정기 적 으로 MySQL 을 백업 하 는 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 지원 을 바 랍 니 다!

좋은 웹페이지 즐겨찾기