>  기사  >  데이터 베이스  >  Centos7은 MySQL LAN 백업을 구현합니다(전체 백업, 로그 증분 백업 포함).

Centos7은 MySQL LAN 백업을 구현합니다(전체 백업, 로그 증분 백업 포함).

黄舟
黄舟원래의
2017-02-28 13:20:081563검색

데이터베이스 백업 작업은 온라인 시스템에서 매우 중요한 단계이며, 백업이 없는 데이터베이스는 안전하지 않습니다. 본 블로그 게시물에서는 온라인 정보를 참조하여 쉘 스크립트 파일을 통해 MySQL 데이터베이스의 LAN에서 전체 백업, 증분 백업 및 예약 백업 작업을 구현합니다.

서버 소개: centos 7.0

[로컬 전체 백업] 

1. 단일 데이터베이스 백업 스크립트 파일

#vi mysql-backup.sh

아아앙

2. 전체 백업

db_user="root"     #本服务器用户名密码
db_passwd="root"  
db_host="192.168.64.137"   #本服务器地址
db_name="whp"  #需要备份数据库名称
# the directory for story your backup file.  
backup_dir="/backup"    #备份以后放入的文件路径
# date format for backup file (dd-mm-yyyy)  
time="$(date +"%Y-%m-%d-%H-%M-%S")"  
# mysql, mysqldump and some other bin's path  
MYSQL="/application/mysql/bin/mysql"  
MYSQLDUMP="/application/mysql/bin/mysqldump"  
GZIP="/bin/gzip"  
  
$MYSQLDUMP -u $db_user -h $db_host -p$db_passwd $db_name | $GZIP -9 > "$backup_dir/$db_name"_"$time.gz"

3. 쉘 스크립트 권한 수정 및 실행

db_user="root"  
db_passwd="root"  
db_host="localhost"   
# the directory for story your backup file.  
backup_dir="/application/backup/"  
# date format for backup file (dd-mm-yyyy)  
time="$(date +"%H-%M-%S-%m-%d-%y")"  
# mysql, mysqldump and some other bin's path  
MYSQL="/application/mysql/bin/mysql"  
MYSQLDUMP="/application/mysql/bin/mysqldump"  
MKDIR="/bin/mkdir"  
RM="/bin/rm"  
MV="/bin/mv"  
GZIP="/bin/gzip"  
# check the directory for store backup is writeable   
test ! -w $backup_dir && echo "Error: $backup_dir is un-writeable." && exit 
# the directory for story the newest backup  
test ! -d "$backup_dir/backup.0/" && $MKDIR "$backup_dir/backup.0/"  
echo "Start to Backup...";  
# get all databases  
# don't backup information_schema、performance_schema  
all_db="$($MYSQL -u $db_user -h $db_host -p$db_passwd -Bse 'show databases')"  
all_db=${all_db//information_schema/};  
all_db=${all_db//performance_schema/};  
for db in $all_db  
do  
$MYSQLDUMP -u $db_user -h $db_host -p$db_passwd $db | $GZIP -9 > "$backup_dir/backup.0/$time.$db.gz"  
done  
# delete the oldest backup  
test -d "$backup_dir/backup.7/" && $RM -rf "$backup_dir/backup.7"  
# rotate backup directory  
for int in 6 5 4 3 2 1 0  
do  
if(test -d "$backup_dir"/backup."$int")  
then  
next_int=`expr $int + 1`  
$MV "$backup_dir"/backup."$int" "$backup_dir"/backup."$next_int"  
fi  
done  
echo "BackUp Success!"  
exit 0;

[로그 파일 증분 백업]

1. 스크립트 파일 생성:

#vi incre-backup.sh

       # chmod 700 mysql-backup.sh  // 只允许管理员运行此脚本
           #./mysql-backup.sh                //执行脚本,测试一次

2. 파일 권한 수정 및


#执行mysqladmin执行刷新日志文件         
/application/mysql/bin/mysqladmin -uroot -proot flush-logs   
         
#DATADIR=/var/lib/mysql   
DATADIR=/application/data  #获取数据文件路径 
BAKDIR=/backup    #获取要备份的数据目标文件路径
         
###如果mysql bin log你做了特殊设置,请修改此处或者修改应用此变量的行:缺省取机器名,mysql缺省也是取机器名   
#HOSTNAME=`uname -n`   
cd $DATADIR   #转入到/application/data 查询mysql-bin.index文件
#FILELIST=`cat $HOSTNAME-bin.index`   
 FILELIST=`cat mysql-bin.index`   
 
## COUNTER number   
COUNTER=0   
for file in $FILELIST   
do   
COUNTER=`expr $COUNTER + 1 `   
done   
         
NextNum=0   
for file in  $FILELIST   
do   
base=`basename $file`   
NextNum=`expr $NextNum + 1`   
if [ $NextNum -eq $COUNTER ]   
then
echo "skip lastest"
else
dest=$BAKDIR/$base   
if(test -e $dest)   
then
echo "skip exist $base"
else
echo "copying $base"
cp $base $BAKDIR   
fi   
fi   
done   
         
echo "backup mysql binlog ok"

[자동 백업]

실행 자동 백업은 Linux 시스템의

crontab 명령을 사용하여 위의 스크립트를 기반으로 합니다. , 정기적으로 쉘 파일을 자동으로 실행합니다.

# chmod 700 incre-backup.sh  // 只允许管理员运行此脚本
  #./mysql-backup.sh                //执行脚本,测试一次

[원격 LAN 백업]


LAN 백업은 NFS 서버를 사용하여 LAN에서 데이터 공유를 실현합니다. NFS 서버 마운트 방법은 파일을 공유할 수 있도록 네트워크 연결을 구성하여 일반적인 파일 공유와 마찬가지로 구현됩니다. 구현은 다음과 같습니다.


1. NFS 서버 측 설치


a) NFS 서버에 필요한 소프트웨어 패키지를 설치합니다. 🎜>

 # crontab –e
添加:
00 01 * * */mysql-backup.sh    // 每天凌晨1点执行

192.168.248.0/24와 동일한 네트워크 번호를 가진 호스트는 NFS 서버의 /home/nfs/ 디렉터리를 자체 파일 시스템에 마운트할 수 있습니다.

rw는 읽기 가능하고 쓰기 가능, 동기화는 동기화 쓰기를 의미합니다

c) nfs 서비스 시작

#systemctlstart rpcbind.service

🎜> d) NFS 서버가 성공적으로 시작되었는지 확인합니다.

#rpcinfo –p

e) 성공적으로 시작되지 않으면 rpcbind 및 nfs-server 서비스를 다시 시작합니다.

#SystemCTL RPCBIND.Service


#SystemCTL RESTART NFS-Server.service

a) nfs 설치 및 rpcbind 서비스 시작

# yuminstall -y nfs-utils

b) 먼저 rpcbind를 시작합니다

#systemctlenable rpcbind.service


c) 그런 다음 rpcbind 서비스를 시작합니다.

systemctlstart rpcbind.service

d) NFS 확인 서버에 공유 디렉터리가 있는지 여부: 다음(여기서 위

로컬 백업

의 파일 경로를 서버에 마운트합니다):

            #mount -tnfs -o nolock,nfsvers=1,vers=3 192.168.64.138:/home /nfs /backup

문제

: mount.nfs: 오래된 NFS 파일 핸들

해결 방법: 클라이언트 측에서 마운트 파일을 제거하고 다시 마운트:

# umount –a

[백업 및 복원]

a. gzip 데이터베이스를 Mysq로 복원

#gunzip

b.

#/mysql/bin/mysqlbinlog--database=fox --start-date="2013-01-22 5:00:00" --stop-date="2013-01-22 9:00:00 "/mysql/data/mysql-bin.000001 | /mysql/bin/mysql -u root -p123456 –f

데이터베이스: 특정 데이터베이스 지정

시작 날짜: 시작 시간

stop-date : 종료 시간

/mysql/data/mysql-bin.000001 : 지정된 바이너리 파일

[요약]

기본 백업 방법은 완료되었지만 너무 많은 메모리를 소비하지 않고 보안을 보장하려면 특정 애플리케이션 시나리오에 따라 다양한 백업 전략을 채택해야 합니다.

위 내용은 MySQL LAN 백업(전체 백업, 로그 증분 백업 포함)을 구현한 Centos7의 내용입니다. 자세한 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.