Linux下定时自动备份Docker中所有SqlServer数据库

[复制链接]
发表于 2022-9-27 17:24:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
准备工作


  • 一台Linux(Centos7为例)服务器。
  • 安装Docker服务。
  • 安装并启动SqlServer容器服务。
编写Shell文件

给出一个备份的范例
  1. #!/bin/bash
  2. #设置mssql备份目录
  3. folder=/var/opt/mssql/data/databack/
  4. day=`date +%Y%m%d%H%M%S`
  5. #数据库服务器,一般为localhost
  6. host=localhost
  7. #用户名
  8. user=sa
  9. #密码
  10. password='********'
  11. # 容器名称
  12. containerId='sqlserver'
  13. # 循环获取数据库名称
  14. for line in $(docker exec $containerId /opt/mssql-tools/bin/sqlcmd \
  15.    -S $host -U $user -P $password \
  16.    -Q "select [name] from master.dbo.SysDatabases where [dbid] > 4")
  17. do
  18.     # 判断是否是数据库名称
  19.     if [[ $line =~ ^[a-zA-Z0-9_]+$ && $line != 'name' && $line != 'rows' ]]; then
  20.         echo "数据库 $line 开始备份"
  21.         docker exec $containerId /opt/mssql-tools/bin/sqlcmd \
  22.         -S $host -U $user -P $password \
  23.         -Q "BACKUP DATABASE [$line] TO DISK = N'$folder$line/$line$day.bak' WITH NOFORMAT, NOINIT, NAME = N'$line Backup $day', SKIP, NOREWIND, NOUNLOAD, STATS = 10"
  24.     fi
  25. done
复制代码
在Linux添加定时任务

添加定时任务需要使用到Linux的crontab服务。我们可以通过下列命令来检测并安装这个服务。
  1. # 检查crontab工具是否安装
  2. crontab -l
  3. # 检查crond服务是否启动
  4. service crond status
  5. # 如果未安装服务我们需要进行安装
  6. yum install vixie-cron
  7. yum install crontabs
复制代码
再确认安装完成后我们使用命令 crontab -e 打开crontab的编辑功能,添加如下示例:
  1. # 定时任务 每日0点备份
  2. # 注意别忘记 sh 命令
  3. 0 0 * * * sh /root/databack/sqlServerBackup.sh
复制代码
添加完成后可以使用命令(systemctl restart crond),重启下crond服务确保服务能正常运行。
crontab格式介绍

参考生成工具 https://tool.lu/crontab/
格式: * * * * * comand(*以空格或tab隔开)

  • 第一个* : 分钟(0--59)
  • 第二个* : 小时(0--23)
  • 第三个* : 日期(0--31)
  • 第四个* : 月份(1--12)
  • 第五个* : 星期0--7(0或者7表示星期天)
  • comand : 要执行的操作
举例:

  • 每晚21:30重启apache: 30 21 * * * service httpd restart
  • 每月1、10、22日的4:45重启apache : 45 4 1,10,22 * * service httpd restart
  • 每月1到10日的4:45重启apache : 45 4 1-10 * * service httpd restart
  • 每隔两分钟重启apache : */2 * * * * service httpd restart 或者 1-59/2 * * * * service httpd restart
  • 每晚11点到早上7点间,每隔1小时重启apache : 0 23-7/1 * * * service httpd restart
  • 每晚18:00至23:00,每隔30分钟重启apache : 0,30 18-23 * * * service httpd restart 或 0-59/30 18-23 * * * service httpd restart
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表