rsync+crontab 定时备份

Source

简介:

Rsync(remote sync)是UNIX 及类UNIX 平台下一款神奇的数据镜像备份软件,它不像FTP 或其他文件传输服务那样需要进行全备份,Rsync 可以根据数据的变化进行差异备份,从而减少数据流量,提高工作效率。你可以使用它进行本地数据或远程数据的复制,Rsync 可以使用SSH 安全隧道进行加密数据传输。Rsync 服务器端定义源数据,Rsync 客户端仅在源数据发生改变后才会从服务器上实际复制数据至本地,如果源数据在服务器端被删除,则客户端数据也会被删除,以确保主机之间的数据是同步的。Rsync 使用TCP 873端口。

实验:

准备两台虚拟机测试:

192.168.40.111备份源
192.168.40.112 备份端

关掉防火墙 setenforce

systemctl stop firewalld
setenforce 0

备份源操作

安装rsync
yum -y install rsync
修改配置文件
vim /etc/rsyncd.conf 
uid = nobody
gid = nobody
use chroot = yes
port 873
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
hosts allow = 192.168.40.0/24   #指定的网段
[lx]
path = /opt/aaa
comment = Document Root of www.51xit.top
read only =no
dont comperss = *.gz *.bz2 *.tgz *.zip *.rar *.z
auth users =tom
secrets file = /etc/rsyncd_users.db

[root@localhost ~]# mkdir /opt/aaa
设置账户 密码
[root@localhost ~]# vim /etc/rsyncd_users.db
tom:123

加权限
[root@localhost ~]# chmod 600 /etc/rsyncd_users.db 
启动rsync 查看端口
root@localhost ~]# rsync --daemon
[root@localhost ~]# netstat -nlput |grep 873
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      13360/rsync         
tcp6       0      0 :::873                  :::*                    LISTEN      13360/rsync        

备份端操作:

安装rsync
[root@localhost ~]# yum -y install rsync
备份端只需设置用户密码
[root@localhost ~]# vim /etc/server.pass
123
[root@localhost ~]# mkdir /opt/aaa/
加权限
[root@localhost ~]# chmod 600 /etc/server.pass 
设置定时任务 每分钟执行一次
[root@localhost ~]# crontab -e
* * * * * rsync -az --password-file=/etc/server.pass tom@192.168.40.111::lx /opt/aaa  #放到/opt/aaa指定的目录下
[root@localhost ~]# crontab -l
* * * * * rsync -az --password-file=/etc/server.pass tom@192.168.40.111::lx /opt/aaa
#[root@localhost ~]# crontab -e
#crontab: installing new crontab 意思是等待三分钟在开始执行

测试

在备份源的创建个测试:

[root@localhost aaa]# cd /opt/aaa/
[root@localhost aaa]# touch 22222222

在备份端等3分钟查看 是否同步:

[root@localhost ~]# ls
22222222

添加mysql日志自动备份:

备份源操作:

#进入数据库

mysql  

#创建一个名为crm2的库

create database crm2;        	

#查询是否创建成功

show create database crm2;

切换到crm2库下

mysql> use crm2;  

创建两张表,student表和class表

mysql> create table tb1(id int primary key,name char(8) not null,age int,class_id int not null);
Query OK, 0 rows affected (0.63 sec) 
mysql> create table class(id int primary key,cname char(20) not null);
Query OK, 0 rows affected (0.34 sec)   

给两张表插入一些数据

mysql> insert into class values(1,'一班'),(2,'二班');
    mysql> insert into student values(1,'Jaden',18,1),(2,'哪拿',45,1),(3,'彦涛',30,2);

创建自动部署脚本并授权:

 vim ls.sh
 mysqldump -u root -p mysql > /opt/aaa/dbname.sql
chmod 777 ls.sh

创建crontab自动执行脚本

 crontab -e
 * * 1 * * /root/ls.sh  #按需求操作多长时间执行一次脚本

测试一下:

sh ls.sh

在备份源查看是否备份完毕

[root@localhost]cd /opt/aaa
[root@localhost aaa]#  ls
22222222  dbname.sql

在备份端查看

[root@localhost aaa]# ls
22222222	dbname.sql

可以打开dbname.sql看一下:

[root@localhost aaa]# vim dbname.sql 

-- MySQL dump 10.14  Distrib 5.5.68-MariaDB, for Linux (x86_64)
--
-- Host: localhost    Database: mysql
-- ------------------------------------------------------
-- Server version       5.5.68-MariaDB

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Table structure for table `class`
--

DROP TABLE IF EXISTS `class`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `class` (
  `id` int(11) NOT NULL,
  `cname` char(20) NOT NULL,
  PRIMARY KEY (`id`)		。。。。。。。。。。(太多了直接省略了)

创建完毕搭建完成

Rsync 参数:

-v, --verbose 详细模式输出
-q, --quiet 精简输出模式
-c, --checksum 打开校验开关,强制对文件传输进行校验
-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-r, --recursive 对子目录以递归模式处理
-R, --relative 使用相对路径信息