Heim >php教程 >PHP开发 >Linux sichert regelmäßig MySQL und synchronisiert es mit anderen Servern

Linux sichert regelmäßig MySQL und synchronisiert es mit anderen Servern

高洛峰
高洛峰Original
2016-11-23 10:27:431435Durchsuche

Daten sind das Kernstück eines jeden Unternehmens. Durch regelmäßige Sicherungen soll sichergestellt werden, dass bei einem Problem mit der Datenbank ein Rollback auf den nächstgelegenen Sicherungszeitpunkt durchgeführt werden kann, um den Verlust zu minimieren.

Dies Artikel Der Artikel wird in zwei Teilen erklärt: 1. Regelmäßige Sicherung von MySQL; 2. Synchronisierung mit anderen Servern

MySQL-Sicherung

Sicherung und Wiederherstellung einer bestimmten Datenbank

Sicherung und wiederherstellen

# 导出数据库
/usr/bin/mysqldump -u root -ppwd database > database20160929.sql
# 导入数据库
mysql -u root -p database < database20160929.sql

In komprimierter Datei sichern. Aus komprimierter Datei importieren

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

crontab geplante Sicherung

1. Sicherungsverzeichnis erstellen

# root 用户,创建备份目录
mkdir -p /bak/mysqlbak
cd /bak/mysqldata

2. Skript ausführen

vi  /usr/sbin/bakmysql.sh

Skriptcode:

#!/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

#

Skriptbeschreibung:

Backupdir MySQL-Sicherungsadresse

Root-MySQL-Benutzer Name

pwd MySQL-Passwort

Datenbank Datenbankname

mysql_bin_dir MySQL-Bin-Pfad;

Zeit=` Datum %Y%m%d%H ` can kann auch geschrieben werden als time ="$(date "%Y%m%d$H")" Das `-Symbol ist das Symbol über der TAB-Taste, nicht das '-Symbol links von ENTER, und danach muss ein Leerzeichen stehen das Datum.

Typ f bedeutet, Dateien gängiger Typen zu finden, f bedeutet gewöhnliche Dateien.

mtime 7 sucht nach Dateien basierend auf ihrer Änderungszeit. 5 bedeutet, dass die Datei vor 7 Tagen geändert wurde. Wenn sie -mmin 5 ist, bedeutet dies, dass die Datei vor 5 Minuten geändert wurde.

exec rm {} bedeutet, dass ein Shell-Befehl ausgeführt wird. Auf die Option exec folgt der auszuführende Befehl oder das auszuführende Skript, dann ein Paar aus {}, einem Leerzeichen und einem und schließlich einem Semikolon.

/dev/null 2>&1 Standardfehler zur Standardausgabe umleiten und dann unter /DEV/NULL werfen. Laienhaft ausgedrückt bedeutet dies, dass alle Standardausgaben und Standardfehler in den Papierkorb geworfen werden. Das darin enthaltene „&“ bedeutet, dass der Befehl im Hintergrund ausgeführt wird.

3. Fügen Sie dem Skript Ausführungsberechtigungen hinzu

# chmod +x /usr/sbin/bakmysql.sh

4. Richten Sie Crontab für die geplante Ausführung ein

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

Hinweis: Das Format der Crontab-Konfigurationsdatei lautet wie folgt :
Zeitteilung Tägliche, monatliche und wöchentliche Befehle

5. Starten Sie crontab neu

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

Damit ist die geplante Sicherung und Bereinigung von 7 Tagen Sicherungsdaten abgeschlossen

Mit anderen Servern synchronisiert

Hier wird das Linux-Dateisynchronisierungstool rsync inotify zum Synchronisieren von Dateien verwendet

rsync

rsync steht unter einem Unix-ähnlichen System zur Datenspiegelung und Backup-Tool – Remote-Synchronisierung. Remote Sync, ein schnelles inkrementelles Backup-Tool, unterstützt die lokale Replikation oder Synchronisierung mit anderen SSH- oder Rsync-Hosts

Verwendung

rsync src dest

Dies ist die einfachste Verwendung, d. h. die Synchronisierung der Quell- und Zieldatei. (Das heißt, nach der Ausführung ist die Datei von dest dieselbe wie die von src, die Vorrang hat)

Allgemeine Optionen

-a: Entspricht -rlptgoD, Archivtyp

-r: Rekursiv

-l: Software-Link kopieren

-p: Berechtigungsinformationen behalten

-t: Änderungszeit von src mit dem Ziel synchronisieren

-g: Gruppeninformationen synchronisieren (Gruppe)

-o: Besitzerinformationen synchronisieren (eigene)

-D: Charakter- und Blockgerätedateien behalten

- z: Komprimierte Übertragung aktivieren

--delete: Wenn src diese Datei nicht hat, kann dest sie auch nicht haben, d. h. Dateien löschen, die sich nicht in src im Ziel befinden. (Wenn Sie diese Option verwenden, müssen Sie sie mit der Option -r verwenden)

## 将本地/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

Aktivieren Sie die serverseitige Rsync-Synchronisierung von Remote-Dateien.

Der Server von rsycn ist das Dateiempfangsende des server, rsycn's Der Client ist der Datei-Pusher des Servers.

rsycn-Server-/Dateiempfängerkonfiguration

Der Server muss den rsyncd-Dienst aktivieren

Konfigurationsdatei rsyncd.conf hinzufügen

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

Authentifizierung erstellen Datei

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

Ändern Sie die Datei /etc/xinetd.d/rsync und ändern Sie „disable“ in „no“

service rsync
{        disable = no
        socket_type     = stream        wait            = no
        user            = root
        server          = /usr/bin/rsync
        server_args     = --daemon        log_on_failure  += USERID
}

Starten Sie den Server

rsync --daemon --config=/etc/rsyncd.conf

rsycn-Client / Konfiguration des Dateisenders

Die Client-Konfiguration ist einfach und Sie müssen nur das Passwort konfigurieren

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

Client-Synchronisierungstest

/usr/bin/rsync -auvrtzopgP --progress --password-file=/etc/rsync_client.pwd /bak/mysqlbak/ root@192.168.53.86::mysqlbak

rsync ist nur einmalig Synchronisierung, wenn Sie eine Echtzeitsynchronisierung benötigen, müssen Sie ein anderes Tool

inotify

einführen

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


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Grundhaltungen von SassNächster Artikel:Grundhaltungen von Sass