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(系统找不到指定的文件。)。
报错的话…
没错,是因为所给的目录不正确或者上次安装失败的数据库还在。解决方案是清空文件目录(如果删除了,别忘了设置权限,不然文件访问不了)。
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 整个搭建集群的过 ...
- Oracle DBLink跨数据库访问SQL server数据同步 踩坑实录
项目需求:这里暂且叫A公司吧,A公司有一套人事管理软件,需要与我们公司的软件做人员信息同步,A公司用的是SQL server数据库,我们公司用的Oracle,接口都不会开发(一万句"fuck ...
- Microsoft SQL Server for Linux安装和配置
虽说mssql for linux早已经出来了,但原本没有打算这么早就去尝试的,无奈之下还是得先尝试用了,这里分几篇介绍我在用mssql for linux时遇到的问题,不得不说作为先吃螃蟹的人总是要 ...
- Microsoft SQL Server on Linux破解 2G内存限制
首先,贴上微软官方安装方法,大家按照官方的操作就行. 微软官方安装方法 相信很多同学遇到一个问题就是: sqlservr: This program requires a machine with a ...
- 使用Docker运行Microsoft SQL Server 2017
最近每天都在空闲时间努力编写Apworks框架的案例代码WeText.在文本发布和处理微服务中,我打算使用微软的SQL Server for Linux来做演示,于是也就在自己的docker-comp ...
- 从Microsoft SQL Server迁移到MySQL指南
转自 https://www.mysql.com/why-mysql/white-papers/sql-server-to-mysql-zh/ 由于 MySQL 将节约成本.自由选择平台.特性丰富等优 ...
- Microsoft SQL Server 2005 Service fails to start
今天碰到一雷死人的事情,在Windows Server 2012 R2上安装SQL SERVER 2005标准版过程中一直遇到"The SQL Server service failed t ...
- Linux下安装SQL Server 2016(连接篇SQL Server on linux)
连接数据库 (1)设置防火墙 要连接数据库,首先要打开防火墙上1433端口,也就是,增加tcp端口1433到公共区域,并且永久生效. [root@localhost Desktop]# firewal ...
- C# -- HttpWebRequest 和 HttpWebResponse 的使用 C#编写扫雷游戏 使用IIS调试ASP.NET网站程序 WCF入门教程 ASP.Net Core开发(踩坑)指南 ASP.Net Core Razor+AdminLTE 小试牛刀 webservice创建、部署和调用 .net接收post请求并把数据转为字典格式
C# -- HttpWebRequest 和 HttpWebResponse 的使用 C# -- HttpWebRequest 和 HttpWebResponse 的使用 结合使用HttpWebReq ...
随机推荐
- scrapy知识积累
Scrapy 中文文档https://scrapy-chs.readthedocs.io/zh_CN/latest/intro/overview.html 创建项目 scrapy startproje ...
- PHP时间范围:本周、本月、下月等简写
在阅读TP5.1源码,发现其在时间范围上的写法很特别,个人第一次见,做一次记录 $timeRule = [ 'today' => ['today', 'tomorrow'], 'yesterda ...
- 关于内存类型 UDIMM、RDIMM、LRDIMM 的学习结论(转)
随着内存技术不断发展,服务器上内存的容量.密度和速度也越来越高.目前在市场上出现的内存条最高密度可以做到每条内存条 4 个 Rank,容量达到 32GB/条,最高速度达到 1.6GHz.高密度高频率也 ...
- 反射List<M> To DataTable|反射IList To DataTable|反射 DataTable To List<M>
将DataTable集合反射获取 List<M> /// <summary> /// 根据DataTable集合反射获取 List<M> /// </summ ...
- kindeditor 富文本粘贴 图片
<script type="text/javascript" src="../../Scripts/Plugins/kindeditor/kindeditor.js ...
- js常见input校验
//校验输入价格等,保留2位小数 function clearNoNum(obj){ obj.onkeyup = function(event){ var e = event || window.ev ...
- 学习node.js的C++扩展
本想买本书,可是太贵,了一下作者可惜没有回应,不然也会去支持一下.于是自己baidu罗.先是从这个入手 安装好环境 https://github.com/nodejs/node-gyp#install ...
- 1105 Spiral Matrix
This time your job is to fill a sequence of N positive integers into a spiral matrix in non-increasi ...
- VHDL基础1
Description Structure 一个可综合的VHDL描述中一般由3部分组成:LIBRARY declarations.ENTITY.ARCHITECTURE Library(库)用来设计重 ...
- noip第29课作业
1. 钢条切割 [问题描述] 一家公司购买长钢条,将其切割成短钢条出售,切割本身没有成本,长度为i的短钢条的价格为Pi.那给定一段长度为n的钢条和一个价格表Pi,求钢条的切割方案使得收益Rn最大. ...