셸 백업 데이터베이스,코드 온라인 스 크 립 트

셸 스 크 립 트
셸 스 크 립 트(셸 script)는 셸 을 위 한 스 크 립 트 프로그램 입 니 다.업계 에서 말 하 는 셸 은 보통 셸 스 크 립 트 를 가리 키 지만 독자 친구 들 은 셸 과 셸 스 크 립 트 가 서로 다른 개념 이라는 것 을 알 아야 한다.
MySQL 데이터베이스 백업
필드:
5 개의 데이터 베 이 스 를 실행 하 는 MySQL 서버
필요:
1)하루 에 한 번 씩 모든 라 이브 러 리 를 백업 해 야 한다.
2)백업 데 이 터 를/data/backup/아래 에 저장 합 니 다.
3)백업 파일 이름 형식 예제:dbname-2019-11-23.sql
4)하루 전의 모든 sql 파일 을 압축 해 야 합 니 다.형식 은 gzip 입 니 다.
5)로 컬 데이터 유지 1 주일
6)백업 한 데 이 터 를 원 격 백업 센터 에 동기 화 해 야 합 니 다.만약 에 이 컴퓨터 가 rsync 명령 을 통 해 동기 화 할 수 있다 면 대상 주 소 는 192.168.234.125 이 고 데이터 저장 디 렉 터 리:/data/my sqlbak/
7)원 격 백업 데이터 1 개 월 유지 요구
스 크 립 트:

#!/bin/bash
mysqldump="/usr/local/mysql/bin/mysqldump"
bakdir="/data/backup"
bakuser="backup"
passwd="backup123"
d1=`date +%F`
d2=`date +%d`
#              
exec &> tmp/bak.log
echo "mysql bakup begin at `date`"
#          
for db in db1 db2 db3 db4 db5
do
 $mysqldump -u$bakuser -p$passwd $db > $bakdir/$db-$d1.sql
done
#          
find $bakdir -type f -name "*.sql" -mtime +1 |xargs gzip
#          
find $bakdir -type f -mtime +7 |xargs rm
#               
for db in db1 db2 db3 db4 db5
do
 rsync -a $bakdir/$db-$d1.sql [email protected]::/data/mysqlbak/$db-$d2.sql
done
echo "mysql bakup end at `date`"
보충:
1.원 격 기기 에 저 장 된 백업 파일 은 라 이브 러 리 이름-날짜 의 구체 적 인 날짜 이름 으로 30 일 동안 자동 으로 유 지 됩 니 다(예 를 들 어 15 일 백업 파일 db1-15.sql 다음 달 1 일 백업 파일 은 이 파일 을 덮어 씁 니 다).
2.데이터베이스 가 클 때 my sqldump 백업 속도 가 매우 느 릴 수 있 습 니 다.이 때 xtarbackup 도 구 를 사용 하여 백업 하거나 my sql 마스터 복사 해 야 합 니 다.
코드 온라인 스 크 립 트 발표
생산 환경 에서 하나의 업 무 는 보통 여러 대의 서버,즉 부하 균형 을 달 리 는 것 이다.그러면 이런 기계 에서 운행 하 는 코드 는 반드시 일치 해 야 한다.어떻게 일치 하 는 것 을 실현 할 수 있 을 까?두 가지 방안 이 있 습 니 다.
1.공유 하 는 방식 으로
만약 에 기계 의 양 이 많 지 않 으 면 NFS 로 실현 할 수 있 습 니 다.물론 안정성 을 요구 하면 전문 적 인 저장 장치(NAS,SAN 등)를 사용 하 는 것 이 좋 습 니 다.이런 방식 의 구 조 는 다음 과 같 습 니 다.
在这里插入图片描述
이런 구조의 장점 은 유지 하기 편리 하 다 는 것 이다.예 를 들 어 코드 가 업 데 이 트 될 때 한 대의 기계 에 있 는 코드 만 업데이트 하면 다른 기계 에서 모두 업 데 이 트 될 것 이다.단점 은 기 계 량 이 많 으 면 공유 저장 소 가 병목 이 되 고 파일 에 대한 경쟁 으로 성능 에 문제 가 생 길 수 있다 는 점 이다.또 하 나 는 공유 저장 소 는 매우 큰 단일 위험 으로 고장 이 나 지 않 으 면 모든 것 이 OK 이 고 고장 이 나 면 모든 업무 가 중단 되 고 영향 이 매우 크다.
2.분포 식
공유 방식 을 통 해 단점 이 많 으 니 다른 방식 을 선택 하 십시오.즉,모든 WEB 서버 로 컬 디스크 에 코드 를 저장 하 는 것 입 니 다.아래 그림 과 같 습 니 다.
在这里插入图片描述
이렇게 하 는 장점 은 저장 성능 문제 가 없고 자원 경쟁 충돌 도 없고 단일 고장 위험 도 없다 는 것 이다.단점 은 매번 코드 가 업 데 이 트 될 때마다 모든 웹 기 계 를 업데이트 해 야 하기 때문에 비교적 번거롭다 는 것 이다.절차 가 번 거 롭 지만 대부분의 기업 들 이 이 방식 을 선택한다.
셸 스 크 립 트+expect 를 통 해 여러 웹 서버 에 코드 를 대량으로 발표 합 니 다:
전제:
1)모든 웹 서버 를 저장 하 는 IP 목록 파일 ip.list 제공
2)모든 웹 서버 에 일반 사용자 user 가 있 고 비밀 번 호 는 user 123 이 며 이 사용 자 는 동기 코드 사용자 라 고 가정 합 니 다.
3)코드 가 올 라 갈 때마다 파일 목록 file.list(변경 할 파일 목록)를 제공 합 니 다.
스 크 립 트:

#/bin/bash

#    ,               
read -p "            ./file.list?     y  Y,            。" c
#       ,      
if [ -z "$c" ]
then
 exit 1
fi
if [ $c == "y" -o $c == "Y" ]
then
 echo "    2  ,    。"
 #      .     .
 for i in 1 2
 do
 echo -n "."
 sleep 1
 done
 echo
else
 exit 1
fi
#    ./rsync.exp  
[ -f ./rsync.exp ] && rm -f ./rsync.exp
#  rsync.exp
cat >./rsync.exp <<EOF
#!/usr/bin/expect
set passwd "user123"
set host [lindex \$argv 0]
set file [lindex \$argv 1]
spawn rsync -avR --files-from=\$file / user@\$host:/
expect {
 "yes/no" {send "yes\r"}
 "password:" {send \$passwd\r}
}
expect eof
EOF
chmod a+x ./rsync.exp
#             
if_file_exist()
{
 if [ ! -f $1 ]
 then
 echo "  $1   ,   。"
 exit 1
}
#ip.list   WEB   ip  
#file.list         
if_file_exist ./ip.list
if_file_exist ./file.list
for ip in `cat ./ip.list`
do
 ./rsync.exp $ip ./file.list
done
#    
rm -f ./rsync.exp
메모:모든 웹 서버 에 생 성 된 코드 동기 화 사용 자 는 코드 가 있 는 디 렉 터 리 에 기록 할 수 있 는 권한 이 필요 합 니 다.
총결산
셸 백업 데이터베이스,코드 온라인 스 크 립 트 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 셸 백업 데이터베이스 코드 온라인 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 지원 바 랍 니 다!

좋은 웹페이지 즐겨찾기