拉取镜像

1
sudo docker pull mcr.microsoft.com/mssql/server:2019-latest

安装容器

1
2
3
4
5
6
7
8
sudo docker run -itd \
-e "ACCEPT_EULA=Y" \
-e "MSSQL_COLLATION=Chinese_PRC_CI_AS_WS" \
-e "MSSQL_SA_PASSWORD=Fzusosd2025" \
-v /Users/macbookpro/Desktop/data:/var/opt/mssql/data \
-p 14331:1433 \
--name mssql \
mcr.microsoft.com/mssql/server:2019-latest \
脚本参数说明
sudo docker run -itd创建并运行容器
-e “ACCEPT_EULA=Y”默认选择同意协议许可证
-e “MSSQL_COLLATION=Chinese_PRC_CI_AS_WS”设置排序规则,如果不设置此项则使用默认规则,使用中会乱码
-e “MSSQL_SA_PASSWORD=Fzusosd2025”设置用户sa的密码为”Fzusosd2025”
-v /Users/macbookpro/Desktop/data:/var/opt/mssql/data宿主机共享目录:容器映射目录
-p 14331:1433映射宿主机端口:容器端口
–name mssql容器名
mcr.microsoft.com/mssql/server:2019-latest镜像名称

进入容器

1
docker exec -it mssql "bash" 

登录sqlserver

1
/opt/mssql-tools18/bin/sqlcmd -S localhost -U SA -P '密码' -C
  • 这里的 -C 参数告诉 sqlcmd 忽略证书验证错误

查询备份文件中的数据文件和日志文件的逻辑名称

1
2
3
1> RESTORE FILELISTONLY
2> FROM DISK = '/var/opt/mssql/data/Test.bak'
3> go

获得数据文件和日志文件的逻辑名称:Test,Test_log

恢复数据

1
2
3
4
5
6
7
8
9
10
11
12
#模板
RESTORE DATABASE new_database
FROM DISK = 'C:\backup\old_database.bak'
WITH MOVE 'old_database_data' TO 'C:\data\new_database_data.mdf',
MOVE 'old_database_log' TO 'C:\logs\new_database_log.ldf';

#举例
1> RESTORE DATABASE SOSD
2> FROM DISK = '/var/opt/mssql/data/Test.bak'
3> WITH MOVE 'SOSD' TO '/var/opt/mssql/data/Test.mdf',
4> MOVE 'SOSD_log' TO '/var/opt/mssql/data/Test_log.ldf';
5> go

解释:

WITH MOVE 选项用于指定新的数据文件和日志文件的路径。由于你正在恢复到一个新的数据库,因此数据文件和日志文件通常需要指定新的路径和名称。

old_database_data 和 old_database_log 是备份文件中的数据文件和日志文件的逻辑名称,第一步图片框出来的两个名称需要替换这两个old名称

  • 报错的话基本是语法问题,拿到ai那边重新写一下就行

备份文件

1
2
3
4
5
6
#备份格式
1> BACKUP DATABASE your_database_name TO DISK = 'path_to_backup_file.bak';

#举例
1> BACKUP DATABASE Test TO DISK = '/root/mssql.bak';
2> go

参考文章:

docker下安装SQL Server 2019_docker sqlserver2019-CSDN博客

Docker 安装sql server 登陆失败_sqlcmd: error: microsoft odbc driver 18 for sql se-CSDN博客

sqlserver使用bak文件恢复数据库_sqlserver bak文件还原到其他数据库-CSDN博客