적합 개체
이 문서는 Linux, mysql 4.1.14 버전에서 테스트되었습니다. 적절하게 수정하면 mysql 4.0, 5.0 및 기타 버전에도 적합할 수 있습니다.
이 문서는 복제 기능이 활성화된 MySQL이 없는 사용자에게 적합합니다.
모든 사람의 백업 전략이 다를 수 있으므로 이에 따라 수정하십시오. 실제 상황을 보고 하나의 예에서 추론해 보세요. 복사하지 마세요. 불필요한 손실이 발생할 수 있습니다.
이 스크립트의 기능을 이해하시기 바랍니다!
스크립트 설명
7일마다 백업 모든 데이터는 매일 binlog를 백업하는데, 이는 증분백업이다.
(데이터가 적다면 하루에 한 번씩 전체 데이터를 백업하면 된다. 증분 백업은 필요 없을 수도 있음)
셸 스크립트에 대한 작성자의 설명 잘 알지 못해서 엉터리로 쓴 곳이 많습니다 :)
bin 로그 활성화
mysql 버전 4.1에는 기본적으로 오류 로그만 있고 다른 로그는 없습니다. bin 로그를 여는 방법에는 여러 가지가 있습니다. /etc/my.cnf의 mysqld 섹션:
[mysqld]
log-bin
이 로그의 주요 기능은 증분 백업 또는 복제입니다.
증분 백업을 원할 경우 이 로그를 열어야 합니다.
데이터베이스 작업이 빈번한 MySQL의 경우 이 로그가 매우 커질 수 있으며
플러시됩니다. -logs를 데이터베이스에 저장하거나 mysqladmin, mysqldump를 사용하여 flash-logs를 호출하고 delete-master-logs 매개변수를 사용하면 이러한 로그 파일이 사라지고 새 로그 파일이 생성됩니다(처음에는 비어 있음). 🎜>그래서 절대 백업하지 않는다면 로그를 활성화할 필요가 없을 수도 있습니다.
전체 백업과 동시에 플러시 로그를 호출하고, 증분 백업 전에 플러시 로그를 순서대로 호출할 수 있습니다.
전체 백업 스크립트
데이터베이스 데이터가 많은 경우 영향을 피하기 위해 일반적으로 며칠 또는 일주일에 한 번씩 데이터를 백업합니다. 데이터의 양이 상대적으로 적으므로 하루에 한 번씩 백업해도 상관없습니다.
#!/bin/sh
# mysql 데이터 백업 script
# by scud http://www.jscud.com# 2005-10-30
#
# mysqldump --help를 사용하여 자세한 내용을 알아보세요.
#
BakDir=/backup/mysql
DATE=`date +%Y%m%d`
echo " " > ;> $LogFile
echo " " >> $LogFileecho "--------------- -----------------" > ;> $LogFile
echo $(date +"%y-%m-%d %H:%M:%S" ) >> $LogFile
echo "------ -----" >> $LogFile
DumpFile=$DATE.sql
mysqldump --quick --all-databases --flush-logs
> $DumpFile
echo "Dump Done" >> $LogFile
tar czvf $GZDumpFile $ DumpFile >> $LogFile 2>&1
echo "[$GZDumpFile]백업 성공!" >> $LogFile
rm -f $DumpFile
# 이전 일일 백업 파일 삭제: 증분 백업 파일, 전체 백업 후 증분 백업 파일을 삭제합니다.
cd $BakDir/daily
rm -f *
cd $BakDir
echo "백업 완료!"
echo "$BakDir 디렉토리를 확인하세요!"
echo "로컬 디스크나 FTP 어딘가에 복사하세요 !!!"
ls -al $BakDir
위 스크립트는 mysql을 로컬 /backup/mysql 디렉터리에 백업하고, 증분 백업 파일은 /backup/mysql/daily 디렉터리에 저장됩니다.
참고: 위 스크립트는 백업된 파일을 다른 원격 컴퓨터로 전송하지 않습니다. 며칠 전에 백업 파일을 삭제하지 않은 경우: 사용자가 관련 스크립트를 추가하거나
증분 백업은 데이터 양이 상대적으로 적지만, 전체 백업을 기반으로 운영하려면 시간과 비용을 따져보고 자신에게 가장 유리한 방법을 선택하면 된다.
#!/bin/sh
#
# mysql binlog 백업 스크립트
/usr/bin/mysqladmin 플러시 로그
BAKDIR=/backup/mysql/daily
### 특별한 설정을 한 경우 여기에서 수정하거나 이 변수의 적용을 수정하십시오. 라인: 기본적으로 머신 이름이 사용됩니다. MySQL도 기본적으로 머신 이름을 사용합니다.
HOSTNAME=`uname -n`
cd $DATADIR
COUNTER=0
$FILELIST의 파일do
COUNTER=`expr $COUNTER + 1 `
완료
NextNum=0
$FILELIST의 파일
base=`basename $file`
NextNum=`expr $NextNum + 1`
if [ $ NextNum -eq $COUNTER ]
then
echo "마지막 항목 건너뛰기"
else
dest=$BAKDIR/$base
if(test -e $dest)
then
echo "존재 $base 건너뛰기"
else
echo "$base 복사 중"
cp $base $BAKDIR
fi
fi
완료
echo "backup mysql binlog ok"
증분 백업 스크립트는 백업 전에 로그를 플러시하는 것입니다. MySQL은 자동으로 메모리의 로그를 파일에 넣은 다음 새 로그 파일을 생성하므로 다음 단계만 수행하면 됩니다. 백업 처음 몇 개이면 충분합니다. 즉, 마지막 백업은 백업되지 않습니다.
이번 백업에는 지난 백업에서 여러 개의 로그 파일이 생성될 수 있으므로 파일이 백업되었는지 확인해야 합니다. , 백업할 필요가 없습니다.
참고: 마찬가지로 사용자가 직접 원격으로 전송해야 하지만 전체 백업 후에 프로그램이 자동으로 생성됩니다.
액세스 설정
스크립트를 실행하려면 해당 사용자 이름과 비밀번호를 설정해야 합니다. mysqladmin과 mysqldump 모두 사용자 이름과 비밀번호가 필요합니다. 물론 스크립트에 작성할 수 있지만 수정하기가 편리하지 않습니다. 이 스크립트를 실행하기 위해 시스템의 루트 사용자를 사용한다고 가정하면 /root에 .my.cnf 파일을 생성해야 합니다(즉, , 루트 사용자의 홈 디렉터리)
[mysqladmin]
password = 비밀번호
user= root
[mysqldump]user=root
password=password
참고: 이 파일을 루트만 읽을 수 있도록 설정하십시오(chmod 600 .my.cnf )
자동 실행
하나는 crontab -e를 사용하여 루트 사용자의 예약된 작업에 넣는 것입니다. 예를 들어 전체 백업은 매주 일요일 오전 3시에 실행되고 일일 백업은 매주 월요일부터 토요일까지 실행됩니다. 새벽 3시.