镜像地址:Docker Hub
常用标签
2022-latest
docker pull mcr.microsoft.com/mssql/server:2022-latest2019-latest
docker pull mcr.microsoft.com/mssql/server:2019-latest2017-latest
docker pull mcr.microsoft.com/mssql/server:2017-latest2017-CU31-ubuntu-18.04
docker pull mcr.microsoft.com/mssql/server:2017-CU31-ubuntu-18.042019-CU18-ubuntu-20.04
docker pull mcr.microsoft.com/mssql/server:2019-CU18-ubuntu-20.04
拉取镜像
docker pull mcr.microsoft.com/mssql/server:2019-latest
创建映射文件夹,并给全部权限
mkdir /opt/mssql & chmod 777 /opt/mssql
创建并启动容器
docker run --name=mssqlserver2019 --restart=always -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=Pw_010203" -e "TZ=Asia/Shanghai" -v /opt/mssql:/var/opt/mssql -p 1433:1433 -d mcr.microsoft.com/mssql/server:2019-latest
如果需要直接开启MSSQL代理 可以添加参数 -e "MSSQL_AGENT_ENABLED=true"
完整的环境变量可以参考微软的官方文档:在 Linux 上使用环境变量配置 SQL Server 设置
开启SQLSERVER 代理
以root执行命令
docker exec -u root mssqlserver2019 /opt/mssql/bin/mssql-conf set sqlagent.enabled true
重启容器
docker restart mssqlserver2019
设置定时备份/压缩/清理
新建.sh文件
#!/bin/bash
#
# 备份数据库
# 功能:数据库备份、压缩、定时清理
# 需要借助 crontab 定时任务实现
# 必须需要设置参数:saveday/dbname/folder/user/password/contrainerId
#
#设置备份保留天数
saveday=2
#数据库名称
dbname='dbname'
#设置mssql备份目录(容器映射目录)
folder='/mnt/mssql/data/bak/'
#用户名
user=sa
#密码
password='pwd'
#容器名称
containerId='mssqlserver2017'
#数据库服务器,一般为localhost
host=localhost
#当前日期(年月日时)
day=(date +%Y%m%d%H)
#根据保留天数获取需要清理的文件时间
removedate=(date -d "saveday days ago" +"%Y%m%d%H")
#备份的文件名
bakfilename=dbname'_'day
#备份操作
echo "数据库dbname 开始备份"
docker exec containerId /opt/mssql-tools/bin/sqlcmd \
-Shost -U user -Ppassword \
-Q "BACKUP DATABASE [dbname] TO DISK = N'/var/opt/mssql/data/bak/dbname/bakfilename.bak' WITH NOFORMAT, NOINIT, NAME = N'dbname Backup day', SKIP, NOREWIND, NOUNLOAD, STATS = 10"
#进入保存目录
cdfolderdbname
#将备份压缩成zip文件
echo '将备份压缩成zip文件'
zipbakfilename.zip bakfilename.bak
#删除打包前的文件
echo '删除压缩前的备份文件'
rm -fbakfilename.bak
#删除保存的zip文件
if [ -e "dbname"_"removedate.zip" ]; then
echo 删除备份 dbname'_'removedate.zip
rm -f dbname'_'removedate.zip
else
echo 文件 dbname'_'removedate.zip 不存在,跳过删除
fi
cd ~
修改 crontab 配置文件
crontab -e
设置
0 1,12 * * * /bin/bash /home/db_bak_shell/xxx.sh
以上的命令为每天的1点和12点执行 /home/db_bak_shell_xxx.sh 文件.详细的使用方法查看下一节。
crontab(来源:ChatGPT)
crontab
是一个在 Unix 和类 Unix 系统上用于管理定时任务的命令。它允许你在指定的时间间隔内运行命令、脚本或程序。
要使用 crontab
命令,可以按照以下步骤进行操作:
编辑 crontab 文件: 执行以下命令来编辑当前用户的 crontab 文件:
crontab -e
如果是以 root 用户身份编辑系统级的 crontab 文件,可以执行以下命令:
sudo crontab -e
添加定时任务: 在编辑模式下,你可以添加定时任务。每一行代表一个定时任务,每个字段用空格或制表符分隔。 典型的 crontab 行的格式如下:
* * * * * command
其中,
*
表示通配符,表示匹配所有可能的值。 这五个星号分别表示分钟、小时、日期、月份和星期。command
是你要定期执行的命令或脚本。 例如,要每天下午 3 点执行一个脚本,可以添加以下行:0 15 * * * /bin/bash /path/to/script.sh
表达式测试地址:https://tool.lu/crontab/
保存并退出: 在编辑模式下,保存并退出编辑器。对于大多数编辑器,你可以按下
Ctrl + X
,然后输入Y
来保存修改。查看现有的 crontab 任务: 如果你想查看当前用户的 crontab 任务列表,可以执行以下命令:
crontab -l
如果要查看系统级的 crontab 任务列表,可以执行以下命令:
sudo crontab -l
删除 crontab 任务: 如果你想删除当前用户的 crontab 任务,可以执行以下命令:
crontab -r
如果要删除系统级的 crontab 任务,可以执行以下命令:
sudo crontab -r
常见问题
SQL Server 2019 will run as non-root by default.
This container is running as user mssql.
To learn more visit https://go.microsoft.com/fwlink/?linkid=2099216.
/opt/mssql/bin/sqlservr: Error: The system directory [/.system] could not be created. File: LinuxDirectory.cpp:420 [Status: 0xC0000022 Access Denied errno = 0xD(13) Permission denied]
文件访问权限问题:
chmod 777 映射文件夹