问题引入

这天老鸟满面春风找到菜鸟:“鸟儿啊,看你最近研究SQL Server On Linux如鱼得水,干得不错啊。不过呢,这是一个张扬个性的年代,要创新,要与众不同,那你怎么在Linux平台对SQL Server做个性化的配置吧?比如,我们数据库文件存放的路径,备份文件存放的路径,排序规则等等”。
“鸟哥,今天心情不错啊,捡到金子啦?得了,这就按您的指示办去”。

问题分析

老鸟这个需求还是很有现实意义的,比如在Windows平台,我们会标准化SQL Server数据库文件存放的路径,定制化排序规则等。比如:mdf文件会存放在D:\DATA\DBName\SQL目录,ldf文件会存放在D:\DATA\DBName\LOG目录下。让我们看看SQL Server On Linux是怎么张扬它的个性化配置的。

个性化配置

在个性化配置之前,让我们来看SQL Server On Linux的默认配置是什么样子。

数据存放位置和排序规则

查看数据库物理文件的存放位置,只需要访问视图sys.master_files,默认排序规则访问视图sys.databases。脚本如下:

USE masterGOSELECT database_name = db_name(database_id) ,file_name = name,physical_name
FROM sys.master_filesSELECT database_name = name, collation_name
FROM sys.databases;  

查询结果截图如下:

这里必须要吐槽,不吐不快,从SSMS查看数据库的物理位置,有两点很难理解,当然不知道微软后续的发版会不会改善:
Windows是使用反斜线“\”来划分目录结构,而Linux系统使用的是正斜线“/”。
查询出来的结果集目录中会强制添加C:盘地址。
最终的对应关系是:Linux上的/var/opt/mssql/data对应于Windows上的目录C:\var\opt\mssql\data。吐槽截图如下:

个性化配置脚本

在最开始做个性化配置脚本时候,我所有的这些目录是放在/var/opt/mssql/data/这个根目录下,后来发现这种做法有一个很大的坑,后面的“一个深坑”错误处理时会讲到。后来,我把根目录放到/data/下,算是踩过了这个坑。这么大的一个深坑,微软的攻城狮,你出来,我们聊聊,我保证不打残你。

# vim reconfMSSQLOnLinux.sh#!/bin/sh# --------------------------------------------## purpose: # this script is for MSSQL on Linux# reconfiguration.## --------------------------------------------# change mssql-server listen on 1435 from 1433echo "change mssql-server listen port to 1435"/opt/mssql/bin/mssql-conf set tcpport 1435# Change the default data directory locationecho "change mssql-server default data directory location"mkdir /data/SQL
chown mssql /data/SQL && chgrp mssql /data/SQL/opt/mssql/bin/mssql-conf set defaultdatadir /data/SQL# Change the default log directory locationecho "change mssql-server default log directory location"mkdir /data/LOG
chown mssql /data/LOG && chgrp mssql /data/LOG/opt/mssql/bin/mssql-conf set defaultlogdir /data/LOG# Change the default dump directory locationecho "change mssql-server default dump directory location"mkdir /data/DUMP
chown mssql /data/DUMP && chgrp mssql /data/DUMP/opt/mssql/bin/mssql-conf set defaultdumpdir /data/DUMP# Change the default backup directory locationecho "change mssql-server default backup direcotry location"mkdir /data/BACKUP
chown mssql /data/BACKUP && chgrp mssql /data/BACKUP/opt/mssql/bin/mssql-conf set defaultbackupdir /data/BACKUP# Enable/Disable traceflagsecho "mssql-server trace flag 1222 & 1204 enabled"/opt/mssql/bin/mssql-conf traceflag 1222 1204 on# Change the SQL Server collationecho "change mssql-server default collation"/opt/mssql/bin/mssql-conf set-collation[root@localhost ~]# chmod +x reconfMSSQLOnLinux.sh

执行配置脚本

仔细看这个返回结果,也是在根目录/data/前加了盘符C:,始终觉得怪怪的。最后,输入新的排序规则确认后,一会儿SQL Server就会完成个性化的设置并重启。

# sh reconfMSSQLOnLinux.shchange mssql-server listen port to 1435Applying value '1435' to 'tcpport'.
Restart of SQL Server is required to apply this setting. Please run 'systemctl restart mssql-server.service' when ready.
change mssql-server default data directory location
Applying value 'C:\data\SQL' to 'defaultdatadir'.
Restart of SQL Server is required to apply this setting. Please run 'systemctl restart mssql-server.service' when ready.
change mssql-server default log directory location
Applying value 'C:\data\LOG' to 'defaultlogdir'.
Restart of SQL Server is required to apply this setting. Please run 'systemctl restart mssql-server.service' when ready.
change mssql-server default dump directory location
Applying value 'C:\data\DUMP' to 'defaultdumpdir'.
Restart of SQL Server is required to apply this setting. Please run 'systemctl restart mssql-server.service' when ready.
change mssql-server default backup direcotry location
Applying value 'C:\data\BACKUP' to 'defaultbackupdir'.
Restart of SQL Server is required to apply this setting. Please run 'systemctl restart mssql-server.service' when ready.
mssql-server trace flag 1222 & 1204 enabled
Applying traceflag '1222'.
Restart of SQL Server is required to apply this setting. Please run 'systemctl restart mssql-server.service' when ready.
Applying traceflag '1204'.
Restart of SQL Server is required to apply this setting. Please run 'systemctl restart mssql-server.service' when ready.
change mssql-server default collation
This option will change the collation for SQL Server and RESTART the server. Continue [Yes/No]: Yes
Enter the collation: Chinese_PRC_CI_AS

一个深坑

在最开始测试过程中,所有目录放到根目录/var/opt/mssql/data/下,执行会出现以下异常信息,无法创建tempdb,错误的原因是在C:\data\SQL\目录下不存在tempdb.mdf文件。第一反应是,什么东西啊?C:\data\SQL\tempdb.mdf?我没有配置任何文件放到这个目录啊,还C盘呢?你以为是你的Windows操作系统吗?
最后聪明伶俐,人见人爱,车间车爆胎的菜鸟,大胆猜测,小心求证,终于搞明白了。反过来猜想,估计微软这帮攻城狮只截取了最后两层目录,比如/var/opt/mssql/data/SQL,他们会把/data/SQL做为数据库数据文件的存放目录,实在是令人着急。来看看错误信息:

2016-12-14 09:24:35.40 spid6s      Error: 5123, Severity: 16, State: 1.
2016-12-14 09:24:35.40 spid6s      CREATE FILE encountered operating system error 31(A device attached to the system is not functioning.) while attempting to open or create the physical file 'C:\data\SQL\tempdb.mdf'.2016-12-14 09:24:35.44 spid6s      Error: 17204, Severity: 16, State: 1.2016-12-14 09:24:35.44 spid6s      FCB::Open failed: Could not open file C:\data\SQL\tempdb.mdf for file number 1.  OS error: 2(The system cannot find the file specified.).2016-12-14 09:24:35.44 spid6s      Error: 5120, Severity: 16, State: 101.2016-12-14 09:24:35.44 spid6s      Unable to open the physical file "C:\data\SQL\tempdb.mdf". Operating system error 2: "2(The system cannot find the file specified.)".2016-12-14 09:24:35.45 spid6s      Error: 1802, Severity: 16, State: 4.2016-12-14 09:24:35.45 spid6s      CREATE DATABASE failed. Some file names listed could not be created. Check related errors.2016-12-14 09:24:35.45 spid6s      Could not create tempdb. You may not have enough disk space available. Free additional disk space by deleting other files on the tempdb drive and then restart SQL Server. Check for additional errors in the operating system error log that may indicate why the tempdb files could not be initialized.

截个图留恋,证明下:

有了这层意思的精神领会以后,解决问题的方法就So easy了。

# mkdir -p /data/SQL# mkdir -p /data/LOG# chown mssql -R /data# chgrp mssql -R /data

再次重试个性化配置脚本sh reconfMSSQLOnLinux.sh,这次总算成功了,谢天谢地。

打开防火墙

为了让外部客户端SSMS连接重新配置后的实例,请打开防火墙1435端口

[root@localhost ~]# firewall-cmd --zone=public --add-port=1435/tcp --permanentsuccess[root@localhost ~]# firewall-cmd --reloadsuccess

再次检查数据存放位置

重新配置完成后,接下来做如下测试:
创建数据:看看数据库mdf和ldf文件会不会放到/data/SQL和/data/LOG目录下。
备份数据库:看看数据库备份文件会不会放到/data/BACKUP目录。
排序规则检查:检查数据库是否是新的排序规则Chinese_PRC_CI_AS

create database TestDB2;
GOBACKUP DATABASE [TestDB2] TO DISK = N'TestDB2_full_20161213.bak' WITH NOFORMAT, NOINIT, NAME = 'TestDB2-full', SKIP, NOREWIND, NOUNLOAD, STATS = 10BACKUP LOG [TestDB2] TO  DISK = N'TestDB2_LogBackup_20161213.bak' WITH NOFORMAT
, NOINIT,  NAME = N'TestDB2_LogBackup_2016-12-13', NOSKIP, NOREWIND, NOUNLOAD ,  STATS = 5GOUSE masterGOSELECT database_name = db_name(database_id) ,file_name = name,physical_name
FROM sys.master_filesSELECT database_name = name, collation_name
FROM sys.databases;  

查询结果展示如下:

使用Linux的tree命令看看/data目录文件结构,如下图展示:

从SSMS查询结果和Linux目录结构来看,所有现象都满足预期,菜鸟对SQL Server On Linux进行了个性化配置。

写在最后

过程历经艰辛,但最终我们到达了成功的彼岸,总算对SQL Server On Linux进行了个性化的配置。就像我们最开始研究Linux版SQL Server说的那样,他还是只个刚出生的孩子,还有很多不完善的地方,甚至看起来还有点怪异。但是,让我们充满期望,给予宽容和友善让他茁壮成长。

相关文章:

  • SQL Server 急救包(First Responder Kit)入门教程

  • SQL Server on Linux 理由浅析

  • SQLServer On Linux Package List on CentOS

  • SQL Server on Linux的文件和目录结构

原文地址:https://yq.aliyun.com/articles/67204


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

个性化配置你的SQL Server on Linux相关推荐

  1. linux sql server硬件要求,SQL Server On Linux(20)—— SQL Server On Linux性能(6)——针对性能的配置(Linux层面)...

    前面两篇大部分属于Windows和 Linux 平台公用,但是这一篇主要集中在Linux内核层面.因为本系列是Linux上的SQL Server(以2017.2019为主体)的介绍. 完整的列表可以查 ...

  2. linux下装sqlserver安装包,【sqlServer】CentOS7.x 上Microsoft SQL Server for Linux安装和配置...

    SQL Server Documentation https://docs.microsoft.com/en-us/sql/sql-server/sql-server-technical-docume ...

  3. 当SQL Server爱上Linux:配置 SQL Server 2017 上的可用性组初体验

    作者 | 张乐奕:Oracle ACE 总监,ACOUG (中国 Oracle 用户组)联合发起人.Oracle 数据库高可用解决方案与  Exadata 一体机专家.长于数据库故障诊断,性能调优.作 ...

  4. 配置 sql server linux,配置SQL Server on Linux(2)

    1. 前言 前一篇配置SQL Server on Linux(1),地址:http://www.cnblogs.com/fishparadise/p/8125203.html ,是关于更改数据库排序规 ...

  5. SQL Server on Linux的文件和目录结构

    问题引入 "鸟儿啊,我记得你写过一篇<SQLServer On Linux Package List on CentOS>的文章,从这篇文章,我们很清楚的知道了SQL Serve ...

  6. 问君能有几多愁,恰似不懂Linux SQL如何调优——聊聊SQL Server on Linux最佳实践

    问君能有几多愁,恰似不懂Linux SQL如何调优--聊聊SQL Server on Linux最佳实践 自从微软开始拥抱Linux, SQL Server 很快就推出了 Linux版本, linux ...

  7. linux sqlserver有图形化吗,SQL Server for Linux 下一版本的公共预览

    当微软宣布即将发布SQL Server for Linux版本的时候,有些人觉得很兴奋,有些人觉得然并卵,但是既然Gartner在2016年的数据库管理系统魔力象限图中将微软列在了第一位,超过了一直以 ...

  8. sql server linux性能,SQL Server On Linux(17)—— SQL Server On Linux性能(3)——内置特性(3)——I/O行为...

    对于关系数据库而言,CPU.内存和I/O子系统都是不可缺乏的硬件资源,哪个出问题都会直接影响性能,不过要注意不少表象,好比CPU利用率高,有时候仅仅是由于内存不够,CPU忙于把数据从内存和磁盘之间不停 ...

  9. SQL Server On Linux(3)——SQL Server 2019 For Linux 下载并部署示例数据库

    本人新书上市,请多多关照:<SQL Server On Linux运维实战 2017版从入门到精通>   接上文SQL Server On Linux(2)--SQL Server 201 ...

最新文章

  1. 时空大数据可视化表达分析,看MapGIS七大“超能力”
  2. rail server 启动时报告错误undefine mysql_get_client_info
  3. python测试开发django-35.xadmin注册表信息
  4. C#开发微信门户及应用(25)-微信企业号的客户端管理功能
  5. 推荐系统之业务架构总览
  6. Python2和Python3中raise Exception
  7. PAT——个位数统计(1021)
  8. modbus4-232 485 单机 多机
  9. WPF 类型“System.ComponentModel.ISupportInitialize”在未被引用的程序集中定义。
  10. Excel导入MS SQL SERVER 操作
  11. php order by where,无合适where条件过滤时尽量选择order by后的字段以驱动表进行查询...
  12. grunt使用小记之uglify:最全的uglify使用DEMO
  13. linux内核I2C体系结构(注意结构体原型)
  14. SonarQube遇到的启动问题及解决方案
  15. C++ 在.h文件中包含头文件和在.cpp文件中包含头文件有什么区别?
  16. Unity 安装Vuforia配置Android时遇到的问题及解决
  17. C#调用RDP,实现远程桌面共享及控制
  18. matlab 函数最大值位置,matlab中,两个自变量的函数怎么求最大值(急急急急!!1)...
  19. Dell R640服务器centos系统增加万兆网卡设置
  20. 小米全面对标iPhone

热门文章

  1. 【linux磁盘分区--格式化】fdisk,parted,mkfs.ext3
  2. MYSQ 查看 2 进制日志
  3. 22、多进程和多线程
  4. zabbix2.0安装与配置
  5. 在 WASI 上运行 .NET 7 应用程序
  6. WPF 四种不同效果呼吸灯
  7. .net core 中如何有效屏蔽重复提交
  8. 微软发布了Visual Studio 2022 RC版,并将在11月8日发布正式版
  9. 微软面向初学者的机器学习课程:1.4-机器学习技术
  10. WPF实现实现圆形菜单