项目

一般

简介

方案 #6 windows环境下的Redmine数据备份方案

redmineplugins.cn Admin28 天 之前添加

准备存储备份的目录

创建两个用于存储备份数据的文件夹。这些目录将位于Bitnami Redmine 安装文件夹之外。作为示例,在服务器的D:\上创建这些文件夹,创建了一个名为“Backup”的主文件夹和两个名为“Database”和“Files”的子文件夹。注意,要对 Redmine 进行完整备份,至少分别执行两个操作:备份数据库和redmine的files整个文件夹到服务器上的备份目录。另外,根据需要也可以备份Redmine的插件和主题等其它目录。

获取数据库有关配置

备份脚本需要引用到数据库的关键配置信息。转到安装Redmine时Bitnami创建的安装文件夹并找到database.yml文件。本例中文件的路径是:C:/Bitnami/5/apps/redmine/htdocs/config/database.yml
  • database(Redmine数据库名称)
  • username(访问数据库的用户名)
  • password(本里中bitnami安装脚本自动创建的密码)

创建手动备份脚本:

假设数据库服务器是localhost,端口是标准的3306。创建备份脚本,告诉系统执行备份所需执行的所有操作。

#!/bin/bash
# 按时间戳定义数据库备份文件名称
DATE=$(date +"%Y-%m-%d-%H%M")
SQLFILE="${DATE}-redmine-databasedump.sql" 
# 根据数据库的实际配置修改替换下述选项具体的值
DATABASE="bitnami_redmine" 
USER="bitnami" 
PASSWORD="08c6355aea" 
# 指定数据库备份文件存储的目标位置,就是上述存储备份的目录的数据库文件保存的文件夹
mysqldump -u "${USER}" -p"${PASSWORD}" "${DATABASE}" | gzip > D:/Backup/Database/${SQLFILE}.gz" 
# 按时间戳定义附件(files)备份文件名称
FILES_DATE=$(date +"%Y-%m-%d-%H%M")
FILES_DIR="C:/Bitnami/5/apps/redmine/htdocs/files" 
FILES_ARCHIVE="C:/Users/Administrator/Desktop/Backup/Files/${FILES_DATE}-redmine-filesdump.zip" 
# 使用7z压缩工具拷贝并压缩备份数据 (7-zip工具下载地址 https://www.7-zip.org/download.html)
cd "$FILES_DIR" && 7z a -r "$FILES_ARCHIVE" ./*
# 删除临时文件仅保留压缩文件
rm -r "D:/Backup/Files/${FILES_DATE}-redmine-filesdump" 

将脚本文件命名为:backup.bat,可以将其保存在Redmine根文件夹中。或者将该脚本放在其它非redmine安装目录,避免未来升级Redmine时误删除该文件。

使用备份脚本实现手动备份

脚本中使用的数据库名称、用户名和密码替换为在database.yml 文件中找到的对应内容。这是脚本在启动时将执行的操作:

  1. 制作数据库的备份
  2. 将其压缩为 .gz 文件。
  3. 将文件保存到 /backups/database 目录
  4. 将 redmine /files 目录复制到 /backups/files 文件夹
  5. 将其压缩为 .zip 文件
  6. 删除复制的文件夹

要手动启动脚本,必须按照以下步骤操作:

  1. 转到 Bitnami Redmine 安装文件夹,本例中为 D:/Bitnami/5
  2. 双击文件“use_redmine”。这将打开 Bitnami 控制台并置于同一目录中。
  3. 启动以下命令:
sh backup.bat

按回车键,当脚本执行完成时(根据数据库和文件目录的大小,可能需要几秒钟或几分钟),脚本应该创建两个备份文件,转到备份文件夹下检查它们是否已创建,文件存在表明手动备份操作成功。样例文件如下所示:

2024-03-20-1132-redmine-databasedump.sql.gz
2024-03-20-1134-redmine-filesdump.zip

按计划无人值守自动备份

虽然在 Windows 中没有类似linux下的计划任务 cron 作业程序,但windows有“任务计划程序”,它允许周期性重复处理程序。在开始计划任务之前,必须创建第一个新的脚本来call-redmine-backup.bat告诉Windows使用Bitnami Redmine控制台,通过新的脚本调用上面的手动备份脚本,新脚本也保存到Redmine根文件夹中。

call C:\Bitnami\5\use_redmine.bat
bash backup.bat

Windows 上 Redmine备份的计划任务

假设希望每天凌晨 5 点进行完整备份。创建一个计划任务,每天凌晨 5 点启动调用创建的脚本的命令。步骤如下:

  1. 在“开始”菜单中查找“任务计划程序”,打开 Windows 任务计划程序。
  2. 单击右侧窗格中的“创建任务”。
  3. 在“常规”选项卡上,输入任务的名称(例如“Redmine Backup”)。
  4. 配置任务无论用户是否登录都运行,并以最高权限运行。
  5. 在“触发器”选项卡上,单击“新建”并将触发器设置为每天凌晨 5:00 运行。
  6. 在“操作”选项卡上,单击“新建”并配置启动程序的操作,然后输入脚本文件的路径。
  7. 在“设置”选项卡上,根据需要配置任何其他设置。
  8. 单击“确定”保存计划任务。
  9. 单击“启用”。

现在,备份将在每天凌晨5点进行。

创建计划任务后,请务必记住必须“启用”它,否则备份命令将不会启动。可以通过单击“运行”测试计划任务是否有效.

如果为避免影响服务器剩余空间,可以在原始脚本中添加自动删除旧文件的语句。本例中,将仅保留每个文件夹中的最后3个文件。备份中的所有其他文件将自动删除。新脚本:

#!/bin/bash
# 按时间戳定义数据库备份文件名称
DATE=$(date +"%Y-%m-%d-%H%M")
SQLFILE="${DATE}-redmine-databasedump.sql" 
# 根据数据库的实际配置修改替换下述选项具体的值
DATABASE="bitnami_redmine" 
USER="bitnami" 
PASSWORD="08c6355aea" 
# 指定数据库备份文件存储的目标位置,就是上述存储备份的目录的数据库文件保存的文件夹
mysqldump -u "${USER}" -p"${PASSWORD}" "${DATABASE}" | gzip > "D:/Backup/Database/${SQLFILE}.gz" 
# 按时间戳定义附件(files)备份文件名称
FILES_DATE=$(date +"%Y-%m-%d-%H%M")
FILES_DIR="C:/Bitnami/5/apps/redmine/htdocs/files" 
FILES_ARCHIVE="D:/Backup/Files/${FILES_DATE}-redmine-filesdump.zip" 
# 使用7z压缩工具拷贝并压缩备份数据 (7-zip工具下载地址 https://www.7-zip.org/download.html)
cd "$FILES_DIR" && 7z a -r "$FILES_ARCHIVE" ./*
# 删除临时文件仅保留压缩文件
rm -r "D:/Backup/Files/${FILES_DATE}-redmine-filesdump" 
# 删除旧的临时备份数据,仅保留最近的3个备份
ls -t "D:/Backup/Files"/* | awk 'NR>3' | xargs rm --
ls -t "D:/Backup/Database"/*.gz | awk 'NR>3' | xargs rm --

最终无人值守自动备份效果:

  • 每天凌晨5点备份数据库和文件,并将其压缩版本存储在备份目录中
  • 当备份文件多余3个时,备份计划将删除旧的多余备份文件,每个目录中仅保留最后3个最近的备份文件。

评论

添加评论