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ührenInotify 是一种强大的、细粒度的、异步的文件系统事件监控机制,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='(.*/*\.log|.*/*\.swp)$|^/tmp/src/mail/(2014|20.*/.*che.*)' RSYNC_EXCLUDE='/bak/rsync_exclude.lst' #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 '%Y/%m/%d-%H:%M:%S' --format '%T %w %f' \ --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