天天看点

个性化配置你的SQL Server on Linux问题引入问题分析个性化配置写在最后

这天老鸟满面春风找到菜鸟:“鸟儿啊,看你最近研究sql server on linux如鱼得水,干得不错啊。不过呢,这是一个张扬个性的年代,要创新,要与众不同,那你怎么在linux平台对sql server做个性化的配置吧?比如,我们数据库文件存放的路径,备份文件存放的路径,排序规则等等”。

“鸟哥,今天心情不错啊,捡到金子啦?得了,这就按您的指示办去”。

老鸟这个需求还是很有现实意义的,比如在windows平台,我们会标准化sql server数据库文件存放的路径,定制化排序规则等。比如:mdf文件会存放在d:datadbnamesql目录,ldf文件会存放在d:datadbnamelog目录下。让我们看看sql server on linux是怎么张扬它的个性化配置的。

在个性化配置之前,让我们来看sql server on linux的默认配置是什么样子。

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

查询结果截图如下:

个性化配置你的SQL Server on Linux问题引入问题分析个性化配置写在最后

这里必须要吐槽,不吐不快,从ssms查看数据库的物理位置,有两点很难理解,当然不知道微软后续的发版会不会改善:

windows是使用反斜线“”来划分目录结构,而linux系统使用的是正斜线“/”。

查询出来的结果集目录中会强制添加c:盘地址。

最终的对应关系是:linux上的/var/opt/mssql/data对应于windows上的目录c:varoptmssqldata。吐槽截图如下:

个性化配置你的SQL Server on Linux问题引入问题分析个性化配置写在最后

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

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

在最开始测试过程中,所有目录放到根目录/var/opt/mssql/data/下,执行会出现以下异常信息,无法创建tempdb,错误的原因是在c:datasql目录下不存在tempdb.mdf文件。第一反应是,什么东西啊?c:datasqltempdb.mdf?我没有配置任何文件放到这个目录啊,还c盘呢?你以为是你的windows操作系统吗?

最后聪明伶俐,人见人爱,车间车爆胎的菜鸟,大胆猜测,小心求证,终于搞明白了。反过来猜想,估计微软这帮攻城狮只截取了最后两层目录,比如/var/opt/mssql/data/sql,他们会把/data/sql做为数据库数据文件的存放目录,实在是令人着急。来看看错误信息:

截个图留恋,证明下:

个性化配置你的SQL Server on Linux问题引入问题分析个性化配置写在最后

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

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

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

重新配置完成后,接下来做如下测试:

创建数据:看看数据库mdf和ldf文件会不会放到/data/sql和/data/log目录下。

备份数据库:看看数据库备份文件会不会放到/data/backup目录。

排序规则检查:检查数据库是否是新的排序规则chinese_prc_ci_as

查询结果展示如下:

个性化配置你的SQL Server on Linux问题引入问题分析个性化配置写在最后

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

个性化配置你的SQL Server on Linux问题引入问题分析个性化配置写在最后

从ssms查询结果和linux目录结构来看,所有现象都满足预期,菜鸟对sql server on linux进行了个性化配置。

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