在Docker中运行SQLServer for Linux

时间:2025-03-12 17:15   作者:ChenReal    阅读:11

这两天公司的服务器需要做一些迁移,正好我有理由把几的MSSQL老项目彻底Linux化了。

原来的几个老项目的数据库是在Windows上跑的,数据库是MSSQL2012。我准备将它迁移到MSSQL for Linux上,服务部署在Docker容器里。

下面是我的操作步骤:

1、拉取镜像

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

2、启动实例

docker run -d --restart=always \
 --name mssql-server \
 --hostname mssql2019 \
 --shm-size 1g \
 -it -m 2048M \
 -p 1433:1433 \
 -e 'ACCEPT_EULA=Y' \
 -e 'MSSQL_SA_PASSWORD=MyPass12345#' \
 -e 'TZ=Asia/Hong_Kong' \
 -v db:/var/opt/mssql \
 mcr.microsoft.com/mssql/server:2019-latest

特别说明:

  • Windows自古MSSQL都是吃内存的大户,多少内存都会被他用到仅剩90%。所以为了不影响我的其他应用资源,特意加了-it -m 2048M,把内存使用上线限定在2G以内,也达到官方推荐的最低内存标准了。
  • 为了数据能持久化,重启Docker实例不会被抹掉,我们需要增加卷,这个玩惯Docker都很熟悉。但是,这里有个坑!本地Volume只能用相对路径:db:/var/opt/mssql。如果用了绝对路径,例如:/var/docker/mssql/db:/var/opt/mssql,不好意思,会报错!相对路径Volume的实际路径会跑到这里/var/lib/docker/volumes/db,做个软链接。这样就容易找了:ln -sf /var/lib/docker/volumes/db/_data ./db

3、还原数据库

  • 创建备份目录
docker exec -it mssql-server mkdir /var/opt/mssql/backup
  • 复制备份文件
docker cp main_db.bak mssql-server:/var/opt/mssql/backup
  • 执行还原SQL脚本
RESTORE FILELISTONLY FROM DISK = '/var/opt/mssql/backup/main_db.bak';

RESTORE DATABASE bwyv1_scp_db FROM DISK = '/var/opt/mssql/backup/main_db.bak' 
WITH MOVE 'main_db' TO '/var/opt/mssql/data/main_db.mdf', 
MOVE 'main_db_log' TO '/var/opt/mssql/data/main_db_log.ldf';
  • 创建登录账号
CREATE LOGIN [testuser] WITH PASSWORD = 'test123456', CHECK_POLICY = OFF, CHECK_EXPIRATION = OFF, DEFAULT_DATABASE = [main_db]

GO
  • 设置数据库owner
USE [main_db]
GO
DROP USER [testuser]
GO
CREATE USER [testuser] FOR LOGIN [testuser]
GO
EXEC sp_addrolemember N'db_owner', N'testuser'
GO

4、备份数据库

-- 定义备份文件的路径和名称
DECLARE @backupPath NVARCHAR(256);

SET @backupPath = '/var/opt/mssql/backup/main_db_backup_' + CONVERT(NVARCHAR(20), GETDATE(), 112) + '.bak';
 
-- 执行完整备份
BACKUP DATABASE main_db
TO DISK = @backupPath

 

评论
0/200