Microsoft SQL Server on Linux 踩坑指南

微软用 SQL Server 在 2016 年的时候搞了一个大新闻,宣传 Microsoft ?? Linux 打得一众软粉措手不及。但是这还是好事情,Linux 上也有好用的 SQL Server 啦,但是从预览版开始 SQL Server on Linux 的配置要求蜜汁高,大部分云主机用户都望而却步。另外,SQL Server on Linux 对于文件系统有限制,仅支持 Ext3 以及 XFS 文件格式系统,对于某些云服务商默认提供的云镜像限制 Ext3 文件格式系统的用户而言也是足够让人懊恼。

本文以 CentOS 为例,如果使用的是 Ubuntu,或者 SUSE 可能在步骤上会有所不同。总的来说,建议使用 Docker 部署的方式进行部署。

踩坑前...

https://docs.microsoft.com/zh-cn/sql/linux/sql-server-linux-setup-red-hat

微软的官方指南,按照这个流程走即可。

破解内存限制

虽然网上有文告诉如何破解预览版 3.25G 内存限制的文章,但是很皮的是,微软在 Update 4 后把内存限制改成了 2G,也就是,即使你按照指南操作,安装时空闲内存不足 2000M 一样会得到报错消息:

sqlservr: This program requires a machine with at least 2000 megabytes of memory.

有时候我们会想,我就跑个 Express,没钱买 Enterprise 或者 Web,Express 也就只能用 1G RAM,要那么多来干什么… 其实参考文章还是有效,但是需要修改的这个常量而不是 3250000000 而是 2000000000。使用 Python:

>>> oldfile = open("sqlservr.bak", "rb").read()
>>> newfile = oldfile.replace("\x00\x94\x35\x77", "\x00\x80\x84\x1e")
>>> open("sqlservr", "wb").write(newfile)

修改后,内存限制被缩小为 512 兆字节。

但是需要注意的是,SQL Server Express 版本依然需要 650M 内存。所以如果你的机器只有 1G 或者更低,还是够呛。务必使用 1.5G RAM。

Ext3 文件格式系统造成不兼容

微软在发行注记上说,仅支持 XFS 或者 Ext4 文件格式系统。现在部分云服务商为了确保兼容性依然针对系统盘采用了 Ext3 文件格式系统(结果造成了 SQL Server 不兼容),其实稍不注意忽略这一点可以坑一整天,并且永远都是蜜汁报错,然后自己还浑然不觉。

破解这个限制其实只需要把 SQL Server 的数据文件放到 Ext4 文件格式系统的挂载目录下即可。挂载上 Ext4 格式磁盘(假设目录为 /data/),然后新建一个文件目录(此处为 /data/sqlsrv_data/,日志目录为 /data/sqlsrv_data/log/)。

设置权限:

sudo chown -R mssql /data/sqlsrv_data/
sudo chown -R :mssql /data/sqlsrv_data/

如果忽略这一步,后续安装将会失败,并且没有日志文件产生。或者收到报错信息:

ERROR: BootstrapSystemDataDirectories() failure (HRESULT 0x80070002)
Initial setup of Microsoft SQL Server failed. Please consult the ERRORLOG  

然后设置环境变量信息:

export MSSQL_MASTER_DATA_FILE=/data/sqlsrv_data/master.mdf
export MSSQL_MASTER_LOG_FILE=/data/sqlsrv_data/mastlog.ldf
export MSSQL_ERROR_LOG_FILE=/data/sqlsrv_data/log/errorlog

注意,上述环境变量为文件位置而不是目录,填写目录将会安装失败。

然后在 /opt/mssql/bin/ 目录下执行:

./mssql-conf set filelocation.masterdatafile /data/sqlsrv_data/master.mdf
./mssql-conf set filelocation.masterlogfile /data/sqlsrv_data/mastlog.ldf
./mssql-conf set filelocation.errorlogfile /data/sqlsrv_data/log/errorlog

然后执行

./mssql-conf setup

片刻,执行

systemctl status mssql-server

检查服务状态,如果没看到 systemd[1]: Failed to start Microsoft SQL Server Database Engine. 这类死亡警告,那么恭喜阁下安装成功,使用 Microsoft SQL Server Management Studio 开始愉快的 Linux × SQL Server 的 CP 体验吧。

要是失败了呢?

如果按照操作你都失败了,尤其是看到

FCB::Open failed: 无法打开文件号 1 的文件 d:\dbs\sh\s17o\0209_182031\cmd\16\obj\x64retail\sql\mkmastr\databases\mkmastr.proj\MSDBData.mdf。操作系统错误: 2(系统找不到指定的文件。)。

报错的话…

没错,是因为所给的目录不正确或者上次安装失败的数据库还在。解决方案是清空文件目录(如果删除了,别忘了设置权限,不然文件访问不了)。

原文地址:https://www.cnblogs.com/johnwii/p/8525490.html

时间: 2024-08-02 05:21:49

Microsoft SQL Server on Linux 踩坑指南的相关文章

Windows Server 2012搭建SQL Server Always On踩坑全记录

Windows Server 2012搭建SQL Server Always On踩坑全记录 环境信息: Windows Server 2012 R2 Sql Server 2012 整个搭建集群的过程主要分为3步: 1.配置预控,并把机器加域. 2.配置windows故障转移集群(Windows Failover Cluster) 3.配置SQL Server Always On High Availability Group(AG) 踩坑全记录 预控配置 比较好配置,需要注意的是非预控机器在

Oracle DBLink跨数据库访问SQL server数据同步 踩坑实录

项目需求:这里暂且叫A公司吧,A公司有一套人事管理软件,需要与我们公司的软件做人员信息同步,A公司用的是SQL server数据库,我们公司用的Oracle,接口都不会开发(一万句"fuck you"),就单单给我们公司提供了一个SQL server的账户和密码,还有一个视图.后来百度一番,可以通过DBLink跨数据库访问,然后做数据信息同步功能. 安装过程中,踩了不少的坑,需要配置很多的东西,QQ群里也请教不少人,都很少人听说还有这玩意,现在做数据对接,都是走到接口,传JSON字符串

Microsoft SQL Server for Linux安装和配置

虽说mssql for linux早已经出来了,但原本没有打算这么早就去尝试的,无奈之下还是得先尝试用了,这里分几篇介绍我在用mssql for linux时遇到的问题,不得不说作为先吃螃蟹的人总是要付出一些代价的,真是会遇到各种奇葩问题,本篇博客只介绍如何安装mssql for linux,我依旧是在CentOS 上尝试安装的.官网也有安装步骤,也不需要过多的解释,我也只放部分截图,步骤如下: 在Linux下安装服务有很多种方式,最简单的也就是yum安装,如果使用yum安装,我们需要指定安装仓

使用Docker运行Microsoft SQL Server 2017

最近每天都在空闲时间努力编写Apworks框架的案例代码WeText.在文本发布和处理微服务中,我打算使用微软的SQL Server for Linux来做演示,于是也就在自己的docker-compose中加入了MS SQL Server的服务.其实在Docker中运行SQL Server是非常容易的,今天大概做个介绍吧. 启动Microsoft SQL Server 2017容器 下面是我目前WeText案例中用于搭建基础结构服务的docker-compose.yml文件(该文件将来还会变动

Microsoft SQL Server 自定义函数整理大全

01.去除字符串中的html标记及标记中的内容 [叶子函数分享一]去除字符串中的html标记及标记中的内容 --1.创建函数 create function [dbo].[clearhtml] (@maco varchar(8000)) returns varchar(8000) as begin     declare @i int     while 1 = 1     begin        set @i=len(@maco)        set @maco=replace(@maco

无需密码攻击 Microsoft SQL Server

最近的一次渗透测试里,在我们捕获的一些数据包中发现了一些未经加密的 Microsoft SQL Server(MSSQL) 流量.起初,我们认为这样就可以直接嗅探到认证凭证,然而,MSSQL 加密了认证的流量,这就意味着我们需要先解密才能获取到认证凭证.如果安装的是一个自签名证书,就很容易进行破解. 不幸的是,破解 MSSQL 加密不在授权范围之内,我们不得不先放下好奇心完成对客户的渗透测试.不过,因为心里总想着一件事以至于无法继续正常进行工作,我们可以在没有用户凭证的情况下攻击 SQL Ser

SQL Server on Linux: How? Introduction: SQL Server Blog

SQL Server Blog Official News from Microsoft's Information Platform https://blogs.technet.microsoft.com/dataplatforminsider/2016/12/16/sql-server-on-linux-how-introduction/ This post was authored by Scott Konersmann, Partner Engineering Manager, SQL

SQL SERVER错误:已超过了锁请求超时时段。 (Microsoft SQL Server,错误: 1222)

在SSMS(Microsoft SQL Server Management Studio)里面,查看数据库对应的表的时候,会遇到"Lock Request time out period exceeded.(Microsoft SQL Server, 错误1222)",对应的中文错误提示为"已超过了锁请求超时时段. (Microsoft SQL Server,错误: 1222)",如下截图所示,不管是用一般权限的账号还是具有sysadmin角色的登录名都是如此. 这

P6 Professional Installation and Configuration Guide (Microsoft SQL Server Database) 16 R1

P6 Professional Installation and Configuration Guide (Microsoft SQL Server Database) 16 R1       May 2016 Contents About This Guide...................................................................................... 11 Shared Topics in This Guide .