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 ...
随机推荐
- TCP粘包问题分析和解决(全)
TCP通信粘包问题分析和解决(全) 在socket网络程序中,TCP和UDP分别是面向连接和非面向连接的.因此TCP的socket编程,收发两端(客户端和服务器端)都要有成对的socket,因此,发送 ...
- php,微信公众号,获取用户地理位置 定位 经纬度
<?php //php插件下载地址: https://files.cnblogs.com/files/fan-bk/jssdk_php.rar //建立一个php文件 require_once ...
- VIP之Clipper
裁剪器II提供方法从视频流中选择有效区域并丢弃剩余部分. 指定有效区域的方式是从到边界的偏移量,或者给出有效区左上角的像素坐标和有效区的宽及高度. 裁剪器IP核通过读取Avalon-ST视频流中的控制 ...
- 《深入浅出MFC》系列之动态创建
/*************************************************************************************************** ...
- 将电脑信息上传到中国移动ONENET平台
用两个小时做的 可以用在服务器远程运维等环境非常方便 需要源码的可以联系NBDX123
- python迭代器实例
1. 迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,知道所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退. 1.1 使用迭代 ...
- lowbit(x)
int Lowbit(int x) { return x&(-x); } lowbit当中x,-x,补码,反码,傻傻分不清楚.我们先看看两个二进制数相减的问题 两个二进制数相减的相关问题 两个 ...
- 初始MapReduce
MapReduce 概述 MapReduce是一个分布式运算程序的编程框架,是用户开发“基于Hadoop的数据分析应用"的核心框架 MapReduce核心功能是将用户编写的业务逻辑代码和自带 ...
- uva10905同一思路的两种做法,前一种WA,后一种AC
这道题应该算一道普通的排序吧,实际上就是另一种形式地比大小,自己最开始是用int型存,后来觉着不行,改用long,结果还是WA,这是第一个程序. 第二个程序是改用string处理,确实比int方便很多 ...
- HyperServer 中的 SSL 支持
HyperServer 中的 SSL 支持 DLL 模式不需要 SSL 配置, 因为 web 服务器 (如 IIS) 将承担 ssl 配置和 ssl 证书的责任. 对于独立和服务模式, ssl 配置是 ...