Linux CentOS 7.7 安装 SQL Server 2017

在 CentOS 或 RHEL 系统中安装 Microsoft SQL Server 2017 。

[TOC]

安装条件

必须拥有 RHEL 7.3、7.4、7.5、7.6 或 8.0 计算机(内存至少为 2 GB)。关于系统内存,如果小于 2 GB 也可安装,可查看下文的安装问题。

本次使用操作系统: CentOS 7.7 64位

安装过程

1、下载 Microsoft SQL Server 2017 Red Hat 存储库配置文件:

如果使用 RHEL 7(CentOS 7),请将以下路径更改为/rhel/7而不是/rhel/8

  1. sudo curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/7/mssql-server-2017.repo

2、运行以下命令以安装 SQL Server:

  1. sudo yum install -y mssql-server

Linux SQL Server 2017

3、包安装完成后,运行 mssql-conf setup,按照提示设置 SA 密码并选择版本。

添加环境变量,增加 MSSQL 中文支持:

  1. export MSSQL_COLLATION='Chinese_PRC_CI_AS'
  2. export MSSQL_LCID='2052'
  3. # 查看环境变量,是否设置成功
  4. echo $MSSQL_COLLATION
  5. echo $MSSQL_LCID
  1. sudo /opt/mssql/bin/mssql-conf setup
  1. [root@xxxx ~]# /opt/mssql/bin/mssql-conf setup
  2. Choose an edition of SQL Server:
  3. 1) Evaluation (free, no production use rights, 180-day limit)
  4. 2) Developer (free, no production use rights)
  5. 3) Express (free)
  6. 4) Web (PAID)
  7. 5) Standard (PAID)
  8. 6) Enterprise (PAID)
  9. 7) Enterprise Core (PAID)
  10. 8) I bought a license through a retail sales channel and have a product key to enter.
  11. Details about editions can be found at
  12. https://go.microsoft.com/fwlink/?LinkId=852748&clcid=0x409
  13. Use of PAID editions of this software requires separate licensing through a
  14. Microsoft Volume Licensing program.
  15. By choosing a PAID edition, you are verifying that you have the appropriate
  16. number of licenses in place to install and run this software.
  17. Enter your edition(1-8): 8

选择 Enterprise Core 版本,与 Enterprise 版本相比,只是缺少了图形操作界面,更适合无界面的操作系统。

4、完成配置后,验证服务是否正在运行:

  1. systemctl status mssql-server

5、设置远程连接

若要允许远程连接,请在 RHEL 的防火墙上打开 SQL Server 端口。 默认的 SQL Server 端口为 TCP 1433。 如果为防火墙使用的是 FirewallD,则可以使用以下命令:

  1. sudo firewall-cmd --zone=public --add-port=1433/tcp --permanent
  2. sudo firewall-cmd --reload

安装 SQL Server 命令行工具

1、下载 Microsoft Red Hat 存储库配置文件。

如果使用 RHEL 7(CentOS 7),请将以下路径更改为/rhel/7而不是/rhel/8

  1. sudo curl -o /etc/yum.repos.d/msprod.repo https://packages.microsoft.com/config/rhel/7/prod.repo

2、如果安装了早期版本的 mssql-tools,请删除所有旧的 unixODBC 包。

  1. sudo yum remove unixODBC-utf16 unixODBC-utf16-devel

3、运行以下命令,以使用 unixODBC 开发人员包安装 mssql-tools 。

  1. sudo yum install -y mssql-tools unixODBC-devel

4、添加 PATH 环境变量

为方便起见,向 PATH 环境变量添加/opt/mssql-tools/bin/。 这样可以在不指定完整路径的情况下运行这些工具。运行以下命令以修改登录会话和交互式/非登录会话的路径:

  1. echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
  2. echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
  3. source ~/.bashrc

本地连接

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

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

  1. sqlcmd -S localhost -U SA -P '<YourPassword>'
  2. # or
  3. sqlcmd -S 127.0.0.1 -U SA -P '<YourPassword>'

如果成功,应会显示 sqlcmd 命令提示符:1>

要结束 sqlcmd 会话,请键入QUIT

性能设置

使用 mssql-conf 设置内存限制

为了确保 Linux 操作系统有足够的可用物理内存,默认情况下 SQL Server 进程只使用 80% 的物理 RAM。 对于某些系统,如果物理 RAM 很大,20% 可能是一个很大的数字。 例如,在具有 1 TB RAM 的系统上,默认设置将保留 200 GB RAM 不使用。 在这种情况下,你可能希望将内存限制配置为较高的值。 请参阅有关mssql-conf工具的文档和memory.memorylimitmb设置,该设置可控制对 SQL Server 可见的内存(以 MB 为单位)。

更改此设置时,请注意不要将此值设置得太高。 如果不留出足够的内存,则可能会遇到 Linux 操作系统和其他 Linux 应用程序的问题。

使用memory.memorylimitmb设置可控制 SQL Server 可用的物理内存量(以 MB 为单位)。 默认值为物理内存的 80%。

1、使用memory.memorylimitmbset命令以根用户身份运行mssql-conf脚本 。 以下示例将 SQL Server 可用的内存更改为 3.25 GB (3328 MB)。

  1. sudo /opt/mssql/bin/mssql-conf set memory.memorylimitmb 3328
  2. # 设置为 1.25G(1280M)
  3. sudo /opt/mssql/bin/mssql-conf set memory.memorylimitmb 1280

2、重启 SQL Server 服务以应用更改:

  1. sudo systemctl restart mssql-server

启用 SQL Server 代理

使用sqlagent.enabled设置可启用 SQL Server 代理。 默认情况下,SQL Server 代理处于禁用状态。 如果mssql.conf设置文件中不存在sqlagent.enabled,则 SQL Server 在内部假定已禁用 SQL Server 代理。

若要更改此设置,请使用以下步骤:

1、启用 SQL Server 代理:

  1. sudo /opt/mssql/bin/mssql-conf set sqlagent.enabled true

2、重启 SQL Server 服务:

  1. sudo systemctl restart mssql-server

查看当前设置

要查看任何已配置的设置,请运行以下命令以输出mssql.conf文件的内容:

  1. sudo cat /var/opt/mssql/mssql.conf

请注意,此文件中未显示的所有设置均使用其默认值。

其他配置

例如,修改默认 TCP 端口、数据库文件目录、等等。更多可配置项,请查看:使用 mssql-conf 工具配置 Linux 上的 SQL Server

卸载

  1. sudo systemctl stop mssql-server
  2. sudo yum remove mssql-server
  3. sudo rm -rf /var/opt/mssql/

提示:卸载会删除数据库默认目录下的数据库文件,请提前备份。

问题

1、安装过程中报 GLIBC_2.18 错误:

/lib64/libc.so.6: version 'GLIBC_2.18' not found (required by /opt/mssql/bin/../lib/libc++abi.so.1)

CentOS 系统中缺少GLIBC_2.18

  1. /opt/mssql/bin/sqlservr: /lib64/libc.so.6: version `GLIBC_2.18' not found (required by /opt/mssql/bin/../lib/libc++abi.so.1)
  2. Initial setup of Microsoft SQL Server failed. Please consult the ERRORLOG
  3. in /var/opt/mssql/log for more information.

修复错误:

  1. # 下载
  2. curl -O http://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.gz
  3. # 解压
  4. tar zxf glibc-2.18.tar.gz
  5. # 进入目录,创建目录 build 编译构建
  6. cd glibc-2.18/
  7. mkdir build
  8. cd build/
  9. ../configure --prefix=/usr
  10. # 安装
  11. make -j2
  12. make install

如果下载glibc-2.18.tar.gz太慢,可以用下载工具,先提前下载好,上传到系统,再解压执行命令。

如果没有gcc,还需要安装yum install gcc

2、修改 2G 内存限制

在安装时要求系统空闲内存必须大于 2G ,注意是系统空闲内存,不管你硬件内存是多少,安装时系统必须有空闲 2G 内存。如果你的服务器内存足够多,那就不必修改下面的文件了。

安装时输出内容为:sqlservr: This program requires a machine with at least 2000 megabytes of memory.

解决方法:

  1. cd /opt/mssql/bin/ # 进入目录
  2. mv sqlservr sqlservr.bak # 保存备份文件
  3. python # 使用 Python2 修改内存限制代码
  4. >>> oldfile = open("sqlservr.bak", "rb").read()
  5. >>> newfile = oldfile.replace("\x00\x94\x35\x77", "\x00\x80\x84\x1e")
  6. >>> open("sqlservr", "wb").write(newfile)
  7. >>> exit()

即把 sqlservr 中 16 进制数据00943577(小端存储,实际上是 16 进制77359400,10 进制2000000000)即 2GB 更改为 16 进制0080841e512MB 。

有些 MSSQL 版本需要更替为下面修改:

  1. >>> newfile = oldfile.replace("\xff\x93\x35\x77", "\x00\x80\x84\x1e")

但是,有些版的 sqlservr 你是找不到00943577这个数据的。有可能数据为FF933577(10 进制1999999999)。所以你需要把上面的\x00\x94\x35\x77部分修改为\xff\x93\x35\77

修改 sqlservr 权限为 755 :

  1. [root@localhost bin]# chmod 755 sqlservr
  2. # 目录权限修改
  3. chmod 600 my/
  4. # 目录及子目录和子文件,权限修改
  5. chmod -R 777 my/

注意:如果使用 Python3 执行上面的代码,会遇到语法错误,可修改如下。

  1. newfile = oldfile.replace("\x00\x94\x35\x77".encode(encoding="utf-8"), "\x00\x80\x84\x1e".encode(encoding="utf-8"))
  2. newfile = oldfile.replace("\xff\x93\x35\x77".encode(encoding="utf-8"), "\x00\x80\x84\x1e".encode(encoding="utf-8"))

3、使用 sp_configure 启用 Agent XPs

启用代理后,在 SQL Server Management Studio (SSMS) 进行操作时,仍然显示代理被禁用,并且右键属性时报错:… 通过使用 sp_configure 启用 ‘Agent XPs’ … 。

执行下面 SQL 语句进行解决:

  1. sp_configure 'show advanced options', 1;
  2. go
  3. reconfigure;
  4. go
  5. sp_configure 'Agent XPs', 1;
  6. go
  7. reconfigure;
  8. go

输出消息:

  1. 配置选项 'show advanced options' 已从 0 更改为 1。请运行 RECONFIGURE 语句进行安装。
  2. 配置选项 'Agent XPs' 已从 0 更改为 1。请运行 RECONFIGURE 语句进行安装。

升级 openssl

https://www.openssl.org/source/

查看版本:

  1. [root@localhost openssl-1.1.1g]# openssl version
  2. OpenSSL 1.0.2k-fips 26 Jan 2017

注意:升级 openssl 有风险,在网上看到其他用户,在升级后出现错误Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : TCP Provider: Error code 0x68.。在退回版本后,错误消失。此问题,并没有实际验证,建议测试环境通过后,再上生产环境。

  1. wget https://www.openssl.org/source/openssl-1.1.1g.tar.gz
  2. tar -zvxf openssl-1.1.1g.tar.gz
  3. cd openssl-1.1.1g
  4. ./config shared zlib
  5. make
  6. make install
  7. mv /usr/bin/openssl /usr/bin/openssl.bak
  8. mv /usr/include/openssl /usr/include/openssl.bak
  9. find / -name openssl
  10. ln -s /usr/local/bin/openssl /usr/bin/openssl
  11. ln -s /usr/local/include/openssl /usr/include/openssl
  12. find / -name "libssl*"
  13. echo "/usr/local/lib64/" >> /etc/ld.so.conf

SqlServer 2017 下载地址及密钥

下载地址:

https://packages.microsoft.com/rhel/7/mssql-server-2017/

  1. Enterprise Core 6GPYM-VHN83-PHDM2-Q9T2R-KBV83
  2. Developer 22222-00000-00000-00000-00000
  3. Enterprise TDKQD-PKV44-PJT4N-TCJG2-3YJ6B
  4. Strandard PHDV4-3VJWD-N7JVP-FGPKY-XBV89
  5. Web WV79P-7K6YG-T7QFN-M3WHF-37BXC

通过环境变量设置密钥许可:

  1. sudo MSSQL_PID='Developer' /opt/mssql/bin/mssql-conf setup

通过环境变量MSSQL_PID,设置 SQL Server 版本或产品密钥。 可能的值包括:Evaluation、Developer、Express、Web、Standard、Enterprise、产品密钥。

参考资料

(完)