数据备份一直是刚需,数据备份的方式也多种多样,经过自己摸索学习,目前总结到以下的备份方式,环境为Ubuntu22.10。
备份方式
1. 不推荐的脚本备份
- 创建脚本文件
touch /home/backup.sh
- 添加执行权限
chmod +x /home/backup.sh
- 写脚本
vi /home/backup.sh
脚本一
#!/bin/sh
mkdir /home/backup
#创建一个临时文件(要保存备份的路径)
cp -r /home/targe /home/backup
#数据存在targe目录下,备份到backup目录下,所以先将数据拷过来
tar -zcPvf /home/backup$(date +%Y%m%d).tar.gz /home/backup
#将数据所在文件夹backup打包
rm -rf /home/backup/
#删除临时文件内容
find ./ -mtime +30 -name "*.tar.gz" -exec rm -rf {} \;
#删除改文件夹下超过30天的文件
脚本二(未测试)
#########################################################################
# File Name: back_template.sh
# Author: happy
# mail: zaqwsx526@163.com
# Created Time: Wed 06 Jun 2018 12:17:16 PM CST
#########################################################################
#!/bin/bash
SOURCE_DIR=(
$*
)
TARGET_DIR=/backup/data/
YEAR=`date +%Y`
MONTH=`date +%m`
DAY=`date +%d`
WEEK=`date +%u`
FILES=system_backup.tgz
CODE=$?
if [ -z "$*" ];then
echo -e "Please Enter Your Backup Files or Directories\n--------------------------------------------\nExample $0 /boot /etc ......"
exit
fi
#Determine Whether the Target Directory Exists
if [ ! -d $TARGET_DIR/$YEAR/$MONTH/$DAY ];then
mkdir -p $TARGET_DIR/$YEAR/$MONTH/$DAY
echo "This $TARGET_DIR is Created Successfully !"
fi
#EXEC Full_Backup Function Command""
Full_Backup()
{
if [ "$WEEK" -eq "7" ];then
rm -rf $TARGET_DIR/snapshot
cd $TARGET_DIR/$YEAR/$MONTH/$DAY
tar -g $TARGET_DIR/snapshot -czvf $FILES `echo ${SOURCE_DIR[@]}`
[ "$CODE" == "0" ]&&echo -e "--------------------------------------------\nThese Full_Backup System Files Backup Successfully !"
fi
}
#Perform incremental BACKUP Function Command
Add_Backup()
{
cd $TARGET_DIR/$YEAR/$MONTH/$DAY ;
if [ -f $TARGET_DIR/$YEAR/$MONTH/$DAY/$FILES ];then
read -p "These $FILES Already Exists, overwrite confirmation yes or no ? : " SURE
if [ $SURE == "no" -o $SURE == "n" ];then
sleep 1 ;exit 0
fi
#Add_Backup Files System
if [ $WEEK -ne "7" ];then
cd $TARGET_DIR/$YEAR/$MONTH/$DAY ;tar -g $TARGET_DIR/snapshot -czvf $$_$FILES `echo ${SOURCE_DIR[@]}`
[ "$CODE" == "0" ]&&echo -e "-----------------------------------------\nThese Add_Backup System Files Backup Successfully !"
fi
else
if [ $WEEK -ne "7" ];then
cd $TARGET_DIR/$YEAR/$MONTH/$DAY ;tar -g $TARGET_DIR/snapshot -czvf $FILES `echo ${SOURCE_DIR[@]}`
[ "$CODE" == "0" ]&&echo -e "-------------------------------------------\nThese Add_Backup System Files Backup Successfully !"
fi
fi
}
Full_Backup;Add_Backup
2. rsync
Rsync(remote synchronize)是一个远程文件同步工具;
Rsync使用“Rsync算法”来同步文件,该算法只传送两个文件的不同部分,因此速度相当快;
- 安装(忽略)
Linux发行版默认已经安装rsync工具,如果想自行安装,可以参考如下安装步骤:
官网上下载 rsync-x.x.x.tar.gz
tar -zxvf rsync-3.1.0.tar.gz
cd rsync-3.1.0
./configure -prefix=/opt/app/rsync
make
make install
安装完成,需将 /opt/app/rsync/bin 增加到PATH中;
- 使用 命令行使用rsync的语法
#同步文件夹到远程
rsync -avI dir_name remote_ip:dir_name
#同步文件夹到远程,传输时进行压缩
rsync -avzI dir_name remote_ip:dir_name
#同步文件夹到远程(保持严格同步,即本地删除,远程也同步删除)
rsync -avzI –-delete dir_name remote_ip:dir_name
#排除指定的文件或目录,可多次使用,支持通配符(比如.svn、.git等目录)
rsync -avzI —exclude=/a/b/*.svn —exclude=/a/b/*.git dir_name remote_ip:dir_name
#当排除的文件较多时,可将文件写到某文件中,同时使用 --exclude-from 指定该文件即可。
rsync -avzI —exclude-from=/a/exclude_file_list.txt dir_name remote_ip:dir_name
以上使用的选项说明如下:
-a, —archive 归档模式,等于-rlptgoD;
-r, —recursive 递归模式;
-l 保持符号连接;
-p 保持文件原有权限;
-t 保持文件原有修改时间;
-g 保持文件原有用户组;
-o 保持文件原有属主;
-D -devices -specials,保持块设备文件和特殊文件;
-I 强制扫描,放弃“quick check”策略(quick check策略,通过查看文件的时间戳和文件大小,先排除一批认为相同的文件[rsync不会对文件夹本身做“quick check”]);
-z, —compress 压缩,默认的压缩算法和gzip一样;
-v, --verbose 显示进度详细信息;
-q, —quiet 精简输出模式;
-R, —relative 保持全路径;
--progress 显示传输进度(百分百);
--delete 本地删除某一文件,远程也同步的删除该文件,保持严格的一致(不加该参数,则表示只增不减);
--exclude=”*.tmp” 排除某些文件;
--exclude-from=FILE 排除FILE中指定模式的文件;
--port=PORT 指定其他的rsync服务端口;
注意:
就路径格式而言,如果源路径末尾使用/,则rsync会将源路径尾端目录中的所有内容复制到目的端;如果没有使用/,rsync会将源路径尾端目录本身复制到目的端。
rsync -av /home/test/ /home/backup; #将test目录中的内容备份;
rsync -av /home/test /home/backup; #将test目录本身备份;
如果目的路径末尾使用/,则rsync会将来自源端的内容复制到目的端的目录中;如果没有使用/,则rsync会在目的端路径尾部创建一个和目的端尾部目录同名的目录,并将源端内容复制到该目录中。
rsync -av /home/test /home/backup/; #将源端内容复制到backup目录中;
rsync -av /home/test /home/backup; #在/home/backup创建下级目录backup,并将源端内容复制到/home/backup/backup目录中;
设置定时备份
例如:设置脚本每7天执行一次。
安装crond 如果没有安装crond服务就先装上服务。 检查服务状态:service crond status
修改crontab内容 输入命令:crontab –e 进入后继续输入命令:0 0 /7 * /home/backup.sh 设置为每7天执行一次脚本文件 然后,保存退出:wq
sh脚本前面五个字段分别表示分钟(0-59)、小时(0-23)、日(1-31)、月(0-12)、星期几(0-6)后面的为脚本所在目录
- 重新启动crond服务 输入命令:service crond restart