> php教程 > PHP开发 > 본문

Linux는 정기적으로 mysql을 백업하고 이를 다른 서버와 동기화합니다.

高洛峰
풀어 주다: 2016-11-23 10:27:43
원래의
1395명이 탐색했습니다.

데이터는 모든 기업의 핵심 자산입니다. 정기적인 백업은 데이터베이스에 문제가 발생했을 때 가장 가까운 백업 시점으로 롤백하여 손실을 최소화하는 것입니다.

이것은 기사는 두 부분으로 설명됩니다: 1. mysql의 정기 백업, 2. 다른 서버와의 동기화

mysql 백업

특정 데이터베이스 백업 및 복원

백업 및 복원

# 导出数据库
/usr/bin/mysqldump -u root -ppwd database > database20160929.sql
# 导入数据库
mysql -u root -p database < database20160929.sql
로그인 후 복사

압축 파일로 백업 압축 파일에서 가져오기

#备份到压缩文件
/usr/bin/mysqldump -u root -ppwd database  | gzip > database20160929.sql.gz
#从压缩文件导入
gzip < database20160929.sql.gz | mysql -u root -p database
로그인 후 복사

crontab 예약 백업

1. 백업 디렉터리 생성

# root 用户,创建备份目录
mkdir -p /bak/mysqlbak
cd /bak/mysqldata
로그인 후 복사

2. 실행 스크립트 쓰기

vi  /usr/sbin/bakmysql.sh
로그인 후 복사

스크립트 코드:

#!/bin/bash
# Name:bakmysql.sh
# This is a ShellScript For Auto DB Backup and Delete old Backup
#
backupdir=/bak/mysqlbak
time=` date +%Y%m%d%H `
mysql_bin_dir/mysqldump -u root -ppwd database | gzip > $backupdir/database$time.sql.gz
#
find $backupdir -name "name_*.sql.gz" -type f -mtime +7 -exec rm {} ; > /dev/null 2>&1

#
로그인 후 복사

스크립트 설명:

backupdir mysql 백업 주소

root mysql 사용자 name

pwd mysql 비밀번호

데이터베이스 데이터베이스 이름

mysql_bin_dir mysql bin path

time=` date +%Y%m%d%H ` time="$(date +"%Y%m%d$H")"로 쓸 수도 있습니다.` 기호는 TAB 키 위의 기호이지 ENTER 왼쪽의 ' 기호가 아니라 날짜 이후의 공간.

f 유형은 일반적인 유형의 파일을 찾는 것을 의미하고, f는 일반 파일을 의미합니다.

mtime +7은 변경 시간을 기준으로 파일을 검색합니다. +5는 파일이 7일 전에 변경되었음을 의미하고, -mmin +5는 파일이 5분 전에 변경되었음을 의미합니다.

exec rm {}은 셸 명령 실행을 의미합니다. exec 옵션 뒤에는 실행할 명령이나 스크립트, {} 쌍, 공백 및 a, 마지막으로 세미콜론이 옵니다.

/dev/null 2>&1 표준 오류를 표준 출력으로 리디렉션한 다음 /DEV/NULL 아래에 넣습니다. 일반인의 관점에서 이는 모든 표준 출력과 표준 오류를 휴지통에 버리는 것을 의미합니다. &는 명령이 백그라운드에서 실행되도록 하는 것을 의미합니다.

3. 스크립트에 실행 권한 추가

# chmod +x /usr/sbin/bakmysql.sh
로그인 후 복사

4. 예약 실행을 위한 crontab 설정

vi /etc/crontab 
#在最后一行中加入:  
00 3 * * * root /usr/sbin/bakmysql.sh
#表示每天3点00分执行备份
로그인 후 복사

참고: crontab 구성 파일 형식은 다음과 같습니다. :
시간 공유 일별, 월별, 주별 명령

5. crontab 다시 시작

/etc/rc.d/init.d/crond restart

이로써 예약된 백업 및 정리가 완료됩니다. 7일간의 백업 데이터

다른 서버와 동기화

여기서는 Linux 파일 동기화 도구 rsync+inotify를 사용하여 파일을 동기화합니다

rsync
로그인 후 복사

rsync는 Unix 계열 시스템 데이터 미러링 백업 도구인 원격 동기화입니다. 빠른 증분 백업 도구인 Remote Sync는 로컬 복제 또는 다른 SSH 또는 rsync 호스트와의 동기화를 지원합니다.

사용법

rsync src dest
로그인 후 복사

이것은 가장 간단한 사용법으로, src ,dest 파일을 동기화하는 것을 의미합니다. (즉, 실행 후 dest의 파일은 src의 파일과 동일하며 이것이 우선합니다)

공통 옵션

-a: -rlptgoD와 동일, 아카이브 유형

-r: 재귀

-l: 소프트웨어 링크 복사

-p: 권한 정보 유지

-t: src 수정 시간을 dest와 동기화

-g: 그룹 정보 동기화(group)

-o: 소유자 정보 동기화(own)

-D: 캐릭터 및 블록 디바이스 파일 유지

- z: 압축 전송 활성화

--delete: src에 이 파일이 없으면 dest도 이 파일을 가질 수 없습니다. 즉, dest의 src에 없는 파일을 삭제합니다. (이 옵션을 사용할 경우 반드시 -r 옵션과 함께 사용해야 합니다.)

## 将本地/bak/mysqlbak/文件同步到 远程服务器 /bak/mysql/bak 目录下面 排除 mysqlbak/index目录 通过ssh端口
rsync -vzacu  /bak/mysqlbak/  root@192.168.53.86:/bak/mysqlbak   --exclude  "mysqlbak/index"   -e "ssh -p 22"
# 将远程目录 /bak/mysqlbak下的文件同步到本地 /bak/mysqlbak/目录下
rsync -vzrtopg --progress --delete root@192.168.53.85:/bak/mysqlbak  /bak
로그인 후 복사

원격 파일의 rsync 서버 측 동기화 활성화

rsycn의 서버는 파일을 받는 쪽입니다. 서버, rsycn의 클라이언트는 서버의 파일 푸셔입니다.

rsync 서버/파일 수신자 구성

서버에서 rsyncd 서비스를 활성화해야 합니다

rsyncd.conf 구성 파일 추가

vi /etc/rsyncd.conf
#以下是全局配置
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/lock/rsyncd
[mysqlbak]     #模块名,在源服务器指定这个名字
   comment = sync rsync/home      #描述信息
   path = /bak/mysqlbak      #备份目录
   use chroot=no           #不使用chroot,不用root权限
   read only = no          #设置本地备份目录为读写权限
   uid=root          
   gid=root
   max connections=10       #客户端最大连接数
   auth users = root      #指定数据同步用户
   secrets file = /etc/rsyncd.pass          #指定数据同步用户信息文件
   hosts allow=192.168.53.0/85     #允许连接的客户端
   ignore errors = yes     #忽略出现I/O错误
   timeout = 600
로그인 후 복사

인증 생성 파일

 vi /etc/rsyncd.pass
  ##代码
  root:root      #格式是用户名:密码
  #属主要有权限读这个文件,否则会报没权限
  chmod 600 /etc/rsyncd.pass
로그인 후 복사

/etc/xinetd.d/rsync 파일을 수정하고 비활성화를 no로 변경

service rsync
{        disable = no
        socket_type     = stream        wait            = no
        user            = root
        server          = /usr/bin/rsync
        server_args     = --daemon        log_on_failure  += USERID
}
로그인 후 복사

서버 시작

rsync --daemon --config=/etc/rsyncd.conf
로그인 후 복사

rsycn 클라이언트 / 파일 전송자 구성

클라이언트 구성은 간단하며 비밀번호만 구성하면 됩니다

  vi /etc/rsync_client.pwd  ##代码
  root    #只需要填写rsync服务的密码  
  #属主要有权限读这个文件,否则会报没权限
  chmod 600 /etc/rsync_client.pwd
로그인 후 복사

클라이언트 동기화 테스트

/usr/bin/rsync -auvrtzopgP --progress --password-file=/etc/rsync_client.pwd /bak/mysqlbak/ root@192.168.53.86::mysqlbak
로그인 후 복사

rsync는 일회성입니다. 동기화, 실시간 동기화가 필요한 경우 다른 도구

inotify

를 도입해야 합니다.

Inotify 是一种强大的、细粒度的、异步的文件系统事件监控机制,linux内核从2.6.13起,加入了Inotify支持,通过Inotify可以监控文件系统中添加、删除,修改、移动等各种细微事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools就是这样的一个第三方软件。

Inotify只需要要按照部署在同步的客户端,当监控的文件有变化触动 rsync脚本来同步

安装

yum install inotify-tools
로그인 후 복사

配置监控的文件路径

vi /etc/inotify_exclude.lst
#代码
/bak/mysqlbak #监控目录
@/bak/log #排除监控目录
로그인 후 복사

rsync排除监控文件目录

vi /etc/rsyncd.d/rsync_exclude.lst#代码src/*.html*
src/js/
src/2014/20140[1-9]/
로그인 후 복사

客户端同步到远程的脚本rsync.sh

#rsync auto sync script with inotify
#variables
current_date=$(date +%Y%m%d_%H%M%S)
source_path=/bak/mysqlbak/
log_file=/var/log/rsync_client.log
#rsync
rsync_server=192.168.53.86
rsync_user=root
rsync_pwd=/etc/rsync_client.pwd
rsync_module=mysqlbak
INOTIFY_EXCLUDE=&#39;(.*/*\.log|.*/*\.swp)$|^/tmp/src/mail/(2014|20.*/.*che.*)&#39;
RSYNC_EXCLUDE=&#39;/bak/rsync_exclude.lst&#39;
#rsync client pwd check
if [ ! -e ${rsync_pwd} ];then
    echo -e "rsync client passwod file ${rsync_pwd} does not exist!"
    exit 0
fi
#inotify_function
inotify_fun(){
    /usr/bin/inotifywait -mrq --timefmt &#39;%Y/%m/%d-%H:%M:%S&#39; --format &#39;%T %w %f&#39; \
          --exclude ${INOTIFY_EXCLUDE}  -e modify,delete,create,move,attrib ${source_path} \
          | while read file
      do
          /usr/bin/rsync -auvrtzopgP --exclude-from=${RSYNC_EXCLUDE} --progress --bwlimit=200 --password-file=${rsync_pwd} ${source_path} ${rsync_user}@${rsync_server}::${rsync_module} 
      done
}
#inotify log
inotify_fun >> ${log_file} 2>&1 &
로그인 후 복사

给脚本执行权限,执行后就可以了

chmod 777 rsync.sh
./rsync.sh
로그인 후 복사


관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 추천
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!