環境搭建

jiuwen567發表於2024-03-24

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'