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 ...
随机推荐
- 5W2H+35问
之前看到的一个非常好且全面的做事方法论.
- Django工程搭建
-----环境安装 1.创建虚拟环境 mkvirtualenv django_py3_1.11 -p python3 2.安装django pip install django==1.11.11 ...
- c++ cout、<< 、cin、>> 、endl 详解
std::cout是在#include<iostream>库中的ostream类型中的对象 std::表示命名空间,标准库定义的所有名字都在命名空间std中 std::cout是在#inc ...
- 利用HttpURLConnection发送post请求上传多个文件
本文要用java.net.HttpURLConnection来实现多个文件上传 1. 研究 form 表单到底封装了什么样的信息发送到servlet. 假如我参数写的内容是hello word,然后二 ...
- Java 理论与实践: 用弱引用堵住内存泄漏
弱引用使得表达对象生命周期关系变得容易了 虽然用 Java™ 语言编写的程序在理论上是不会出现“内存泄漏”的,但是有时对象在不再作为程序的逻辑状态的一部分之后仍然不被垃圾收集.本月,负责保障应用程序健 ...
- [mysqli_escape]mysql转义两次
// mysqli_real_escape_string // 第一次转义的结果 SELECT * FROM example WHERE f_email='example@exampl.com' an ...
- oracle 中top-n的使用
对于ms sqlserver数据库中可以直接使用top(n)提取前N 个结果,而oracle中并不能直接使用的.oracle中提供了对于提取前N 条的结果的方法 那就是用行编号 例如:select ...
- [Proposal]Nano-Diary(纳日记)
[Motivation] 很多人都有记日记的习惯,不为别的,就为了那份情怀.但是也有很多人不记日记,原因是嫌写字麻烦.记得很久很久以前,在<读者>上读过一篇文章,大意是一个人用数值记下每天 ...
- C# 加特效
public class BulletMove : MonoBehaviour { public float Speed = 5f; public Transform Fx; // Use this ...
- Android开发教程 - 使用Data Binding(七)使用BindingAdapter简化图片加载
本系列目录 使用Data Binding(一)介绍 使用Data Binding(二)集成与配置 使用Data Binding(三)在Activity中的使用 使用Data Binding(四)在Fr ...