环境搭建

windows

安装sqlserver服务

  1. SQL Server 下载 | Microsoft

  2. 或者MSDN, 我告诉你 - 做一个安静的工具站 (itellyou.cn)

  3. 安装image-20240306215757326

  4. 关闭windows防火墙并重新运行

    image-20240306220152973

  5. 一路下一步直到

    image-20240306221651101

这样设置可以让安装该服务的用户直接

  1. image-20240306221828550

安装管理工具

image-20240306224019295

docker

2022安装

Docker:为 Linux 上的 SQL Server 安装容器 - SQL Server | Microsoft Learn

  1. 拉取镜像

    docker pull mcr.microsoft.com/mssql/server:2022-latest
    
  2. 制作容器

    sudo docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=WJJ18340.wjj" \
       -p 1433:1433 --name sql1 --hostname sql1 \
       -d \
       mcr.microsoft.com/mssql/server:2022-latest
    #密码,要求是最少8位的强密码,要有大写字母,小写字母,数字以及特殊符号,不然会有一个大坑(Docker启动Sql Server容器后过几秒就停止了)。
    
  3. 设置 Docker 主机防火墙规则

默认情况下,Docker 带有一个内置的防火墙,需要开放 1433 端口才能让外部访问 SQL Server。使用以下命令开放 Docker 主机的 1433 端口:

sudo ufw allow 1433/tcp

重启防火墙,注意重启防火墙之后才会生效。

sudo ufw reload
  1. 服务器防火墙配置1433的开放端口

  2. 配置容器内部的 SQL Server

    进入容器

    ​ docker exec -it 6239153a3f7f /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'WJJ18340.wjj'

    配置远程连接
    在 SQL Server 命令行界面中,执行以下命令来配置远程连接:

    -- 允许远程连接
    EXEC sp_configure 'remote access', 1
    GO
    RECONFIGURE
    GO
    
    -- 允许远程 DAC 连接
    EXEC sp_configure 'remote admin connections', 1
    GO
    RECONFIGURE
    GO
    
    -- 重启 SQL Server 使配置生效
    SHUTDOWN
    GO
    

这些命令将启用 SQL Server 的远程连接功能,并允许远程 DAC 连接。最后,需要重启 SQL Server 使配置生效。

测试连接,注意可以不填写端口,指定端口需要用逗号隔开而不是分号

image-20240307112459839

服务器内存小于2G的情况我们使用docker run之后会发现容器根本跑不起来,使用docker logs 查看日志会看到:

sqlservr: This program requires a machine with at least 2000 megabytes of memory.
也就是可用内存没有2g所以报错,启动不了。

image-20240307103925825

  1. 破解思路:把内存限制被修改为 512m在启动即可
    正常情况下我们可以进入docker内部去修改文件,但是这里由于启动不了docker容器,所以也就进不去,我们可以把docker内部的文件复制到宿主机,修改后在复制回去宿主机即可。
  2. 把docker内部的文件拷贝到宿主机:
    语法:docker cp [容器id]:docker容器中配置文件路径 主机路径
  3. 实例:docker cp [容器id]:/opt/mssql/bin/sqlservr "/home/sqlservr" 这样就可以把docker内部的sqlservr文件拷贝出来到home文件夹下了
docker cp cd6b86630:/opt/mssql/bin/sqlservr "/home/sqlservr"
  1. 然后修改从docker内部复制出来的文件
    先使用mv命令改一下文件名,后面修改后原始文件就还在相当于备份一下文件:mv sqlservr sqlservr.old
    img
    使用python修改内存限制代码(注意这里貌似只能使用python2,使用python3好像有点问题,centos7.6自带python2.7)

    oldfile = open("sqlservr.old", "rb").read()
    newfile = oldfile.replace("\x00\x94\x35\x77", "\x00\x80\x84\x1e")
    open("sqlservr", "wb").write(newfile)
    exit()
    

    img
    改完后就变成两个文件了一个新的一个旧的,一个修改后的一个修改前的

复制到docker之前修改一下文件权限
命令:chmod 777 sqlservr
不然直接复制进去在启动容器可能会报权限相关的错
img

把修改后的文件复制到docker内部
语法:docker cp 主机文件路径 容器id:docker容器中配置文件路径
实例:docker cp /home/sqlservr 容器id:/opt/mssql/bin/sqlservr 这样就可以把刚刚修改内存限制的文件重新拷贝进去了

docker cp /home/sqlservr cd6b8663:/opt/mssql/bin/sqlservr

安装多个版本python

下载python其他版本

sudo apt install python2

使用update-alternatives --install建立链接

sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 1
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 2
# 后面还有一个数字,分别是1和2,代表了优先级,数字越大优先级越高

选择要执行的版本

sudo update-alternatives --config python

2008安装

  1. 拉取2008镜像
docker pull exoplatform/sqlserver
  1. 启动2008镜像
docker run --name sqlserver2008 --restart always  -v  /home/mssql2008:/var/opt/mssql -d -e 'ACCEPT_EULA=Y'  -e SA_PASSWORD='WJJ18340.wjj' -e SQLSERVER_DATABASE=demo -e SQLSERVER_USER=jige -e SQLSERVER_PASSWORD='WJJ18340.wjj'   -p 2008:1433 exoplatform/sqlserver
1
-e SQLSERVER_DATABASE=demo:创建一个叫 demo 的数据库
-e SQLSERVER_USER=jige :demo数据库添加了一个用户叫 jige
-e SQLSERVER_PASSWORD='qwer!@#123':设置鸡哥用户的密码
  1. 进入容器

    docker exec -it 1b3c3393b043  /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'WJJ18340.wjj'
    
posted @ 2024-03-24 09:22  jiuwen567  阅读(79)  评论(0编辑  收藏  举报