适用于: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 个字符。 使用的密码应尽可能长,尽可能复杂。
使用 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 已打开。如果成功,您应该会进入 sqlcmd 命令提示符:
1>
。如果连接失败,先尝试诊断错误消息中所述的问题。 然后查看连接故障排除建议。
创建和查询数据
下面各部分将逐步介绍如何使用 sqlcmd 新建数据库、添加数据并运行简单查询。
有关编写 Transact-SQL 语句和查询的详细信息,请参阅教程:编写 Transact-SQL 语句。
新建数据库
以下步骤创建一个名为 TestDB
的新数据库。
在 sqlcmd 命令提示符中,粘贴以下 Transact-SQL 命令以创建测试数据库:
CREATE DATABASE TestDB;
在下一行中,编写一个查询以返回服务器上所有数据库的名称:
SELECT Name FROM sys.databases;
前两个命令不立即执行。 必须在新行中键入
GO
才能执行以前的命令:GO
插入数据
接下来创建一个新表 dbo.Inventory
,然后插入两个新行。
在 sqlcmd 命令提示符中,将上下文切换到新的
TestDB
数据库:USE TestDB;
创建名为
dbo.Inventory
的新表:CREATE TABLE dbo.Inventory ( id INT, name NVARCHAR (50), quantity INT, PRIMARY KEY (id) );
将数据插入新表:
INSERT INTO dbo.Inventory VALUES (1, 'banana', 150); INSERT INTO dbo.Inventory VALUES (2, 'orange', 154);
要执行上述命令的类型
GO
:GO
选择数据
现在,运行查询以从 dbo.Inventory
表返回数据。
在 sqlcmd 命令行提示符下输入查询,以返回 表中数量大于 152 的行:
SELECT * FROM dbo.Inventory WHERE quantity > 152;
执行此命令:
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 文档。