Linux 和docker上的 SQL Server 的常见问题解答 (FAQ)

举报
小麦苗DB宝 发表于 2022/04/07 10:02:55 2022/04/07
【摘要】 参考:https://docs.microsoft.com/zh-cn/sql/linux/sql-server-linux-faq?view=sql-server-ver15 常规问题支持哪些 Linux 平台?SQL Server 目前在 Red Hat Enterprise Server、SUSE Linux Enterprise Server 和 Ubuntu 上受支持。 还支持使用...

参考:https://docs.microsoft.com/zh-cn/sql/linux/sql-server-linux-faq?view=sql-server-ver15

常规问题

  1. 支持哪些 Linux 平台?

    SQL Server 目前在 Red Hat Enterprise Server、SUSE Linux Enterprise Server 和 Ubuntu 上受支持。 还支持使用 Docker 在容器中运行。 有关支持的版本的最新信息,请参阅支持的平台

  2. Linux 上的 SQL Server 未来是否可以在其他平台上运行?

    SQL Server 在 Linux 上针对之前列出的发行版进行了测试且受支持。 其他 Linux 发行版密切相关并且可能可以运行 SQL Server(例如,CentOS 与 Red Hat Enterprise Server 密切相关)。 但是,如果选择在不受支持的操作系统上安装 SQL Server,请查看 Microsoft SQL Server 的技术支持策略的“支持策略”部分,以了解支持含义。 另请注意,如果基础操作系统出现故障,一些社区维护的 Linux 发行版将没有获得支持的正式途径。

  3. Linux 与 Windows 上的 SQL Server 是否相同?

    SQL Server 的核心数据库引擎在 Linux 上与在 Windows 上是相同的。 不过,Linux 当前不支持某些功能。 有关 Linux 不支持的功能的列表,请参阅不支持的 功能 服务。 另请参阅已知问题。 除非在这些列表中指定,否则 Linux 均支持其他 SQL Server 功能和服务。

  4. SQL Server 的支持策略是什么?

    若要了解支持策略,请参阅 SQL Server 的技术支持策略

  5. 我一直使用 Windows SQL Server。 是否有可帮助了解如何使用 Linux 上的 SQL Server 的相关资源?

    快速入门中提供了有关如何在 Linux 上安装 SQL Server 和运行 Transact-SQL 查询的分步说明。 其他教程提供了有关在 Linux 上使用 SQL Server 的其他说明。 要获取第三方提示列表,请参阅 Linux 上的 SQL Server 的 MSSQLTIPS 列表提示

许可

  1. 如何在 Linux 上授予许可?

    在 Windows 和 Linux 上为 SQL Server 授予许可的方法是相同的。 事实上,为 SQL Server 授予许可后,即可在所选的平台上使用该许可。 有关详细信息,请参阅如何为 SQL Server 授与许可

  2. 在已购买 SQL Server 时应选择哪个版本?

    运行 mssql-conf 安装程序时,会显示以下选项:

    复制

    Choose an edition of SQL Server:
       1. Evaluation (free, no production use rights, 180-day limit)
       2. Developer (free, no production use rights)
       3. Express (free)
       4. Web (PAID)
       5. Standard (PAID)
       6. Enterprise (PAID)
       7. Enterprise Core (PAID)
       8. I bought a license through a retail sales channel and have a product key to enter.
    

    如果已通过批量许可(在企业协议中)或通过 MSDN 订阅获得许可证,则需要选择选项 4 到 7。 此步骤不会要求输入许可证,但必须先为配置购买相应的许可证。 如果已通过零售渠道购买了标准版,请选择选项 8。 此选项会提示输入密钥。

  3. 如何验证已安装的版本和 Linux 上的 SQL Server 的版本?

    使用 sqlcmd、mssql-cli 或 Visual Studio Code 等客户端工具连接到 SQL Server 实例 。 然后,运行以下 Transact-SQL 查询以验证版本和正在运行的 SQL Server 的版本:

    SQL复制

    SELECT @@VERSION
    SELECT SERVERPROPERTY('Edition')
    

安装

  1. 如何在我的 Linux 服务器上安装 SQL Server?

    Microsoft 维护用于安装 SQL Server 的包存储库,并支持通过本机包管理器(如 yum、zypper 和 apt)进行安装。 若要快速安装,请参阅其中一篇快速入门文章。

  2. 能否在 Windows 10 或 Windows 11 的 Linux 子系统上安装 SQL Server?

    不是。 在 Windows 10 或 Windows 11 上运行的 Linux 目前不是 SQL Server 及其相关工具的受支持平台。

  3. SQL Server 可以将哪些 Linux 文件系统用于数据文件?

    Linux 上的 SQL Server 目前支持 ext4 和 XFS。 将来会按需添加对其他文件系统的支持。

  4. 是否可以下载安装包以脱机安装 SQL Server?

    是的。 有关详细信息,请参阅发行说明中的包下载链接。 另请参阅脱机安装说明

  5. 是否可以在 Linux 上执行无人参与安装 SQL Server?

    是的。 有关无人参与安装的介绍,请参阅 Linux 上的 SQL Server 的安装指南。 请参阅 Red HatSUSE Linux Enterprise ServerUbuntu 的示例脚本。 还可以查看 SQL Server 客户顾问团队创建的此示例脚本

工具

  1. 是否可以使用 Windows 上的 SQL Server Management Studio 客户端访问 Linux 上的 SQL Server?

    可以。可以使用在 Windows 上运行的所有现有工具来访问 Linux 上的 SQL Server。 其中包括 Microsoft 提供的工具(如 SQL Server Management Studio (SSMS)、SQL Server Data Tools (SSDT) 和 OSS)以及第三方工具。

  2. 是否有可在 Linux 上运行的类似 SSMS 的工具?

    新 Azure Data Studio 是一款用于管理 SQL Server 的跨平台工具。 有关详细信息,请参阅什么是 Azure Data Studio

  3. Linux 上是否提供 sqlcmd 和 bcp 等命令?

    提供。Linux、macOS 和 Windows 上本机提供 sqlcmd 和 bcp。 此外,可使用 Linux、macOS 或 Windows 上的新 mssql-scripter 命令行工具为在任何位置运行的 SQL 数据库生成 T-SQL 脚本。 另请参阅 mssql-cli 的预览版本。

  4. 通过 Windows 上的 SSMS 进行连接时,是否可以针对 Linux 上运行的实例查看 Activity Monitor?

    可以。可以使用 Windows 上的 SSMS 进行远程连接,并对 Linux 实例使用 Activity Monitor 命令之类的工具/功能。

  5. 有哪些工具可用于监视 Linux 上的 SQL Server 性能?

    可使用系统动态管理视图 (DMV) 收集有关 SQL Server 的各种类型的信息,包括 Linux 进程信息。 可使用查询存储提高查询性能。 其他工具(例如,内置性能仪表板)可在 Windows 的 SQL Server Management Studio (SSMS) 中远程工作。

    提示

    正确配置 Linux 操作系统和 SQL Server 实例是提高性能的一种方法。 有关详细信息,请参阅 Linux 上的 SQL Server 的性能最佳做法和配置指南

管理

  1. Microsoft 是否在 Linux 上创建了类似 SQL Server 配置管理器的应用?

    是的,存在适用于 Linux 上的 SQL Server 的配置工具:mssql-conf

  2. Linux 上的 SQL Server 是否支持同一主机上的多个实例?

    我们建议在主机上运行多个容器以获得多个不同的实例。 使用 docker 很容易实现这一点,但每个容器都需要侦听不同的端口。 有关详细信息,请参阅运行多个 SQL Server 容器

  3. Linux 上是否支持 Active Directory 身份验证?

    是的。 有关详细信息,请参阅对 Linux 上的 SQL Server 使用 Active Directory 身份验证

  4. Linux 是否支持 Always On 和群集?

    Linux 上使用 Pacemaker 实现故障转移群集和高可用性。 有关详细信息,请参阅 业务连续性和数据库恢复 - Linux 上的 SQL Server

  5. 是否可以配置 Linux 与 Windows 之间的相互复制?

    可以在 Windows 和 Linux 之间使用读取规模副本进行单向数据复制。

  6. 是否可以将旧版 SQL Server 中的现有数据库从 Windows 迁移到 Linux?

    可以。可以通过几种方法实现此目的。

  7. 是否可以将 Oracle 和其他数据库引擎中的数据迁移到 Linux 上的 SQL Server?

    是的。 SSMA 支持从几种类型的数据库引擎进行迁移:Microsoft Access、DB2、MySQL、Oracle 和 SAP ASE(以前称为 SAP Sybase ASE)。 有关如何使用 SSMA 的示例,请参阅使用 SQL Server 迁移助手将 Oracle 架构迁移到 Linux 上的 SQL Server

  8. SQL Server 文件需要哪些权限?

    文件文件夹中的 /var/opt/mssql 所有文件都应由 /var/opt/mssql 用户拥有,并且属于 mssql 组。 mssql 用户和组都应具有所有文件和目录的读写权限。 请注意以下涉及文件和目录权限的特殊情况:

    • 用于存储 SQL Server 文件的已装载网络共享必须拥有 mssql 所有者和组的权限。
    • 如果在非默认目录中找到数据库文件或备份,则也必须为该目录设置权限。
    • 如果更改 0022 中的默认根 umask,则安装后 SQL Server 配置将失败。 然后,必须手动将所需权限应用于 SQL Server 启动帐户。
  9. 是否可以更改已安装的 mssql 帐户和组中的 SQL Server 文件和目录的所有权?

    我们不支持更改默认安装中的 SQL Server 目录和文件的所有权。 mssql 帐户和组专门用于 SQL Server 且不支持交互式登录访问。

  10. SQL Server 数据和日志目录是否支持符号链接?

    否,SQL Server 数据和日志目录不支持符号链接。 若要更改默认数据和日志目录,请参阅更改默认数据或日志目录位置

  11. 是否可以从 Linux 上的 SQL Server 中和容器实例中删除内置\管理员帐户?

    删除用于 Linux 上的 SQL Server 的内置\管理员账户会中断某些系统存储过程的执行。 建议不要从 Linux 上的 SQL Server/容器中删除内置\管理员帐户。

• 部署在任何操作系统或环境中的 SQL Server 的 SQL Server 引擎是否相同?

**Amit:**SQL Server 引擎在部署在不同操作系统上的 SQL Server 之间是相同的,无论是 Linux 上的 SQL Server、Windows 上的 SQL Server、部署在独立主机或 kubernetes 平台上的容器。唯一的区别是目前在 Linux/容器上的 SQL Server 上目前不支持的功能很少。

SQL Server 不受支持的功能的当前列表,参考:

https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-editions-and-components-2019?view=sql-server-ver15#Unsupported

•SQL Server 在基于 Windows 的容器上是否支持生产?

**Amit:**目前为止,生产环境工作负载不支持在 Windows 容器上运行的 SQL Server。它处于预览模式有一段时间了,但由于当前生态系统的限制,现在它不受支持,并且也不在测试版中。

• 如何在 Linux 访问 SQL Server 配置管理器,简单地说,如何在 Linux 上配置 SQL Server?

**Amit:**你可以在 Linux 上使用 mssql-conf 工具配置 SQL Server 。更改 SQL Server 端口、启用 AD 身份验证、启用/禁用跟踪标志等,所有任务都可以通过 mssql-conf 工具完成。你可以运行命令“mssql-conf –help”以了解使用 mssql-conf 工具可用的各种设置。

• 部署 Linux 容器上的 SQL Server 是否支持生产工作负载?支持边界是什么?

**Amit:**是的,生产工作负载支持 Linux 容器上的 SQL Server。你可以在任何受支持的 Linux 发行版的容器上部署 SQL Server 。你可以从 Microsoft 容器注册表中获取 SQL Server 镜像,要发现基于 Ubuntu 的 SQL 容器镜像,你可以参考 docker hub(https://hub.docker.com/_/microsoft-mssql-server),要发现基于 Redhat 的容器,你可以参考Redhat 容器目录(https://catalog.redhat.com/software/containers/mssql/rhel/server/5ba50865f5a0de06555a2ee7)。也可以使用自定义 docker 文件创建 SQL Server 映像。

• 如何为基于 SUSE 的主机创建 SQL Server Linux 容器映像?是否有一个可以参考的dockerfile示例?

**Amit:**你可以通过dockerfile为基于SUSE的主机创建SQL Server Linux容器镜像,类似的示例可以参考。(https://github.com/microsoft/mssql-docker/tree/master/linux/preview/SLES)

• 是否也可以使用 podman 部署 SQL Server Linux 容器?就像对 docker 那样。

**Amit:**是的,Podman/docker 都受支持,可用于部署和运行 SQL Server 容器。

• 如果我是 Linux 生态系统的新手,精通 SQL Server,是否有任何教程了解 Linux 上的 SQL Server?

**Amit:**如果你计划开始在 Linux 上使用 SQL Server,并且之前有在 Windows 上使用 SQL Server 的经验,你会发现 Linux 上的 SQL Server 并没有什么不同,只是设置体验和生态系统体验发生了变化。首先,你可以参考本教程来帮助你了解 Linux 的基础知识,然后你可以根据自己的兴趣进一步构建基础知识。同样,如果你精通 Linux,但不熟悉 SQL Server,则可以从本教程开始。

• 我可以跨运行在各种操作系统或容器上的 SQL Server 实例附加/移动/恢复数据库吗?

**Amit:**当然,SQL Server 引擎在 SQL Server 的所有部署中都是相同的。因此,你可以从基于 SQL Server Linux 的容器中备份数据库,将其移动到 Windows 环境,然后在裸机/VM 上的 Windows 上的 SQL Server 上还原它。事实上,官方有关于将数据库迁移到 Linux 上的 SQL 的可用文档参考(https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-migrate-overview?view=sql-server-ver15)。

• 是否有关于如何在 Linux 上部署 SQL Server 以获得最佳性能的指导性建议?

**Amit:**是的,官方提供了详细的文档(https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-performance-best-practices?view=sql-server-ver15),其中讨论了可以在存储、文件系统、内核、CPU 等方面的性能配置,以获得最佳 SQL Server 性能实践。本文中提到的大部分建议也可以应用于运行 SQL Server 容器的主机。例如如果持久存储来自主机,则存储设置可以应用于主机,调整配置文件设置可以应用于主机等等。

• 我可以继续限制分配给 SQL Server 容器的资源吗?

**Amit:**是的,在部署 SQL Server 容器时,你可以为每个部署 SQL Server 的容器设置 CPU 和内存等资源限制。诸如“-cpus”和“-memory”之类的 docker 标志可用于设置资源限制。让我们举一个例子来进一步理解这一点,假设你在主机上总共有 16 个逻辑处理器,当你部署容器时,你使用以下命令:

docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=strongpassword" -p 1433:1433 \
-name sql1 -hostname sql1 -cpus 8 \
-d mcr.microsoft.com/mssql/server:2019-CU10-ubuntu-18.04

此命令可限制 SQL Server 容器仅使用 16 个逻辑处理器中的 8 个。在错误日志中,你可以看到 SQL Server 所有 16 个逻辑处理器,但它仅使用 16 个 CPU 中的 8 个来运行工作量。

• 我可以在 Kubernetes 集群上部署 SQL Server 吗?这是否受支持?

**Amit:**是的,你可以将 SQL Server 部署在 Kubernetes 集群或像 openshift 这样的 opinated Kubernetes 集群上,它支持生产工作负载。你可以将 SQL Server 部署为 statefulset 或部署类型。示例部署 yaml 文件可在此处获取以供参考,可用于所有 kubernetes 集群进行部署。

• 如何在容器上配置 SQL Server,是否可以使用 mssql-conf 工具?

**Amit:**对于 SQL Server 容器,你可以在部署 SQL Server 容器时通过在容器内挂载 mssql-conf 文件来提供配置设置。其中一些配置设置也可用作部署 SQL Server 容器时的环境变量。

• 你是否有任何示例 Helm Charts 来部署 SQL Server 容器?

**Amit:**是的,你可以通过 helm charts 部署 SQL Server,这里有一些示例 helm charts 来帮助你入门,请参考 statefulset helm chart 进行statefulset部署(https://github.com/microsoft/mssql-docker/tree/master/linux/sample-helm-chart-statefulset-deployment)。

• 在Kubernetes 平台上部署SQL Server 容器时,我们是否也可以设置资源限制?

**Amit:**当然,在部署 SQL Server 容器时,你可以使用 yaml 文件中的资源限制选项。事实上,您应该始终尝试并确保 SQL Server 容器/pod的QoS(服务质量)设置为有保证的。这意味着 SQL Server 的资源请求和资源限制是相同的,以确保 SQL Server 容器在 kubernetes 集群计划在工作节点上运行时获得资源。

• 我可以为Linux/容器上的SQL Server 配置AD (Active Directory) 身份验证吗?

**Amit:**Linux 上的SQL Server和基于 SQL Server Linux 的容器都支持 Active Directory 身份验证。实际上,你现在可以使用一个名为 adutil 的预览工具来轻松地为 Linux 上的 SQL Server 和基于SQL Server Linux 的容器配置活动目录身份验证。此工具简化了活动目录身份验证的配置,确保您可以从加入域的Linux机器上管理windows活动目录。

在 Linux 容器上为 SQL Server 启用 AD 身份验证时,你可以拥有一个环境,其中运行 SQL Server 容器的主机未加入域,但容器内的 SQL Server 已加入域。但是,对于 Linux BareMetal/VM 上的 SQL Server,你需要确保主机和 SQL Server 服务是同一域的一部分。如果域具有双向信任并且属于同一林的一部分,则还支持跨域登录。

• 我想在同一 kubernetes 集群上运行的多个 SQL Server 容器之间设置 Always on Availability 组,我该怎么做?

**Amit:**截至今天,容器上的 SQL Server 可用性组设置仅在Read Scale模式下受支持,在任何其他模式下均不受支持。因此,你有一个 DR 选项,为容器上的 SQL Server 使用AlwaysOn可用性组,但不使用 HA(高可用性)。你可以在 kubernetes 中运行的 SQL Server 容器上设置 Read scale always on availability group。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。