[Update] How to install MSSQL Server on Mac M2 using Docker

近期將電腦升級為 Mac M2 ,之前文章中所使用 2019 & 2017 的版本因為 ARM 架構而無法再繼續使用;經搜尋找到 Using SQL Server on M1 based Mac with Docker 並實作成功、紀錄如下:

一、Docker 已支援 ARM 、故可以直接由官網下載安裝(我使用 brew 的方式)。

brew install --cask docker

二、在 hub.codkcer.com 中找到 Azure SQL Edge 的 docker image 、並將其 pull 下來。

docker pull mcr.microsoft.com/azure-sql-edge

http://idea0816.synology.me/wordpress/wp-content/uploads/2023/05/截圖-2023-05-03-上午9.09.43.png

三、運行(特別注意密碼需為強密碼才不會有問題)。
20250220:修正以下運行指令

docker run --cap-add SYS_PTRACE -e 'ACCEPT_EULA=1' -e 'MSSQL_SA_PASSWORD=Admin@123' -e 'MSSQL_PID=Developer' -e 'MSSQL_USER=SA' -p 1433:1433 --name azuresqledge -d mcr.microsoft.com/azure-sql-edge

http://idea0816.synology.me/wordpress/wp-content/uploads/2023/05/截圖-2023-05-03-上午9.16.52.png

四、如 HOW TO RESTORE SQL SERVER ON MAC USING DOCKER 提到的在 Azure Data Studio 連線資料庫。

http://idea0816.synology.me/wordpress/wp-content/uploads/2023/05/截圖-2023-05-03-上午9.20.53.png

Error Message:在新版的 Azure Data Studio 要 Restore 資料庫時可能會跳出「You must enable preview features in order to use restore」 的錯誤訊息。

http://idea0816.synology.me/wordpress/wp-content/uploads/2023/05/截圖-2023-05-03-上午10.26.02.png

要去 Setting 中將其打開、這樣在 Restore 時就不會出現錯誤了。

http://idea0816.synology.me/wordpress/wp-content/uploads/2023/05/截圖-2023-05-03-上午10.26.31.png

http://idea0816.synology.me/wordpress/wp-content/uploads/2023/05/截圖-2023-05-03-上午10.27.14.png

五、將備份資料庫拷貝進 Docker。

sudo docker cp database.bak Azuresqledge:/var/opt/mssql/backup

六、依之前方式 Restore Database 即可完成。

HOW TO RESTORE SQL SERVER ON MAC USING DOCKER

續前篇 HOW TO INSTALL MSSQL SERVER ON MAC USING DOCKER 在安裝完資料庫後;接下來當然就是先還原之前的資料庫、以利後續開發。

sudo docker cp 檔案名 容器名:/var/opt/mssql/backup

在這裡特別強調(因為我犯了這個蠢、還重新安裝了 Container) : 在這裡是輸入本機密碼、不是資料庫的連線密碼

等待一段時間後、將 Docker Container 重新運行(Restart)。再進入 Azure Data Studio 中去連線資料庫。

Selected path 的部份我是用打字的補入後面的 backup 文件夾、這部份應該是因為我之前沒有先建立資料夾就拷貝檔案進去、所以在檔案瀏覽器中是看不到的(待確認)。

The server selected protocol version TLS10 is not accepted

錯誤環境:使用 OpenJDK 11 連線 SQL Server 2008 時,發生了找不到 openjdk 驅動程式無法使用安全通訊端層 (SSL) 加密建立與 SQL Server 的安全連接。錯誤: “The server selected protocol version TLS10 is not accepted by client preferences [TLS13, TLS12]”。 ClientConnectionId:e98d4e86-b063-47d6-8bc7-7e0c482b146d 的結果。

發生原因:眾說紛云。
一、升級至 JAVA11 後、TLSv1 & TLSv1.1 被預設 Disabled。
二、SQL Server 2008 要求加密連線、需更新。

解決方法
在不動到 Server 的情況下,嘗試改寫連線方式及各種無腦測試後、以最簡單的方式解決了。

在 java.security 這個設定檔中,找到 jdk.tls.disabledAlgorithms ,刪掉其中的 TLSv1 、即可連線成功。

TLSv1

  • 在 Google 時發現,很多文章都會寫此檔案放在 %JAVAHOME%\JAVA\jreXXX\lib\security 中、一開始時一直沒找到;後來我反而是在 %JAVAHOME%\jdk-11.0.13.8-hotspot\Conf\Security 中找到的。有可能是因為版本的不同所以導致資料夾不同,有時候多注意一下,以免浪費了不必要的時間。

20230822 Tips:
在 Mac OS 中尋找 Java 安裝位置

/usr/libexec/java_home -v

20240124 Tips:
最近試著升級成 jdk 17 & SpringBoot 3.2.1 時、遇到了以下問題:

“encrypt” 屬性設定為 “true” 且 “trustServerCertificate” 屬性設為 “false”,但驅動程式無法使用安全通訊端層 (SSL) 加密建立 SQL Server 的安全連線: 錯誤: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target。 ClientConnectionId:77468a01-4798-4f83-a45c-b1b4e5833e6b

除了之前把 TLSv1 去除掉之外、需要在 application.properties 中再增加設定:

spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.datasource.url=jdbc:sqlserver://127.0.0.1:1433;databaseName=LYS_ERP;encrypt=false

雖然是可以連絡了、但還是會出現以下警告訊息:
TLSv1 was negotiated. Please update server and client to use TLSv1.2 at minimum.

主要問題還是在於 SQL 2008 、就先撐著吧、看何時解決不了不得不升級囉!

How to install MSSQL Server on Mac using Docker

因為開發的原因、所以需要在 Mac 上安裝 SQL Server 。

Docker 官網

下載並安裝 Docker 。

前往 Dockerhub 找到需要的 Image 檔案:

Dockerhub-SQL Server

  • 目前在官網上只看到 2019 & 2017 的版本、所以我選擇了 2017 的版本。

DockerSQLserver

打開終端機(Terminal)、輸入以下指令:

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

DockerPull

Pull 完後、在剛剛的網頁往下拉一點、會看到執行方法:

Howtouseimage

在終端機在執行以下命令:

docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=yourStrong(!)Password" -p 1433:1433 -d mcr.microsoft.com/mssql/server:2019-latest
  • 要特別注意的是 Copy 下來的命令檔、需先修改密碼(要求強密碼、否則執行會有問題);另外、因為剛 Pull 的是 2017 、所以版本號也必需要改。我在此行命令中另外加上了 –name 讓執行後的名稱變成我想要的。

Setup

以上完成後、開啟 Docker App 、並 Run 剛剛安裝的 Image 就可以啟動了:

RunDocker

取代 SQLServer Mangament 的 Azure Data Studio:

Azure Data Studio

操作介面和 Visual Studio Code 幾乎一模一樣;經測試、雖然連接 SQL 2008 會跳出警告版本不相容,但目前使用起來沒什麼大問題。

AzureDataStudio

mac 下 mysql 中文亂碼-找不到 my-default.cnf 和 my.cnf

在 mac 下安裝好 mysql 後;以 MySQLWorkbench 進入 Server 並輸入以下命令:

show variables like 'character_set_%'

一般來說、 MySQL 預設是拉丁文字集的、所以會如下圖所顯示的狀態:

閱讀全文〈mac 下 mysql 中文亂碼-找不到 my-default.cnf 和 my.cnf〉

處理SQL Server 偵測到邏輯的一致性 I/O 錯誤:毀損頁

今天在查詢資料庫時發生了如標題的錯誤,在拜過 Google 大神後特地筆記於下:

1.檢查資料庫:DBCC CHECK(‘DB’)

2.切換單一使用者模式:ALTER DATABASE DbName SET SINGLE_USER

3.修復資料庫(可能遺失資料):DBCC CHECKDB (DB, REPAIR_ALLOW_DATA_LOSS)

4.切換回多使用者模式:ALTER DATABASE DbName SET MULTI_USER

5.更新資料庫統計值:DBCC UPDATEUSAGE (0)

6.完整備份、DONE

參考資料來源:RiCo技術農場