設定 Azure SQL Edge

重要

Azure SQL Edge 不再支援 ARM64 平台。

Azure SQL Edge 支援透過下列其中一個選項進行設定:

  • 環境變數
  • 放在 /var/opt/mssql 資料夾中的 mssql.conf 檔案

注意

設定環境變數時會覆寫 mssql.conf 檔案中指定的設定。

透過使用環境變數來進行設定

Azure SQL Edge 會公開數個不同的環境變數,其可用於設定 SQL Edge 容器。 這些環境變數是可供 Linux 上的 SQL Server 使用的環境變數子集。 如需 Linux 上的 SQL Server 環境變數詳細資訊,請參閱環境變數

下列新的環境變數已新增至 Azure SQL Edge。

環境變數 描述
PlanId 指定要在初始化期間使用的 Azure SQL Edge SKU。 只有在使用 Azure IoT Edge 部署 Azure SQL Edge 時,才需要此環境變數。 asde-developer-on-iot-edgeasde-premium-on-iot-edge
MSSQL_TELEMETRY_ENABLED 啟用或停用使用情形和診斷資料收集。 TRUE 或 FALSE
MSSQL_TELEMETRY_DIR 設定使用情形和診斷資料收集稽核檔案的目標目錄。 SQL Edge 容器內的資料夾位置。 此資料夾可以使用掛接點或資料磁區來對應至主機磁區。
MSSQL_PACKAGE 指定要部署之 dacpac 或 bacpac 套件的位置。 包含 dacpac 或 bacpac 套件的資料夾、檔案或 SAS URL。 如需詳細資訊,請參閱在 SQL Edge 中部署 SQL Database DACPAC 和 BACPAC 套件

對於 Azure SQL Edge,不支援下列 Linux 上的 SQL Server 環境變數。 若已定義,則會在容器初始化期間忽略此環境變數。

環境變數 描述
MSSQL_ENABLE_HADR 啟用可用性群組。 例如,1 已啟用且 0 已停用。

重要

適用於 SQL Edge 的 MSSQL_PID 環境變數只接受 PremiumDeveloper 作為有效值。 Azure SQL Edge 不支援使用產品金鑰來進行初始化。

指定環境變數

透過 Azure 入口網站部署服務時,請指定 SQL Edge 的環境變數。 您可以在模組部署的 [環境變數] 區段中來進行新增,或作為容器建立選項的一部分來進行新增

環境變數中新增值。

Screenshot of set by using environment variables list.

容器建立選項中新增值。

Screenshot of set by using container create options.

注意

在中斷連線的部署模式中,可以使用 docker run 命令的 -e--env--env-file 選項來指定環境變數。

使用 mssql.conf 檔案來進行設定

Azure SQL Edge 不包含 mssql-conf 組態公用程式,像 Linux 上的 SQL Server 一樣。 您必須手動設定 mssql.conf 檔案,並將它放在對應至 SQL Edge 模組中 /var/opt/mssql/ 資料夾的永續性儲存磁碟中。 從 Azure Marketplace 部署 SQL Edge 時,會將此對應指定為容器建立選項中的 [掛接] 選項。

{
  "Mounts": [
    {
      "Type": "volume",
      "Source": "sqlvolume",
      "Target": "/var/opt/mssql"
    }
  ]
}

已為 Azure SQL Edge 新增下列新的 mssql.conf 選項。

選項 描述
customerfeedback 選擇 SQL Server 是否要將意見反應傳送給 Microsoft。 如需詳細資訊,請參閱停用使用情形和診斷資料收集
userrequestedlocalauditdirectory 設定使用情形和診斷資料收集稽核檔案的目標目錄。 如需詳細資訊,請參閱使用情形和診斷資料收集的本機稽核

下列 mssql.conf 選項不適用於 SQL Edge:

選項 描述
客戶意見反應 選擇 SQL Server 是否要將意見反應傳送給 Microsoft。
資料庫郵件設定檔 為 Linux 上的 SQL Server 設定預設 Database Mail 設定檔。
高可用性 啟用可用性群組。
Microsoft 分散式交易協調器 設定和疑難排解 Linux 上的 MSDTC。 對於 SQL Edge,也不支援其他與分散式交易相關的設定選項。 如需這些額外設定選項的詳細資訊,請參閱設定 MSDTC
ML Services EULA 接受適用於 Azure Machine Learning 套件的 R 和 Python EULA。 只適用於 SQL Server 2019。
outboundnetworkaccess 針對機器學習服務 R、Python 及 Java 擴充功能啟用輸出網路存取。

下列範例 mssql.conf 檔案可作用於 SQL Edge。 如需 mssql.conf 檔案的格式詳細資訊,請參閱 mssql.conf 格式

[EULA]
accepteula = Y

[coredump]
captureminiandfull = true
coredumptype = full

[filelocation]
defaultbackupdir = /var/opt/mssql/backup/
defaultdatadir = /var/opt/mssql/data/
defaultdumpdir = /var/opt/mssql/data/
defaultlogdir = /var/opt/mssql/log/

[language]
lcid = 1033

[memory]
memorylimitmb = 6144

[sqlagent]
errorlogfile = /var/opt/mssql/log/sqlagentlog.log
errorlogginglevel = 7

[traceflag]
traceflag0 = 3604
traceflag1 = 3605
traceflag2 = 1204

以非根使用者的身分來執行 Azure SQL Edge

根據預設,Azure SQL Edge 容器會以非根使用者/群組來執行。 透過 Azure Marketplace (或使用 docker run) 來進行部署時,除非指定不同的使用者/群組,否則 SQL Edge 容器會以 mssql (非根) 使用者的身分來啟動。 若要在部署期間指定不同的非根使用者,請在容器建立選項下新增 *"User": "<name|uid>[:<group|gid>]"* 機碼/值組。 在下列範例中,SQL Edge 已設定為以使用者 *IoTAdmin* 身分啟動。

{
    ..
    ..
    ..
    "User": "IoTAdmin",
    "Env": [
        "MSSQL_AGENT_ENABLED=TRUE",
        "ClientTransportType=AMQP_TCP_Only",
        "MSSQL_PID=Premium"
    ]
}

若要允許非根使用者存取已掛接磁區上的 DB 檔案,請確保您在其下執行容器的使用者/群組對永續性檔案儲存體具有讀取與寫入權限。 在下列範例中,我們會將 user_id10001 的非根使用者設定為檔案的擁有者。

chown -R 10001:0 <database file dir>

從舊版 CTP 升級

Azure SQL Edge 的舊版 CTP 已設定為以根使用者身分執行。 從舊版 CTP 升級時,可以使用下列選項。

  • 繼續來使用根使用者 - 若要繼續使用根使用者,請在容器建立選項下新增 *"User": "0:0"* 機碼/值組。

  • 使用預設 mssql 使用者 - 若要使用預設 mssql 使用者,請遵循下列步驟:

    • 在 Docker 主機上新增名為 mssql 的使用者。 在下列範例中,我們會新增 ID 為 10001 的使用者 mssql。 此使用者也會新增至根群組中。

      sudo useradd -M -s /bin/bash -u 10001 -g 0 mssql
      
    • 變更資料庫檔案所在目錄/掛接磁區的許可權

      sudo chgrp -R 0 /var/lib/docker/volumes/kafka_sqldata/
      sudo chmod -R g=u /var/lib/docker/volumes/kafka_sqldata/
      
  • 使用不同的非根使用者帳戶 - 使用不同的非根使用者帳戶

    • 更新容器建立選項,以在容器建立選項下指定新增 *"User": "user_name | user_id* 機碼/值組。 以 Docker 主機中的實際 user_name 或 user_id 來取代 user_name 或 user_id。
    • 變更目錄/掛接磁區的許可權。

保存您的資料

您的 Azure SQL Edge 設定變更和資料庫檔案都會持續保存於容器中,即使您使用 docker stopdocker start 來將容器重新啟動也一樣。 不過,如果您使用 docker rm 來移除容器,則會刪除容器中的所有項目,包括 Azure SQL Edge 和您的資料庫。 下一節將說明如何使用資料磁碟區來保存您的資料庫檔案,即使已刪除相關聯的容器也一樣。

重要

針對 Azure SQL Edge,請務必了解 Docker 中的資料持續性。 除了本節的討論,另請參閱 Docker 文件,以了解如何管理 Docker 容器中的資料 \(英文\)。

裝載主機目錄作為資料磁碟區

第一個選項是在主機上裝載目錄作為容器中的資料磁碟區。 若要執行此動作,請使用 docker run 命令搭配 -v <host directory>:/var/opt/mssql 旗標。 這可讓您在容器執行之間還原資料。

docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1433:1433 -v <host directory>/data:/var/opt/mssql/data -v <host directory>/log:/var/opt/mssql/log -v <host directory>/secrets:/var/opt/mssql/secrets -d mcr.microsoft.com/azure-sql-edge
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1433:1433 -v <host directory>/data:/var/opt/mssql/data -v <host directory>/log:/var/opt/mssql/log -v <host directory>/secrets:/var/opt/mssql/secrets -d mcr.microsoft.com/azure-sql-edge

此技術也可讓您在 Docker 外部共用和檢視主機上的檔案。

重要

Windows 上的 Docker 的主機磁碟區對應,目前不支援對應完整 /var/opt/mssql 目錄。 不過,您可以將子目錄 (例如 /var/opt/mssql/data) 對應到您的主機電腦。

重要

目前不支援使用 Linux 上的 Azure SQL Edge 映像,針對 macOS 上的 Docker 進行主機磁碟區對應。 請改用資料磁碟區容器。 此限制是 /var/opt/mssql 目錄特有的。 從裝載的目錄讀取可以正常運作。 例如,您可以在 macOS 上使用 -v 來裝載主機目錄,並從位於主機的 .bak 檔案還原備份。

使用資料磁碟區容器

第二個選項是使用資料磁碟區容器。 您可以使用 -v 參數來指定磁碟區名稱而非主機目錄,藉以建立資料磁碟區容器。 下列範例會建立名為 sqlvolume 的共用資料磁碟區。

docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1433:1433 -v sqlvolume:/var/opt/mssql -d mcr.microsoft.com/azure-sql-edge
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1433:1433 -v sqlvolume:/var/opt/mssql -d mcr.microsoft.com/azure-sql-edge

注意

這項在執行命令中隱含建立資料磁碟區的技術無法與舊版 Docker 搭配運作。 在此情況下,請使用 Docker 文件中概述的明確步驟,建立和裝載資料磁碟區容器 \(英文\)。

即使您停止並移除此容器,資料磁碟區仍會保存。 您可以使用 docker volume ls 命令來檢視它。

docker volume ls

如果您接著使用相同磁碟區名稱來建立另一個容器,新容器就會使用該磁碟區中所含的相同 Azure SQL Edge 資料。

若要移除資料磁碟區容器,請使用 docker volume rm 命令。

警告

如果您刪除資料磁碟區容器,則會「永久」刪除容器中的所有 Azure SQL Edge 資料。

下一步