快速入门:在适用于 Linux 的 Windows 子系统上安装 SQL Server 并创建数据库(WSL 2)

适用于:SQL Server - Linux

适用于 Linux 的 Windows 子系统(WSL)是 Windows 中的一项功能,允许你直接在 Windows 计算机上运行 Linux 环境,而无需虚拟机或双重启动。 WSL 为希望同时使用 Windows 和 Linux 的开发人员提供无缝高效的体验。 有关详细信息,请参阅 什么是适用于 Linux 的 Windows 子系统?

WSL 上的 SQL Server 仅用于开发

WSL 2 上的 SQL Server 仅用于开发目的,不支持用于生产工作负荷。 对于要运行的 SQL Server 版本,我们建议在 受支持的平台 之一的 WSL 环境中运行 SQL Server。

对于任何与支持相关的问题,可以从 Microsoft获取支持

WSL 2 上的 SQL Server 入门

可通过两种方法在 WSL 2 上开始使用 SQL Server:

  • 将 SQL Server 安装为 systemd 服务,您可以使用 systemctl 命令进行管理。 请确保在 WSL 上启用 systemd 。 有关详细信息,请参阅 “如何启用系统”。

  • 在 WSL 中部署 SQL Server 容器。 对于此选项,需要在 WSL(如 Docker 或 Podman)中安装 Linux 容器引擎,然后部署 SQL Server 容器。

先决条件

安装 WSL 2。 确保运行 Windows 10 版本 2004 或更高版本(内部版本 19041 及更高版本),或 Windows 11。 若要安装 WSL,请在管理员模式下打开 PowerShell 或 Windows 命令提示符,并运行以下命令:

wsl --install

有关详细说明,请参阅 如何使用 WSL 在 Windows 上安装 Linux。 有关设置用于开发的 WSL 环境的信息,请参阅 设置 WSL 开发环境

在 WSL 中安装 SQL Server

本部分介绍在 WSL 中设置 Linux 分发版的步骤,以及如何在该 Linux 分发版中安装 SQL Server。

选择 Linux 分发版

可以使用以下命令列出可在 WSL 中安装的所有有效分发版:

wsl -l -o

输出与以下示例类似。

The following is a list of valid distributions that can be installed.
Install using 'wsl.exe --install <Distro>'.

NAME                            FRIENDLY NAME
Ubuntu                          Ubuntu
Debian                          Debian GNU/Linux
kali-linux                      Kali Linux Rolling
Ubuntu-18.04                    Ubuntu 18.04 LTS
Ubuntu-20.04                    Ubuntu 20.04 LTS
Ubuntu-22.04                    Ubuntu 22.04 LTS
Ubuntu-24.04                    Ubuntu 24.04 LTS
OracleLinux_7_9                 Oracle Linux 7.9
OracleLinux_8_7                 Oracle Linux 8.7
OracleLinux_9_1                 Oracle Linux 9.1
openSUSE-Leap-15.6              openSUSE Leap 15.6
SUSE-Linux-Enterprise-15-SP5    SUSE Linux Enterprise 15 SP5
SUSE-Linux-Enterprise-15-SP6    SUSE Linux Enterprise 15 SP6
openSUSE-Tumbleweed             openSUSE Tumbleweed

对于本快速入门,请安装 Ubuntu 22.04,然后将 SQL Server 2022 安装到该分发版中。

若要安装 Ubuntu 22.04,请运行以下命令。 记下 UNIX 用户帐户和密码。 在此示例中,用wsluser作为用户名。

wsl --install -d Ubuntu-22.04

应会看到与如下示例类似的输出。 最后,它应显示你已登录到 Ubuntu 22.04 bash shell。

Installing: Ubuntu 22.04 LTS
Ubuntu 22.04 LTS has been installed.
Launching Ubuntu 22.04 LTS...
Installing, this may take a few minutes...
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username: wsluser
New password:
Retype new password:
passwd: password updated successfully
Installation successful!
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.167.4-microsoft-standard-WSL2 x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Tue Dec  3 00:32:14 IST 2024

  System load:  0.33                Processes:             32
  Usage of /:   0.1% of 1006.85GB   Users logged in:       0
  Memory usage: 2%                  IPv4 address for eth0: 10.18.123.249
  Swap usage:   0%

This message is shown once a day. To disable it please create the
/home/wsluser/.hushlogin file.

安装 SQL Server

登录到 Ubuntu 22.04 bash shell 后,可以按照快速入门中所述的步骤作 :安装 SQL Server 并在 Ubuntu 上创建数据库 以安装 SQL Server 2022。

还应 安装 SQL Server 命令行工具

获取 IP 地址

若要标识使用 SQL Server Management Studio(SSMS)连接到的 IP 地址,请 ifconfig 运行以下命令,如下所示:

ifconfig

应会看到与如下示例类似的输出。

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.19.50.241  netmask 255.255.240.0  broadcast 10.19.63.255
        inet6 fe80::215:5dff:fe76:c05d  prefixlen 64  scopeid 0x20<link>
        ether 00:15:5d:76:c0:5d  txqueuelen 1000  (Ethernet)
        RX packets 2146  bytes 1452448 (1.4 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1905  bytes 345288 (345.2 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 2039  bytes 4144340 (4.1 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2039  bytes 4144340 (4.1 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

在 WSL 中部署 SQL Server 容器

若要在 WSL 中部署容器,首先需要安装 Linux 容器引擎,例如 Docker。 有关详细信息,请参阅 WSL 上的 Docker 远程容器入门。 安装 Docker 引擎后,按如下所示部署 SQL Server 容器映像。

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" \
-e "MSSQL_PID=Developer" -e "MSSQL_AGENT_ENABLED=true" \
-p 14333:1433 --name sqlcontainerwsl --hostname sqlcontainerwsl \
-d mcr.microsoft.com/mssql/server:2022-latest

注释

密码应遵循 SQL Server 默认密码策略。 默认情况下,密码必须为至少八个字符且包含以下四种字符中的三种:大写字母、小写字母、十进制数字、符号。 密码可最长为 128 个字符。 使用的密码应尽可能长,尽可能复杂。

使用 WSL 为 SQL Server 容器添加持久性存储

可以如在装载主机目录作为数据卷中所述创建数据卷。

例如,运行以下命令以设置一个名为 sql_volume 的卷,位于 /var/opt/mssql/

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" \
-e "MSSQL_PID=Developer" -e "MSSQL_AGENT_ENABLED=true" \
-p 14333:1433 --name sqlcontainerwsl --hostname sqlcontainerwsl \
-v sql_volume:/var/opt/mssql/ \
-d mcr.microsoft.com/mssql/server:2022-latest

即使运行 wsl --terminate 命令,数据也不会丢失。 启动 WSL 后,再次运行 docker run 命令以使用 sql_volume 卷进行部署时,该卷中的所有数据仍然完好无损。

如果要删除持久化卷,请确保使用该持久化卷的容器已停止并移除,然后运行以下命令。

docker volume rm sql_volume

注解

出于开发目的,应能够配置 Linux 上的 SQL Server 支持的大多数功能,但依赖于群集堆栈的业务连续性功能除外。 WSL 不支持这些功能,如 Pacemaker 或 HPE Serviceguard。

有关 Linux 上的 SQL Server 不支持的功能的完整列表,请参阅 Linux 上的 SQL Server 2022 的版本和支持的功能

本地连接

以下步骤使用 sqlcmd 本地连接到新的 SQL Server 实例。

谨慎

密码应遵循 SQL Server 默认密码策略。 默认情况下,密码必须为至少八个字符且包含以下四种字符中的三种:大写字母、小写字母、十进制数字、符号。 密码可最长为 128 个字符。 使用的密码应尽可能长,尽可能复杂。

  1. 使用 SQL Server 名称 ()、用户名 (-S) 和密码 (-U) 的相应参数运行 sqlcmd。 本教程中要进行本地连接,因此服务器名称为 localhost。 用户名为 sa,密码是在安装过程中为 sa 帐户提供的密码。

    sqlcmd -S localhost -U sa -P '<password>'
    

    注释

    默认情况下,较新版本的 sqlcmd 是安全的。 有关连接加密的详细信息,请参阅 sqlcmd 实用工具(对于 Windows)和使用 sqlcmd 进行连接(对于 Linux 和 macOS)。 如果连接不成功,则可以将 -No 选项添加到 sqlcmd,以指定加密是可选的,而不是强制性的。

    可以在命令行上省略密码,以收到密码输入提示。

    如果以后决定进行远程连接,请为 -S 参数指定计算机名称或 IP 地址,并确保防火墙上的端口 1433 已打开。

  2. 如果成功,您应该会进入 sqlcmd 命令提示符:1>

  3. 如果连接失败,先尝试诊断错误消息中所述的问题。 然后查看连接故障排除建议

创建和查询数据

下面各部分将逐步介绍如何使用 sqlcmd 新建数据库、添加数据并运行简单查询。

有关编写 Transact-SQL 语句和查询的详细信息,请参阅教程:编写 Transact-SQL 语句

新建数据库

以下步骤创建一个名为 TestDB 的新数据库。

  1. 在 sqlcmd 命令提示符中,粘贴以下 Transact-SQL 命令以创建测试数据库:

    CREATE DATABASE TestDB;
    
  2. 在下一行中,编写一个查询以返回服务器上所有数据库的名称:

    SELECT Name
    FROM sys.databases;
    
  3. 前两个命令不立即执行。 必须在新行中键入 GO 才能执行以前的命令:

    GO
    

插入数据

接下来创建一个新表 dbo.Inventory,然后插入两个新行。

  1. 在 sqlcmd 命令提示符中,将上下文切换到新的 TestDB 数据库:

    USE TestDB;
    
  2. 创建名为 dbo.Inventory 的新表:

    CREATE TABLE dbo.Inventory
    (
        id INT,
        name NVARCHAR (50),
        quantity INT,
        PRIMARY KEY (id)
    );
    
  3. 将数据插入新表:

    INSERT INTO dbo.Inventory
    VALUES (1, 'banana', 150);
    
    INSERT INTO dbo.Inventory
    VALUES (2, 'orange', 154);
    
  4. 要执行上述命令的类型 GO

    GO
    

选择数据

现在,运行查询以从 dbo.Inventory 表返回数据。

  1. 在 sqlcmd 命令行提示符下输入查询,以返回 表中数量大于 152 的行:

    SELECT *
    FROM dbo.Inventory
    WHERE quantity > 152;
    
  2. 执行此命令:

    GO
    

退出 sqlcmd 命令提示符

要结束 sqlcmd 会话,请键入 QUIT

QUIT

性能最佳做法

在 Linux 上安装 SQL Server 后,请查看配置 Linux 和 SQL Server 以提高生产性能的最佳做法。 有关详细信息,请参阅 Linux 上的 SQL Server 的性能最佳做法和配置指南

跨平台数据工具

除“sqlcmd”以外,还可以使用以下跨平台工具来管理 SQL Server :

工具 DESCRIPTION
Azure Data Studio 跨平台 GUI 数据库管理实用程序。
Visual Studio Code 一种跨平台 GUI 代码编辑器,它使用 mssql 扩展运行 Transact-SQL 语句。
PowerShell Core 基于 cmdlet 的跨平台自动化和配置工具。
mssql-cli 用于运行 Transact-SQL 命令的跨平台命令行接口。

从 Windows 进行连接

Windows 上的 SQL Server 工具连接到 Linux 上的 SQL Server 实例,操作方式与连接到任何远程 SQL Server 实例一样。

如果有一台可以连接到 Linux 计算机的 Windows 计算机,请从运行 sqlcmd 的 Windows 命令提示符尝试执行本主题中的相同步骤。 必须使用目标 Linux 计算机名称或 IP 地址,而不是 localhost,并确保 TCP 端口 1433 已在 SQL Server 计算机上打开。 如果从 Windows 进行连接存在任何问题,请参阅连接故障排除建议

有关在 Windows 上运行,但连接到 Linux 上的 SQL Server 的其他工具,请参阅:

其他部署方案

有关其他安装方案,请参阅以下资源:

  • 升级:了解如何升级 Linux 版 SQL Server 的现有安装
  • 卸载:在 Linux 上卸载 SQL Server
  • 无人参与的安装:了解如何编写无提示安装脚本
  • 脱机安装:了解如何手动下载脱机安装程序包

有关常见问题的解答,请参阅 Linux 上的 SQL Server 常见问题解答

参与编辑 SQL 文档

你是否知道你可以自行编辑 SQL 内容? 你如果这样做,不仅可以帮助改进我们的文档,还可以获得页面贡献者的殊荣。

有关详细信息,请参阅 “编辑Microsoft Learn 文档