Linux下定时备份MySQL并同步到其他服务器
一、需求背景
有一台web服务器,Linux系统,是Mysql的数据库,想要备份Mysql中的数据文件到别的服务器上,以便恢复数据的时候使用。
源服务器(运行web的服务器):10.172.***.*(zajweb) mysql=root:123456
目标服务(备份数据的服务器):10.172.***.***(zzweb)
二、mysql备份
1.数据的导入和导出
1.1、#导出数据库(压缩)
/usr/local/mysql/bin/mysqldump ‐u root ‐p12qwaszx gatcms | gzip >
/home/bak/zz_web_mysqlbak/database20170905.sql.gz
1.2、#导入数据库
mysql ‐u root ‐p database < database20160929.sql
2.创建Crontab
2.1创建备份目录
mkdir ‐p /home/bak/zaj_web_mysqlbak
2.2创建备份脚本
1、#创建自动备份脚本
touch /usr/sbin/zaj_web_mysqlbak.sh
2、编辑备份脚本
vi /home/bak/zaj_web_mysqlbak.sh
3、脚本代码:
#!/bin/bash
# Name:bakmysql.sh
# This is a ShellScript For Auto DB Backup and Delete old Backup
#
mysql_bin_dir=/usr/local/mysql/bin #mysql的bin目录地址
backupdir=/home/bak/zaj_web_mysqlbak #数据库的备份地址
time=` date +%Y%m%d%H `
$mysql_bin_dir/mysqldump ‐u root ‐p123456 zajcms | gzip
$backupdir/zaj_web_database$time.sql.gz
#
find $backupdir ‐name "zaj_*.sql.gz" ‐type f ‐mtime +7 ‐exec rm {} \; > /dev/null 2>&1
#
说明:
backupdir :mysql的备份地址(数据存放的位置)
mysql_bin_dir :mysql的bin路径(backupdir已经定义)
ppwd:p后面跟的是数据库的密码
2.3 给创建的备份脚本授权
chmod +x /usr/sbin/zaj_web_mysqlbak.sh
2.4设置crontab定时
1、crontab ‐e
2、00 1 * * * /usr/sbin/zaj_web_mysqlbak.sh
#表示每天1点00分执行备份
#注:crontab配置文件格式如下:
#分 时 日 月 周 命令
2.5重启crontab
/etc/rc.d/init.d/crond restart
#这样就完了定时备份并清理前7天的备份数据
三、同步到其它服务器
这里使用Linux同步文件工具rsync+inotify来进行文件的同步
rsync是类unix系统下的数据镜像备份工具——remote sync。一款快速增量备份工具 Remote Sync,远程
同步 支持本地复制,或者与其他SSH、rsync主机同步
用法:
rsync src dest
这是最简单的用法,表示同步src,dest文件。(即,执行之后,dest的文件与src的相同,以src的为准)
常用选项:
-a: 等价于rlptgoD,归档式
-r: 递归
-l: 复制软件链接
-p: 保留权限信息
-t: 将src的修改时间,同步到dest
-g: 同步组信息(group)
-o: 同步拥有者信息(own)
-D: 保持字符与块设备文件
-z: 启用压缩传输
-delete: 如果src没有此文件,那么dest也不能有,即在dest删除src里没有的文件。(如果你使用这个选项,就必须搭配-r选项一起)
3.1配置同步
1、创建同步脚本文件
touch /usr/sbin/zaj_web_rsync_mysqlbak.sh
2、进入要编辑的脚本文件
vi /usr/sbin/zaj_web_rsync_mysqlbak.sh
3、配置要同步数据的信息以及要同步到那个服务器
rsync ‐vrzacu ‐‐delete /home/bak/zaj_web_mysqlbak
root@10.172.***.***:/home/bak/zaj_web_mysqlbak ‐e "ssh ‐p 22"
#将本地/home/bak/zaj_web_mysqlbak/文件同步到远程服务器/home/bak/zaj_web_mysqlbak/目录下面通过ssh端口
3.2 配置ssh互信(两台服务器之间便于直接进行数据的同步,不用输入密码验证)
#下面在zajweb‐10.172.***.*服务器生成ssh key
[root@zajweb ~]$cd root
[root@zajweb ~]$mkdir ~/.ssh
[root@zajweb ~]$chmod 700 ~/.ssh
[root@zajweb ~]$ssh‐keygen ‐t rsa
[root@zajweb ~]$ssh‐keygen ‐t dsa
#下面在zzweb‐10.172.***.***服务器生成ssh key
[root@zzweb ~]$cd root
[root@zzweb ~]$mkdir ~/.ssh
[root@zzweb ~]$chmod 700 ~/.ssh
[root@zzweb ~]$ssh‐keygen ‐t rsa
[root@zzweb ~]$ssh‐keygen ‐t dsa
#配置互信(root用户)
[root@zajweb ~]$touch ~/.ssh/authorized_keys
[root@zajweb ~]$ssh 10.172.***.* cat ~/.ssh/id_rsa.pub >>authorized_keys
[root@zajweb ~]$ssh 10.172.***.* cat ~/.ssh/id_dsa.pub >>authorized_keys
[root@zajweb ~]$ssh 10.172.***.*** cat ~/.ssh/id_rsa.pub >>authorized_keys
[root@zajweb ~]$ssh 10.172.***.*** cat ~/.ssh/id_dsa.pub >>authorized_keys
[root@zajweb ~]$scp ~/.ssh/authorized_keys 10.172.***.***:~/.ssh/
authorized_keys 100% 1980 1.9KB/s 00:00
3.3 给创建的同步脚本授权:
chmod +x /usr/sbin/zaj_web_rsync_mysqlbak.sh
3.4 创建同步定时:
30 1 * * * /usr/sbin/zaj_web_rsync_mysqlbak.sh
#表示每天1点30分执行同步