데이터베이스 백업 작업은 온라인 시스템에서 매우 중요한 단계이며, 백업이 없는 데이터베이스는 안전하지 않습니다. 본 블로그 게시물에서는 온라인 정보를 참조하여 쉘 스크립트 파일을 통해 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;
# chmod 700 mysql-backup.sh // 只允许管理员运行此脚本 #./mysql-backup.sh //执行脚本,测试一次
#执行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"
crontab 명령을 사용하여 위의 스크립트를 기반으로 합니다. , 정기적으로 쉘 파일을 자동으로 실행합니다.
# chmod 700 incre-backup.sh // 只允许管理员运行此脚本 #./mysql-backup.sh //执行脚本,测试一次
# crontab –e 添加: 00 01 * * */mysql-backup.sh // 每天凌晨1点执行
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
로컬 백업
의 파일 경로를 서버에 마운트합니다): #mount -tnfs -o nolock,nfsvers=1,vers=3 192.168.64.138:/home /nfs /backup문제
: mount.nfs: 오래된 NFS 파일 핸들 해결 방법: 클라이언트 측에서 마운트 파일을 제거하고 다시 마운트: # umount –a [백업 및 복원] a. gzip 데이터베이스를 Mysq로 복원 #gunzip
#/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 중국어 홈페이지(m.sbmmt.com)를 참고해주세요!