【Linux简单实用小命令031】rsync备份mysql及图片库

Scroll Down

说明

rsyncremote sync,是linux自带的镜像同步工具,可以镜像保存文件夹和目录树,通过ssh + scp的方式进行加密传输。

rsync相比scp本身是可以进行增量传输,不用每次都全量传输,浪费资源。

使用rsync需要先进行ssh互信,这样比较方便,可以使用脚本进行任务的执行,不需要人工输入密码。

执行步骤

1、生成密钥

ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa

2、拷贝密钥到其他机器

# 数据库
ssh-copy-id -i ~/.ssh/id_dsa.pub 192.168.0.43;
# 应用服务器
ssh-copy-id -i ~/.ssh/id_dsa.pub 192.168.0.57;

3、添加hosts

echo 192.168.0.43 db1 >> /etc/hosts
echo 192.168.0.57 app1 >> /etc/hosts

4、编写备份及同步脚本

本脚本主要分为三部分:

1)mydumper导出mysql数据;

2)sync推送mysql至app应用服务器;

3)rsync拉取app服务器下的ftp图片文件夹至本机。

编辑脚本:

vi rsync.sh

内容如下:

#/bin/bash
### desc: 数据备份 && 同步脚本
### author: 姚毛毛
### date: 2020-11-25

day=`date +"%F"`
echo ${day}

echo '--------------------------------' ${day}  >> /home/rsync.log
echo '--------------------------------' ${day}  >> /home/rsync.log
echo '--------------------------------' ${day}  >> /home/rsync.log
echo '--------------------------------' ${day}  >> /home/rsync.log
echo '本次备份任务开始运行...' `date +"%F %H:%M:%S"`  >> /home/rsync.log


echo '备份数据库开始...' `date +"%F %H:%M:%S"`
echo '备份数据库开始...' `date +"%F %H:%M:%S"`  >> /home/rsync.log

mydumper -u root -p '123456!'  -P 3306 -S /tmp/mysql.sock  -B tt  -o /home/backup/${day}
echo '备份数据库结束...' `date +"%F %H:%M:%S"`
echo '备份数据库结束...' `date +"%F %H:%M:%S"`  >> /home/rsync.log




echo '推送数据库至应用服务器(/opt/backup)...' `date +"%F %H:%M:%S"`
echo '推送数据库至应用服务器(/opt/backup)...' `date +"%F %H:%M:%S"`  >> /home/rsync.log

# 备份 推送数据库至应用服务器
rsync -av /home/backup/ app1:/opt/backup

echo '推送数据库至应用服务器结束(/opt/backup)...' `date +"%F %H:%M:%S"`
echo '推送数据库至应用服务器结束(/opt/backup)...' `date +"%F %H:%M:%S"`  >> /home/rsync.log



echo 'begin... 拉取ftp(/opt/hc/upload)图片至本机(/home/upload)' `date +"%F %H:%M:%S"`
echo 'begin... 拉取ftp(/opt/hc/upload)图片至本机(/home/upload)' `date +"%F %H:%M:%S"`  >> /home/rsync.log
# 备份 拉去ftp图片至本机
rsync -av app1:/opt/hc/upload /home/upload
echo 'end... 拉取ftp(/opt/hc/upload)图片至本机(/home/upload)' `date +"%F %H:%M:%S"`
echo 'end... 拉取ftp(/opt/hc/upload)图片至本机(/home/upload)' `date +"%F %H:%M:%S"`  >> /home/rsync.log


# 备份成功
echo '本次备份任务,全部运行完成' `date +"%F %H:%M:%S"`
echo '本次备份任务,全部运行完成' `date +"%F %H:%M:%S"`  >> /home/rsync.log

echo 'cat /home/rsync.log'
cat /home/rsync.log

保存退出:wq

5、添加定时任务

每天两点运行rsync脚本,进行备份操作。

打开定时任务编辑器:

crontab -e

编辑内容如下:

#!/bin/bash
# desc: 1、进行数据库备份 2、推送数据库备份文件到app服务器 3、拉取ftp图片至本机
# author: yaomaomao
# date: 2020-11-25

# 每天1点运行
0 1 */1 * *   sh /home/rsync.sh

# 两分钟
#*/2 * */1 * * sh /home/rsync.sh
~                                

查看任务是否添加成功:

crontab -l

重启crond服务,使之生效

systemctl restart crond

查看任务执行情况

tail -fn100 /var/log/cron
tail -fn100 /home/rsync.log

小结

本文主要说的是rsync命令,但其实也复习了mydumper、ssh 、crond 这几个命令。

主要知识点1:rsync

rsync有三种模式,本文说的是远程shell模式,其他两种模式为本地模式、守护进程模式。

远程模式主要分为推、拉两种情况,在rsync.sh脚本中都有所体现。

为什么使用rsync?而不是scp?因为rsync可以增量备份。

rsync.sh这么长的脚本总共就3条命令:

1、mydumper 备份数据库

 mydumper -u root -p '123456!'  -P 3306 -S /tmp/mysql.sock  -B tt  -o /home/backup/${day}

2、推送数据库至应用服务器

rsync -av /home/backup/ app1:/opt/backup

3、拉取ftp图片至本机

rsync -av app1:/opt/hc/upload /home/upload

知识点2:ssh

1、使用ssh-keygen生成密钥;

2、使用ssh-copy-id推送公钥,建立互信

3、修改host,ip 映射为 名称

知识点3:crond

1、crontab -e或 echo 写入/var/spool/cron/root(备注:root为对应用户)

2、重启生效systemctl restart crond

3、查看执行情况 tail -fn100 /var/log/cron