MeterSphere 数据备份


Administrator
飞致云 发布于 2022-06-14 / 1197 阅读 / 0 评论 /
主要是数据库数据备份以及 /opt/metersphere/data路径下的body和jar目录备份手动备份#数据库备份:docker exec -i mysql mysqldump -uroot -pPassword123@mysql metersphere -> metersphere.sql

主要是 mysql 数据库数据备份以及 /opt/metersphere/data 路径下的 body 和 jar 目录备份

手动备份

#数据库备份:
docker exec -i mysql mysqldump -uroot -pPassword123@mysql metersphere > metersphere.sql

#body/jar 目录备份
zip -r XXX.zip /opt/metersphere/data/body /opt/metersphere/data/jar

若备份数据库时出现mysqldump: Error 2020: Got packet bigger than ‘max_allowed_packet’ bytes when dumping tableapi_scenario_report_detailat row: 94,则添加max_allowed_packet参数,如下:

docker exec -i mysql mysqldump -uroot -pPassword123@mysql metersphere --max_allowed_packet=2G > metersphere.sql

定时任务自动备份

1. 备份

备份脚本默认保留最近的7份备份文件(如每天备份一次,则保留最近7天的备份文件)。为加强数据的安全性,备份脚本中采取本地加远程备份两种策略。远程备份默认未开启,如果需要开启异地备份,可以将 ms_backup.sh 脚本中 isRemote 值修改为 true。脚本备份方式周一到周六是精简备份,周未为全量备份。

1.1 主从复制

数据库搭建主从节点即可。

1.2 异地主机备份

1.2.1 准备⼯作:配置远程机器免密登录
1#本地机器:数据库所在的机器
#远程机器:存放备份⽂件的机器

#1、远程机器执⾏
mkdir -p ~/.ssh 
chmod 764 ~/.ssh 
touch ~/.ssh/authorized_keys 
chmod 644 ~/.ssh/authorized_keys

2、本地机器执⾏
ssh-keygen #此处会提示输⼊密码 可以直接回⻋跳过
cd ~/.ssh/
scp id_rsa.pub root@远程服务器ip:~/.ssh/

3、远程机器执⾏,将公钥追加⾄⽂件末尾
cat id_rsa.pub >> authorized_keys 

4、本地机器验证免密登录远程机器
ssh root@远程服务器ip
1.2.2 创建备份脚本

在本地服务器创建名为 ms_backup.sh 备份脚本

#!/bin/bash

#历史备份数据保留天数
keepBackupNum=7
#备份文件输出目录
backupDir=/opt/db_bak
#数据库用户名
username=root
#数据库密码
password=Password123@mysql
#需要备份的库名
dbName=metersphere
#备份文件的后缀名称
currentTime=`date "+%Y-%m-%d-%H-%M-%S"`
#备份文件的完整名称
backupTarFileName=ms_db_$currentTime.tar.gz
#导出sql文件的完整名称
dumpSqlFilePath=$backupDir/ms_db_$currentTime.sql
#是否使用远程备份
isRemote=false
#推送远程服务器ip地址
remoteIp=10.1.12.13
#推送远程服务器用户名
remoteUser=root
#推送远程服务器目录
remotePath=/opt/db_back/28082
#数据库是否内置
isBuiltIn=true
#设置周天全量备份
DAY_OF_WEEK=$(date +%u)

echo dumpSqlFilePath=$dumpSqlFilePath

#没有备份文件夹则创建
if [  ! -d  "$backupDir" ];then
  mkdir -p "$backupDir"
else
  echo "--------------开始进行备份-----------------"
fi

if [ "${isBuiltIn}" = "true" ]; then
      if [ "${DAY_OF_WEEK}" = "7" ]; then
          #内置全量备份
           echo "内置全量备份"
           docker exec -i mysql mysqldump -u${username} -p${password} ${dbName} --max_allowed_packet=2G > $dumpSqlFilePath
           else
           echo "内置精简备份"
           #内置精简数据备份(忽略报告数据、操作日志、消息通知的信息)
           docker exec -i mysql mysqldump -u${username} -p${password}  ${dbName} --ignore-table=metersphere.operating_log --ignore-table=metersphere.notification --ignore-table=metersphere.api_scenario_report_detail --ignore-table=metersphere.api_scenario_report_result --ignore-table=metersphere.api_scenario_report_structure --max_allowed_packet=2G > $dumpSqlFilePath
      fi
   else
       if [ "${DAY_OF_WEEK}" = "7" ]; then
           #外置全量备份
            mysqldump -u${username} -p${password} ${dbName} --max_allowed_packet=2G > $dumpSqlFilePath
           else
           #外置精简数据备份(忽略报告数据、操作日志、消息通知的信息)
            mysqldump -u${username} -p${password}  ${dbName} --ignore-table=metersphere.operating_log --ignore-table=metersphere.notification --ignore-table=metersphere.api_scenario_report_detail --ignore-table=metersphere.api_scenario_report_result --ignore-table=metersphere.api_scenario_report_structure --max_allowed_packet=2G > $dumpSqlFilePath
      fi
fi

cd $backupDir
 
tar zcvf  $backupTarFileName $dumpSqlFilePath

if [ "${isRemote}" = "true" ]; then
  #发送备份文件到远程机器
  scp $backupTarFileName $remoteUser@$remoteIp:$remotePath  2>> "error.log"

  if [ $? -eq 0 ]; then
    echo "---------------远程备份完成----------------"
  else
    echo "---------------远程备份失败----------------"
  fi
fi

rm -rf $backupDir/ms_db_$currentTime.sql

#remove outdated backup files

output=`ls -lt $backupDir/*.tar.gz | awk '{print $9}'`
step=0
echo "---------------开始清理$keepBackupNum天前备份数据----------------"
for backupFile in $output ;do
    step=$((step+1))
    echo step=$step
    echo $backupFile
    if [ $step -gt $keepBackupNum ];then
        echo Remove outdated backup $backupFile
        rm -rf  $backupFile
    fi
done
echo "---------------结束清理$keepBackupNum天前备份数据----------------"

2.3 创建定时任务

在本地服务器创建名为 install_ms_backup.sh 定时任务脚本

#!/bin/bash
#每天凌晨⼀点执⾏备份脚本
chmod +x /opt/db_bak/ms_backup.sh 
timedate_fields="0 1 * * *"
cmd="bash /opt/db_bak/ms_backup.sh"
crontab -l | grep "$cmd " > /dev/null 2>&1
if test $? -ne 0; then
crontab -l > crontab.tmp
echo "$timedate_fields $cmd" >> crontab.tmp
 crontab crontab.tmp
fi

2.3 执行定时任务脚本

chmod +x ms_backup.sh.sh
chmod +x install_ms_backup.sh 
sh install_ms_backup.sh 



是否对你有帮助?