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
相关推荐
真真-真真8 分钟前
WebXR
linux·运维·服务器
轩辰~30 分钟前
网络协议入门
linux·服务器·开发语言·网络·arm开发·c++·网络协议
wanhengidc1 小时前
短视频运营行业该如何选择服务器?
运维·服务器
雨中rain1 小时前
Linux -- 从抢票逻辑理解线程互斥
linux·运维·c++
-KamMinG2 小时前
Centos7.9安装openldap+phpldapadmin+grafana配置LDAP登录最详细步骤 亲测100%能行
运维·grafana
Bessssss2 小时前
centos日志管理,xiao整理
linux·运维·centos
s_yellowfish2 小时前
Linux服务器pm2 运行chatgpt-on-wechat,搭建微信群ai机器人
linux·服务器·chatgpt
豆是浪个2 小时前
Linux(Centos 7.6)yum源配置
linux·运维·centos
vvw&2 小时前
如何在 Ubuntu 22.04 上安装 Ansible 教程
linux·运维·服务器·ubuntu·开源·ansible·devops
我一定会有钱2 小时前
【linux】NFS实验
linux·服务器