文章目录
SQLServer 虽然是微软开发的,但是目前已经支持 Windows、Linux、MACOS等。本文详细介绍在 Linux 环境下,如何对 SQL Server 进行安装、升级、回滚、卸载等操作。
文章演示的是在 CentOS8 环境,所使用的 SQL Server 版本是:SQL Server 2019。
在命令行中输入以下命令以添加 Microsoft 的 yum 存储库:
[root@hecs-69777 ~]# curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/8/mssql-server-2019.repo
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 231 100 231 0 0 363 0 --:--:-- --:--:-- --:--:-- 363
[root@hecs-69777 ~]# cat /etc/yum.repos.d/mssql-server.repo
[packages-microsoft-com-mssql-server-2019]
name=packages-microsoft-com-mssql-server-2019
baseurl=https://packages.microsoft.com/rhel/8/mssql-server-2019/
enabled=1
gpgcheck=1
gpgkey=https://packages.microsoft.com/keys/microsoft.asc[root@hecs-69777 ~]#
[root@hecs-69777 ~]# sudo yum install -y mssql-server
packages-microsoft-com-mssql-server-2019 1.2 MB/s | 5.5 MB 00:04
Last metadata expiration check: 0:00:04 ago on Tue 28 Mar 2023 05:59:50 PM CST.
Dependencies resolved.
...
pilot process
...
+--------------------------------------------------------------+
Please run 'sudo /opt/mssql/bin/mssql-conf setup'
to complete the setup of Microsoft SQL Server
+--------------------------------------------------------------+
...
pilot process
...
Complete!
sudo /opt/mssql/bin/mssql-conf setup
此步骤的安装版本不是MSSQL的版本号,而是如下图所示的,在所 1 ~ 8 选项中的某一个版本,其中包括license信息以及企业版本等相关的版本,本文为了演示选择安装的是免费的开发版本(无试用期限限制)。

sa 账号密码在选择完所要安装的MSSQL版本后,会出现确实是否接受试用协议,直接输入 y,表示接受相关协议,接下来在下一步输入sa账号密码,密码长度不能低于8个字符。

进行完上述安装后,我们确认两点
如果成功完成安装 SQL Server,在端口列表中,可以看到 1433 的端口号。
[root@hecs-69777 ~]# netstat -ntlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:1433 0.0.0.0:* LISTEN 72597/sqlservr
tcp 0 0 127.0.0.1:1434 0.0.0.0:* LISTEN 72597/sqlservr
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1627/sshd
tcp 0 0 127.0.0.1:1431 0.0.0.0:* LISTEN 72597/sqlservr
tcp6 0 0 :::1433 :::* LISTEN 72597/sqlservr
tcp6 0 0 ::1:1434 :::* LISTEN 72597/sqlservr
tcp6 0 0 :::22 :::* LISTEN 1627/sshd
tcp6 0 0 ::1:1431 :::* LISTEN 72597/sqlservr

SQL Server 安装成功后,其服务状态为:active(running)状态。
[root@hecs-69777 ~]# systemctl status mssql-server
● mssql-server.service - Microsoft SQL Server Database Engine
Loaded: loaded (/usr/lib/systemd/system/mssql-server.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2023-03-28 18:12:45 CST; 4h 32min ago
Docs: https://docs.microsoft.com/en-us/sql/linux
Main PID: 72573 (sqlservr)
Tasks: 159
Memory: 774.0M
CGroup: /system.slice/mssql-server.service
├─72573 /opt/mssql/bin/sqlservr
└─72597 /opt/mssql/bin/sqlservr
Mar 28 18:18:02 hecs-69777 sqlservr[72573]: [195B blob data]

如果在某一个 Linux 机器中,需要远程连接 SQL Server,需要安装客户端之后才可以进行连接,具体的操作步骤如下 。
添加 Microsoft 的 SQL Server 客户端工具存储库。在终端中输入以下命令:
[root@hecs-69777 ~]# curl -o /etc/yum.repos.d/msprod.repo https://packages.microsoft.com/config/rhel/8/prod.repo
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 192 100 192 0 0 343 0 --:--:-- --:--:-- --:--:-- 342
[root@hecs-69777 ~]# sudo yum install -y mssql-tools unixODBC-devel
packages-microsoft-com-prod 671 kB/s | 6.0 MB 00:09
Last metadata expiration check: 0:00:09 ago on Tue 28 Mar 2023 11:40:11 PM CST.
Dependencies resolved.
...
pilot process
...
Do you accept the license terms? (Enter YES or NO)
yes
...
pilot process
...
Do you accept the license terms? (Enter YES or NO)
yes
Complete!
为了我们可以在任意路径下可以执行 sqlcmd 命令进行本地连接,我们需要配置相关的环境变量。
客户端工具默认安装路径:/opt/mssql-tools/bin/
在终端中输入以下命令:
[root@hecs-69777 ~]# echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
[root@hecs-69777 ~]# source ~/.bashrc
[root@hecs-69777 ~]# which sqlcmd
/opt/mssql-tools/bin/sqlcmd
本地登录使用参数 -S 指定 ip 地址,-U 指定用户,-P指定输入密码,不带-P则会进入输入密码交互模式。
登录成功显示1>,如果需要退出则可以使用quit和:exit,此模式下除了go命令直接输入,其他命令则需要使用冒号开头,例如输入:help获取帮助。
[root@hecs-69777 ~]# sqlcmd -S 127.0.0.1 -U sa
Password:
1>
本地连接状态下输入select @@version和go可以查看到版本信息。
[root@hecs-69777 ~]# sqlcmd -S 127.0.0.1 -U sa
Password:
1>
2>
3> select @@version
4> go

使用 sa 账号登陆进入 MSSQL,进入后执行如下语句,开启远程连接访问权限。
1> EXEC sp_configure 'remote access', 0;
2> GO
Configuration option 'remote access' changed from 1 to 0. Run the RECONFIGURE statement to install.
1> RECONFIGURE;
2> GO
如果你的机器里有开启防火墙配置的话,那么需要添加 1433 端口在防火墙白名单内,具体执行如下命令:
[root@hecs-69777 ~]# sudo firewall-cmd --zone=public --add-port=1433/tcp --permanent
success
[root@hecs-69777 ~]# sudo firewall-cmd --reload
success
注意:如果SQL Server 安装在某些云服务器中,注意设置其安全组的入出站规则,如果没有在安全组中设置1433的白名单,那么就会出现连接 SQL Server 失败的错误。
例如修改华为云的 HECS 安全组规则(如果有设置):

本文为了演示使用的是 Navicat 进行连接演示,根据个人习惯可以自行选择连接工具。
在数据库连接窗口中输入数据库 ip 地址,账户密码,管理员默认账户名sa。

连接成功后,即可执行SQL语句。

本部分非必要可以跳过,如果有一天有需要可以考虑来翻出来本文
sudo systemctl stop mssql-server
为了卸载 Linux 上运行的 mssql-server 包,使用如下命令:
sudo yum remove mssql-server
SQL Server 默认的数据文件存储在 /var/opt/mssql 目录下。可以使用以下命令来删除这些文件:
sudo rm -rf /var/opt/mssql
SQL Server 的配置文件位于 /etc/opt/mssql 目录下。可以使用以下命令来删除这些文件:
sudo rm -rf /etc/opt/mssql
SQL Server 的日志文件位于 /var/log/mssql 目录下。可以使用以下命令来删除这些文件:
sudo rm -rf /var/log/mssql
进行 SQL Server 升级操作的时候,可以直接使用如下命令:
sudo yum update mssql-server
该命令会下载并安装最新包,并替换 /opt/mssql/ 下的二进制文件。用户生成的数据库和系统数据库不会受该操作的影响。
识别你想降级到的 SQL Server 版本号。对应的版本号列表:点击这里(官方版本号)。
执行如下命令进行降级到之前的某一个SQL Server版本。将<version_number>替换为上一步骤中的版本号。
sudo yum downgrade mssql-server-<version_number>.x86_64
注意:这个操作只支持降级到相同主版本内的某一个小版本,如某个大(主)版本号为:SQL Server 2017、SQL Server 2019、SQL Server 2022。
用一个问答来总结该篇文章
为什么我要选择 SQL Server 数据库,而不是 Oracle,或者 MySQL?
完整回答请阅读以下文章:
https://www.sqlservercentral.com/forums/topic/why-should-i-go-for-ms-sql-server-not-for-oracle-and-mysql
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
在控制台中反复尝试之后,我想到了这种方法,可以按发生日期对类似activerecord的(Mongoid)对象进行分组。我不确定这是完成此任务的最佳方法,但它确实有效。有没有人有更好的建议,或者这是一个很好的方法?#eventsisanarrayofactiverecord-likeobjectsthatincludeatimeattributeevents.map{|event|#converteventsarrayintoanarrayofhasheswiththedayofthemonthandtheevent{:number=>event.time.day,:event=>ev
我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po
尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub
我打算为ruby脚本创建一个安装程序,但我希望能够确保机器安装了RVM。有没有一种方法可以完全离线安装RVM并且不引人注目(通过不引人注目,就像创建一个可以做所有事情的脚本而不是要求用户向他们的bash_profile或bashrc添加一些东西)我不是要脚本本身,只是一个关于如何走这条路的快速指针(如果可能的话)。我们还研究了这个很有帮助的问题:RVM-isthereawayforsimpleofflineinstall?但有点误导,因为答案只向我们展示了如何离线在RVM中安装ruby。我们需要能够离线安装RVM本身,并查看脚本https://raw.github.com/wayn
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
我有一个奇怪的问题:我在rvm上安装了rubyonrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(
我刚刚为fedora安装了emacs。我想用emacs编写ruby。为ruby提供代码提示、代码完成类型功能所需的工具、扩展是什么? 最佳答案 ruby-mode已经包含在Emacs23之后的版本中。不过,它也可以通过ELPA获得。您可能感兴趣的其他一些事情是集成RVM、feature-mode(Cucumber)、rspec-mode、ruby-electric、inf-ruby、rinari(用于Rails)等。这是我当前用于Ruby开发的Emacs配置:https://github.com/citizen428/emacs
我正在尝试在我的centos服务器上安装therubyracer,但遇到了麻烦。$geminstalltherubyracerBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtherubyracer:ERROR:Failedtobuildgemnativeextension./usr/local/rvm/rubies/ruby-1.9.3-p125/bin/rubyextconf.rbcheckingformain()in-lpthread...yescheckingforv8.h...no***e
我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search