window-linux文件备份

数据备份方案

数据类型

文件类数据

数据库数据

文件类数据备份方案

文件类方案一般在window的服务器里,所以可以实现window和linux的双向备份和异地备份。将某地服务器的数据文件可以备份到异地的服务器。

采取技术:Rsync+crontab

技术说明:rsync 的工具,它不但支持 Windows 与 Linux 之间的数据同步,而且配置简单,同时增量同步的功能更方便。

window文件类数据备份

将window服务器备份到linux服务器(测试案例)

rsync 配置很容易,这里以 Windows 作为客户端,Linux 作为服务端进行演示

linux 服务器端配置
#检查是否安装了 rsync
rpm -qa|grep rsync

# 如果没有安装的话,进行安装
yum install rsync
编写配置文件

rsync 涉及到的配置主要有三个:

​ ● /etc/rsyncd.conf -> 对 rsync 服务进行配置

​ ● /tmp/rsync -> 待同步的目标目录,路径可以自定义

​ ● /etc/rsyncd.passwd ->里面包含用于进行密码验证的账号信息

/etc/rsyncd.conf 的配置
# /etc/rsyncd: configuration file for rsync daemon mode
# See rsyncd.conf man page for more options.
# 进行通信的端口,如果 firewall 打开的话,需要将对应的端口添加进去
port=8730
# 日志文件
log file=/var/log/rsync.log
# rsync 的进程 id
pid file=/var/run/rsync.pid
# 要同步的模块,这里一般以项目名命名
[cmi]
# 同步的目标文件夹
path=/tmp/rsync
# rsync daemon 在传输前是否切换到指定的 path 目录下,并将其监禁在内,用于增加传输的安全性
use chroot=no
# 指定最大的连接数
max connections=4
# yes 表示只读本地文件无法同步到服务器
read only=no
# 客户端请求显示模块列表时,该模块是否显示出来
list=true
# 服务运行时的用户
uid=root
# 服务运行时的用户组
gid=root
# 进行验证时的用户名,必须是系统存在的用户
auth users = root 
# 连接用户时的密码
secrets file=/etc/rsyncd.passwd
# 允许的 ip
hosts allow=*
创建数据备份目录
mkdir /tmp/rsync
创建密码
# 写入密码
echo "root:123456" > /etc/rsyncd.passwd

#更改文件权限
chmod 600 /etc/rsyncd.passwd
重启服务
# /usr/bin/rsync  --daemon 
# netstat -lntup |grep rsync 
# ps -ef |grep rsync |grep -v grep
开机自启动
echo "/usr/bin/rsync --deamon">>/etc/rc.local #cat  /etc/rc.local
window客户端配置

客户端采取cwRsync_4.1.0这个版本(测试别的版本密码认证文件有问题)

安装cwRsync_4.1.0

配置window客户端密码文件

在这里插入图片描述

密码为123456 需要和服务器端的密码相同

并且需要设置权限为600

在power shell中设置

同步测试
rsync.exe -avPz --port 8730 --password-file=/cygdrive/C/cwRsync/bin/rsyncd.password.txt /cygdrive/C/test1  root@192.168.1.15::cmi
在linux服务器端查看

测试成功

[root@localhost rsync]# cd test1
[root@localhost test1]# pwd
/tmp/rsync/test1
[root@localhost test1]# ls
1.txt  2.txt

linux服务器数据备份同上

mysql数据脚本备份

脚本备份

vim mysql_fullbak.sh
#!/bin/bash
#dest: MySQL全备,仅保留最近4次的全备
PASSWD=123123
BAKDIR=/data/backup/mysql_full_backup
PORT=$(netstat -lanp | grep LISTEN | grep "mysqld"|awk -F ":" 'NR==1{print $4}')
TIME=$(date +"%Y%m%d_%H%M%S")
LOG_DIR=$BAKDIR/logs
if [ ! -d $LOG_DIR ]; then
    mkdir -p $LOG_DIR
elif [ ! -d $BAKDIR ];then
    mkdir -p $BAKDIR
fi
if ! ps -ef | grep -v "grep"|grep -q "mysqld ";then
    echo "$TIME ERROR 未检测到mysql进程" >> $LOG_DIR/$TIME.log
    exit 1
fi
mysqldump -uroot -p$PASSWD --routines --single_transaction \
--master-data=2 --all-databases | gzip > $BAKDIR/backup-all-databses-$TIME.tar.gz
if [ $? -eq 0 ]; then
    echo "$TIME INFO $BAKDIR/backup-all-databses-$TIME.tar.gz 备份成功." >>$LOG_DIR/$TIME.log
fi

COUNT=$(ls -lrt $BAKDIR/*.tar.gz |wc -l)
if [ $COUNT -gt 4 ]; then
    FILE=$(ls -lrt $BAKDIR/*.tar.gz |awk 'NR==1{print $NF}')
    mkdir -p /tmp/mysql_bak && mv $FILE /tmp/mysql_bak
    echo "$TIME INFO $FILE move /tmp/mysql_bak" &> $LOG_DIR/$TIME.log
fi


添加到计划任务,每周天4点执行

crontab -e
0 4 * * 7 /mnt/scripts/mysql_fullbak.sh



# mysql增量备份脚本

root@localhost(192.168.199.106)~>cd /mnt/scripts/
root@localhost(192.168.199.106)/mnt/scripts>vim mysql_binlogbak.sh
#!/bin/bash
# dest: 二进制文件增量备份
PASSWD=123123
BAKDIR=/data/backup/mysqlbinlog/$(date +%F)
PORT=$(netstat -lanp | grep LISTEN | grep "mysqld"|awk -F ":" 'NR==1{print $4}')
TIME=$(date +"%Y%m%d_%H%M%S")
LOG_FILE=$BAKDIR/mysql_fullbak.log
BIN_FILE=/var/lib/mysql/master-bin.index
if [ ! -d $BAKDIR ]; then
    mkdir -p $BAKDIR
fi
if ! ps -ef | grep -v "grep"|grep -q "mysqld ";then
    echo "$TIME ERROR 未检测到mysql进程" >> $LOG_FILE
    exit 1
fi
mysqladmin -uroot -p$PASSWD flush-logs
Counter=`wc -l $BIN_FILE |awk '{print $1}'`
NUM=0
for file in `cat $BIN_FILE`
do
    base=`basename $file`
#basename用于截取mysql-bin.00000*文件名,去掉./mysql-bin.000005前面的./
    NUM=`expr $NUM + 1`
        if [ $NUM -eq $Counter ]
        then
            echo "$TIME INFO $base skip!" >> $LOG_FILE
        else
            dest=$BAKDIR/$base
            if(test -e $dest)
#test -e用于检测目标文件是否存在,存在就写exist!到$LogFile去。
            then
            echo "$TIME INFO $base exist!" >> $LOG_FILE
            else
                cp /var/lib/mysql/$base $BAKDIR
                echo "$TIME INFO $base copying" >> $LOG_FILE
            fi
        fi
done
#保留最近8份数据
COUNT=$(ls -ldtr /data/backup/mysqlbinlog/* | wc -l)
if [ $COUNT -gt 8 ]; then
    MV_DIR=$(ls -dltr /data/backup/mysqlbinlog/* | awk 'NR==1{print $NF}')
    mkdir -p /tmp/mysql_binlog_backup && mv $MV_DIR /tmp/mysql_binlog_backup
fi
相关推荐
人类群星闪耀时19 分钟前
未来运维的发展趋势:运维领域的新技术与趋势
运维
落非24 分钟前
NFS存储基础操作
运维
Vanish_ran1 小时前
gitlab与jenkins
运维·gitlab·jenkins
朱容君1 小时前
Linux系统编程多线程之读写锁讲解
linux·开发语言
大风吹PP凉1 小时前
38配置管理工具(如Ansible、Puppet、Chef)
linux·运维·服务器·ansible·puppet
康熙38bdc1 小时前
Linux 进程间通信——共享内存
linux·运维·服务器
刘艳兵的学习博客1 小时前
刘艳兵-DBA033-如下那种应用场景符合Oracle ROWID存储规则?
服务器·数据库·oracle·面试·刘艳兵
jwybobo20071 小时前
redis7.x源码分析:(3) dict字典
linux·redis
scoone1 小时前
ssh登陆服务器后支持Tab键命令补全
linux·shell
微刻时光2 小时前
Docker部署Nginx
运维·nginx·docker·容器·经验