Linux CentOS 7.7 安装 SQL Server 2017
在 CentOS 或 RHEL 系统中安装 Microsoft SQL Server 2017 。
安装条件
必须拥有 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
。
sudo curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/7/mssql-server-2017.repo
2、运行以下命令以安装 SQL Server:
sudo yum install -y mssql-server
3、包安装完成后,运行 mssql-conf setup,按照提示设置 SA 密码并选择版本。
添加环境变量,增加 MSSQL 中文支持:
export MSSQL_COLLATION='Chinese_PRC_CI_AS'
export MSSQL_LCID='2052'
# 查看环境变量,是否设置成功
echo $MSSQL_COLLATION
echo $MSSQL_LCID
sudo /opt/mssql/bin/mssql-conf setup
[root@xxxx ~]# /opt/mssql/bin/mssql-conf setup
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.
Details about editions can be found at
https://go.microsoft.com/fwlink/?LinkId=852748&clcid=0x409
Use of PAID editions of this software requires separate licensing through a
Microsoft Volume Licensing program.
By choosing a PAID edition, you are verifying that you have the appropriate
number of licenses in place to install and run this software.
Enter your edition(1-8): 8
选择 Enterprise Core 版本,与 Enterprise 版本相比,只是缺少了图形操作界面,更适合无界面的操作系统。
4、完成配置后,验证服务是否正在运行:
systemctl status mssql-server
5、设置远程连接
若要允许远程连接,请在 RHEL 的防火墙上打开 SQL Server 端口。 默认的 SQL Server 端口为 TCP 1433。 如果为防火墙使用的是 FirewallD,则可以使用以下命令:
sudo firewall-cmd --zone=public --add-port=1433/tcp --permanent
sudo firewall-cmd --reload
安装 SQL Server 命令行工具
1、下载 Microsoft Red Hat 存储库配置文件。
如果使用 RHEL 7(CentOS 7),请将以下路径更改为/rhel/7
而不是/rhel/8
。
sudo curl -o /etc/yum.repos.d/msprod.repo https://packages.microsoft.com/config/rhel/7/prod.repo
2、如果安装了早期版本的 mssql-tools,请删除所有旧的 unixODBC 包。
sudo yum remove unixODBC-utf16 unixODBC-utf16-devel
3、运行以下命令,以使用 unixODBC 开发人员包安装 mssql-tools 。
sudo yum install -y mssql-tools unixODBC-devel
4、添加 PATH 环境变量
为方便起见,向 PATH 环境变量添加/opt/mssql-tools/bin/
。 这样可以在不指定完整路径的情况下运行这些工具。运行以下命令以修改登录会话和交互式/非登录会话的路径:
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc
本地连接
以下步骤使用 sqlcmd 本地连接到新的 SQL Server 实例。
使用 SQL Server 名称 (-S),用户名 (-U) 和密码 (-P) 的参数运行 sqlcmd 。 在本教程中,用户进行本地连接,因此服务器名称为 localhost。 用户名为 SA,密码是在安装过程中为 SA 帐户提供的密码。
sqlcmd -S localhost -U SA -P '<YourPassword>'
# or
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.memorylimitmb
的set
命令以根用户身份运行mssql-conf
脚本 。 以下示例将 SQL Server 可用的内存更改为 3.25 GB (3328 MB)。
sudo /opt/mssql/bin/mssql-conf set memory.memorylimitmb 3328
# 设置为 1.25G(1280M)
sudo /opt/mssql/bin/mssql-conf set memory.memorylimitmb 1280
2、重启 SQL Server 服务以应用更改:
sudo systemctl restart mssql-server
启用 SQL Server 代理
使用sqlagent.enabled
设置可启用 SQL Server 代理。 默认情况下,SQL Server 代理处于禁用状态。 如果mssql.conf
设置文件中不存在sqlagent.enabled
,则 SQL Server 在内部假定已禁用 SQL Server 代理。
若要更改此设置,请使用以下步骤:
1、启用 SQL Server 代理:
sudo /opt/mssql/bin/mssql-conf set sqlagent.enabled true
2、重启 SQL Server 服务:
sudo systemctl restart mssql-server
查看当前设置
要查看任何已配置的设置,请运行以下命令以输出mssql.conf
文件的内容:
sudo cat /var/opt/mssql/mssql.conf
请注意,此文件中未显示的所有设置均使用其默认值。
其他配置
例如,修改默认 TCP 端口、数据库文件目录、等等。更多可配置项,请查看:使用 mssql-conf 工具配置 Linux 上的 SQL Server
卸载
sudo systemctl stop mssql-server
sudo yum remove mssql-server
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
。
/opt/mssql/bin/sqlservr: /lib64/libc.so.6: version `GLIBC_2.18' not found (required by /opt/mssql/bin/../lib/libc++abi.so.1)
Initial setup of Microsoft SQL Server failed. Please consult the ERRORLOG
in /var/opt/mssql/log for more information.
修复错误:
# 下载
curl -O http://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.gz
# 解压
tar zxf glibc-2.18.tar.gz
# 进入目录,创建目录 build 编译构建
cd glibc-2.18/
mkdir build
cd build/
../configure --prefix=/usr
# 安装
make -j2
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.
解决方法:
cd /opt/mssql/bin/ # 进入目录
mv sqlservr sqlservr.bak # 保存备份文件
python # 使用 Python2 修改内存限制代码
>>> oldfile = open("sqlservr.bak", "rb").read()
>>> newfile = oldfile.replace("\x00\x94\x35\x77", "\x00\x80\x84\x1e")
>>> open("sqlservr", "wb").write(newfile)
>>> exit()
即把 sqlservr 中 16 进制数据00943577
(小端存储,实际上是 16 进制77359400
,10 进制2000000000
)即 2GB 更改为 16 进制0080841e
512MB 。
有些 MSSQL 版本需要更替为下面修改:
>>> 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 :
[root@localhost bin]# chmod 755 sqlservr
# 目录权限修改
chmod 600 my/
# 目录及子目录和子文件,权限修改
chmod -R 777 my/
注意:如果使用 Python3 执行上面的代码,会遇到语法错误,可修改如下。
newfile = oldfile.replace("\x00\x94\x35\x77".encode(encoding="utf-8"), "\x00\x80\x84\x1e".encode(encoding="utf-8"))
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 语句进行解决:
sp_configure 'show advanced options', 1;
go
reconfigure;
go
sp_configure 'Agent XPs', 1;
go
reconfigure;
go
输出消息:
配置选项 'show advanced options' 已从 0 更改为 1。请运行 RECONFIGURE 语句进行安装。
配置选项 'Agent XPs' 已从 0 更改为 1。请运行 RECONFIGURE 语句进行安装。
升级 openssl
https://www.openssl.org/source/
查看版本:
[root@localhost openssl-1.1.1g]# openssl version
OpenSSL 1.0.2k-fips 26 Jan 2017
注意:升级 openssl 有风险,在网上看到其他用户,在升级后出现错误Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : TCP Provider: Error code 0x68.
。在退回版本后,错误消失。此问题,并没有实际验证,建议测试环境通过后,再上生产环境。
wget https://www.openssl.org/source/openssl-1.1.1g.tar.gz
tar -zvxf openssl-1.1.1g.tar.gz
cd openssl-1.1.1g
./config shared zlib
make
make install
mv /usr/bin/openssl /usr/bin/openssl.bak
mv /usr/include/openssl /usr/include/openssl.bak
find / -name openssl
ln -s /usr/local/bin/openssl /usr/bin/openssl
ln -s /usr/local/include/openssl /usr/include/openssl
find / -name "libssl*"
echo "/usr/local/lib64/" >> /etc/ld.so.conf
SqlServer 2017 下载地址及密钥
下载地址:
https://packages.microsoft.com/rhel/7/mssql-server-2017/
Enterprise Core 6GPYM-VHN83-PHDM2-Q9T2R-KBV83
Developer 22222-00000-00000-00000-00000
Enterprise TDKQD-PKV44-PJT4N-TCJG2-3YJ6B
Strandard PHDV4-3VJWD-N7JVP-FGPKY-XBV89
Web WV79P-7K6YG-T7QFN-M3WHF-37BXC
通过环境变量设置密钥许可:
sudo MSSQL_PID='Developer' /opt/mssql/bin/mssql-conf setup
通过环境变量MSSQL_PID
,设置 SQL Server 版本或产品密钥。 可能的值包括:Evaluation、Developer、Express、Web、Standard、Enterprise、产品密钥。
参考资料
- Linux 上的 SQL Server 概述 - SQL Server
- RHEL:在 Linux 上安装 SQL Server - SQL Server
- SQL Server 2017 Linux 安装说明以及避坑指南
(完)