当前位置: 首页 > news >正文

基于inotif的文件同步备份

1 ftp

因为服务器是linux的,而备份服务器是windows server的,故而采取lftp进行同步文件。

1.1 全量同步

cat > /appdata/script/sync_all.sh <<EOF
#!/bin/bash  # FTP 服务器信息  
FTP_SERVER="ftp://192.168.0.5"
FTP_USER="ftp用户名"
FTP_PASS="ftp密码"
FTP_DIR="/mysql_bak"
LOCAL_DIR="/appdata/nfsv/mysql/full"# 使用 lftp 同步本地目录到远程服务器  
lftp -u "$FTP_USER,$FTP_PASS" "$FTP_SERVER" <<EOF set ftp:passive-mode true  # 如果需要,启用被动模式  mirror --reverse --verbose --only-newer $LOCAL_DIR $FTP_DIR bye  
EOF  # 检查 lftp 命令是否成功(注意:这里的 $? 检查的是 lftp 的退出状态)  
if [ $? -ne 0 ]; thenecho "Error occurred during FTP sync."  exit 1
fiecho "FTP sync completed successfully."
EOFchmod +x /appdata/script/sync_all.sh

1.2 增量同步

cat > /appdata/script/inc_sync.sh <<EOF
#!/bin/bashMONITOR_DIR="/appdata/nfsv/mysql/full"
DEST_SERVER="192.168.0.5"
DEST_DIR="/mysql_bak"
LFTP_USER="ftp用户名"
LFTP_PASS="ftp密码"# 创建一个临时文件来保存 lftp 会话命令
LFTP_COMMANDS_FILE=$(mktemp)
LFTP_LOG_FILE=$(mktemp)# 监听文件变化
inotifywait -r -m -e modify,create,delete,move "$MONITOR_DIR" |
while read path action file; do# 构建源文件路径local_file="$path/$file"# 构建目标文件路径echo $pathremote_path="$DEST_DIR/${path#$MONITOR_DIR}"echo $remote_pathremote_file="$remote_path/$file"echo $remote_file# 添加 lftp 会话命令到临时文件echo "open $DEST_SERVER" >> "$LFTP_COMMANDS_FILE"echo "user $LFTP_USER $LFTP_PASS" >> "$LFTP_COMMANDS_FILE"echo "cd $DEST_DIR" >> "$LFTP_COMMANDS_FILE"# 添加 mkdir 命令到 lftp 会话命令文件 (确保目录存在)echo "mkdir -p '$remote_path'" >> "$LFTP_COMMANDS_FILE"# 添加 put 命令到 lftp 会话命令文件echo "cd '$remote_path'" >> "$LFTP_COMMANDS_FILE"echo "put '$local_file'" >> "$LFTP_COMMANDS_FILE"echo "cd $DEST_DIR" >> "$LFTP_COMMANDS_FILE"  # 返回到初始目录echo "exit" >> "$LFTP_COMMANDS_FILE"# 执行 lftp 会话,并将输出重定向到日志文件lftp -f "$LFTP_COMMANDS_FILE" > "$LFTP_LOG_FILE" 2>&1# 检查 lftp 输出以获取错误信息if grep -q "Not connected" "$LFTP_LOG_FILE"; thenecho "Error: Connection not established. Please check the FTP server configuration and network connectivity."elif grep -q "No such file or directory" "$LFTP_LOG_FILE"; thenecho "Error: Could not create directory. Please check the FTP server permissions."elseecho "File uploaded successfully."fi# 清空 lftp 会话命令文件> "$LFTP_COMMANDS_FILE"
done# 清理临时文件
rm "$LFTP_COMMANDS_FILE"
rm "$LFTP_LOG_FILE"
EOFchmod +x /appdata/script/inc_sync.sh
# windows与linux文件格式存在偏差,可以按照下面的命令进行转换
sed -i 's/\r$//' inc_sync.sh

设置开机启动

cat > /etc/systemd/system/mysql_backup.service <<EOF
[Unit]
Description=MySQL Backup Service
After=network.target[Service]
Type=simple
ExecStart=/appdata/script/inc_sync.sh
Restart=on-failure
User=root
Group=root[Install]
WantedBy=multi-user.target
EOFsystemctl daemon-reload
systemctl enable mysql_backup
systemctl start mysql_backup

http://www.lryc.cn/news/423557.html

相关文章:

  • luckyexcel 编辑预览excel文件
  • 记录Java使用websocket
  • (javaweb)分层解耦
  • 2024华为数通HCIP-datacom最新题库(H12-831变题更新⑨)
  • PCIe学习笔记(21)
  • 分享Embedding 模型微调的实现
  • TED: 1靶场复现【附代码】(权限提升)
  • Python(TensorFlow)衍射光学层卷积算法模拟(英伟达GPU)
  • iOS开发进阶(二十二):Xcode* 离线安装 iOS Simulator
  • Prostgresql的Timescaledb插件/扩展部署
  • 分布式知识总结(一致性Hash算法)
  • 图数据库在社交网络分析中的应用
  • Git基础使用教程
  • 技术速递|Python in Visual Studio Code 2024年8月发布
  • 【话题】重塑未来:AI辅助编程对程序员工作的影响与应对策略
  • 在Debian上安装freeswitch
  • 论文分享 | Fuzz4All: 基于大语言模型的通用模糊测试
  • VS Code 配置docker 管理员权限终端
  • 使用Linux实现FTP云盘1
  • tombo resquiggle
  • vue3获取vue实例 并注册全局属性方法
  • function calling后,如何让大模型进行自然语言输出?
  • Android笔试面试题AI答之Kotlin(8)
  • LVS服务的搭建之NAT模式、DR模式的搭建实战
  • Raft分布式存储
  • 【Linux】使用nm命令查看动态库包含的符号表
  • 你还不知道苹果手机截长图的方法?4 种方法都可以
  • C++选择题带答案
  • Unity动画模块 之 简单创建一个序列帧动画
  • 学会高效记录并整理编程学习笔记