本文记录了在 Ubuntu 22.04 上安装 Microsoft SQL Server (mssql-server) 2022,实践中可以用于 《MySQL 数据库技术与实验指导》作为实验教材的实验课程中。

官方教程

# 安装 mssql-server

按照官方文档,在 Ubuntu 上可以使用 APT 直接安装二进制库。安装过程如下:

导入 Microsoft 的 GPG 密钥 microsoft.asc

shell
curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | sudo gpg --dearmor -o /usr/share/keyrings/microsoft-prod.gpg

再次下载密钥保存到 /etc/apt/trusted.gpg.d/ 目录下,APT 用它来验证软件包的签名

shell
curl https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc

添加 mssql-server 软件包源到 APT 软件包源列表

shell
curl -fsSL https://packages.microsoft.com/config/ubuntu/22.04/mssql-server-2022.list | sudo tee /etc/apt/sources.list.d/mssql-server-2022.list

这一步会产生如下的报错:

shell
Failed to fetch https://packages.microsoft.com/ubuntu/22.04/mssql-server-2022/dists/jammy/InRelease

反而按照 Ubuntu 20.04 的步骤,换成 add-apt-repository 就不会报错:

shell
sudo add-apt-repository "$(wget -qO- https://packages.microsoft.com/config/ubuntu/20.04/mssql-server-2022.list)"

如果还有报错,可以参考这里

通过 APT 安装 mssql-server

shell
sudo apt-get update
sudo apt-get install -y mssql-server

然后,由于 Ubuntu 22.04 缺少如下 2 个二进制库,在接下来安装的过程会出现这样的报错:

shell
error while loading shared libraries: libldap-2.4.so.2: cannot open shared object file: No such file or directory.
# or
error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory.

所以需要手动安装这两个库:

shell
sudo dpkg -i $(wget -qO- http://http.us.debian.org/debian/pool/main/o/openldap/libldap-2.4-2_2.4.47+dfsg-3+deb10u7_amd64.deb)
sudo dpkg -i $(wget -qO- http://nz2.archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2.22_amd64.deb)

初始化 SQL Server 实例

shell
sudo /opt/mssql/bin/mssql-conf setup

启动后选择版本安装。Microsoft 提供了 3 个免费版本:

  • Evaluation
  • Developer
  • Express

安装过程将会为实例的初始默认账号 sa 定义密码,之后第一次须使用用户名 sa 和自定义密码才能连接实例。

# 安装本地命令行工具

接下来,要想在 Linux 上本地连接数据库实例,还需要安装官方提供的命令行工具 mssql-tools18 。如果只是远程连接那么这一步其实并不必要。

同样通过 APT 安装如下:

官方文档中导入 Microsoft 的 GPG 密钥步骤不必重复,跳过

添加软件包源到 APT 软件包源列表

shell
curl https://packages.microsoft.com/config/ubuntu/22.04/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list

APT 安装

shell
sudo apt-get update
sudo apt-get install mssql-tools18 unixodbc-dev

添加环境变量

shell
# for shell
echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> ~/.bash_profile
source ~/.bash_profile
# for interactive/non-login shell
echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> ~/.bashrc
source ~/.bashrc

# 导入数据库

官方文档

由于实验课程提供的数据是 SQL Server 导出的,也只能用 Microsoft 提供的办法导入,而目前 Microsoft 只提供了 Windows 上的:

  • SSMS(GUI)
  • SSDT(CLI)
    两种途径导入导出数据库,所以也只能通过 Windows 导入数据库到 Linux 上的 SQL Server。

实际上和导入 Windows 的数据库没有多大区别,唯一的注意事项是数据文件的权限。具体步骤如下:

将数据文件上传到 Linux 上,并放到专门存放数据库的路径,默认是 /var/opt/mssql/data/ 。例如我们的数据文件是:

  • School_Data.MDF
  • School_Log.LDF

然后需要修改权限:

shell
chown mssql School_Data.MDF School_Log.LDF
chmod +020 School_Data.MDF School_Log.LDF

然后打开 Windows 的 SSMS,连接到数据库(如何连接见下文)

鼠标右键点击 数据库 / Databases ,点击 附加 / Attach

1

在新弹出的窗口点击 添加 / add

2

在新弹出的第二个窗口点击选中要导入的数据库文件,然后点击 确认 / OK

3

最后点击窗口的 确认 / OK ,即可导入成功

# 连接数据库

Microsoft 提供了一些跨平台连接方案,VS Code 可以使用 SQL Server 插件,SSMS 连接时服务器类型选择 Database Engine 即可。然后服务器名称填写主机名或者 ip ,验证方式选择 SQL Server ,使用 sa 账号即可登录。

其他通用的连接工具登录方式类似,只需注意 SQL Server 的默认连接端口是 1433 。很多 DBMS 软件例如 Nacicat 在连接时都提供专门连接 SQL Server 的选项。

官方文档推荐在第一次连接登录后,创建一个新的账号并禁用 sa 账号作为最佳实践。仅用于学习暂时不必这样操作。(因为根据官方文档来看似乎比较麻烦)