SQL Server On Linux(24)——SQL on Linux 备份和还原(1)——备份

本人新书上市,请多多关照:《SQL Server On Linux运维实战 2017版从入门到精通》

在这里插入图片描述

简介

  备份和还原的重要性这里就不多说了,但是需要额外提醒一下,备份和还原应该总是“一个”操作,不考虑还原的备份不能认为是有价值的备份。
  本文重点在Linux上的SQL Server备份,关于Windows上的SQL Server备份,网上已经有很多成熟的资料,这里就不累赘了。
  备份的本质就是把数据库的数据页/区写到磁盘上的文件上。这就引出了一个常见的备份失败——执行备份操作的账号(通常是SQL 引擎服务账号)的权限不够,无法写入对应的文件中。
  所以首先要检查执行备份操作的账号是否有对Linux的备份文件目录有写入权限。在SQL Server中,在SQL Server里面的账号操作,实际上是映射成操作系统的某些账号如Windows上的Administrator(不建议使用)或者Linux上默认的账号“mssql”,这些账号对备份还原操作过程的权限是否足够是一个首要关注点。
  当谈及非特权用户的权限时,我们应该要坚持“具体问题具体分析”的原则。要以文件/文件夹为基础条件来谈及用户的权限,脱离了这些谈权限是不合理的。
  其实Linux上的备份和Windows上的大同小异,重点是了解Linux文件系统。

备份演示

  SQL On Linux的默认备份目录在“/var/opt/mssql/data”,那么现在以之前创建的一个linux用户“superdbadmin”来查看一下目录的权限,在CentOS中可以使用:

~$ ll /var/opt/mssql/data

  但是在Ubuntu中要使用:

-$ ls -al /var/opt/mssql/data

  第一次执行报错,见下图,Permission denied!权限不够,很自然地加上了sudo,现在可以看到了。
在这里插入图片描述
  那么为什么要加sudo呢?可以再看一下上图左下角长方形框住的地方。可以看到这些文件夹默认是不允许其他非特权用户访问的,因此要加sudo提升权限。
  另外可以看看SSMS中的服务器属性:图中框住的地方是灰色,即不可改,这是跟Windows平台其中一个不一样的地方。在Linux上,通常还是要用mssql-conf命令来做。
在这里插入图片描述
  不管是哪个平台,我们在条件允许的前提下都不会把备份文件夹和数据库文件所在的文件夹放在一起,可以考虑在根目录下创建比如/Data的目录专用于存储备份,也可以简单地在/var下创建目录与数据文件分开。由于演示环境的限制,这里演示在/var下创建名为sqlbackup的目录。
  为了达到这个目的,一共分成3步:创建一个新的目录(含配置权限)、修改默认备份目录、校验。

  1. 创建新的备份目录

  使用下面命令在/var下创建名为sqlbackup的目录,如下图,

~$ sudo mkdir /var/sqlbackup

然后使用~$ ls /var来检查是否创建成功,然后再使用~$ ls -al /var命令查看权限:
在这里插入图片描述
  上图的权限显示,新目录的owner是root,为了让SQL Server能使用这个目录,需要把owner切换成mssql。这里使用chown命令修改文件、目录及其链接的owner和组。因为默认情况下,owner是创建者:

~$ sudo chown mssql /var/sqlbackup

在这里插入图片描述
  此时目录的Owner已经修改成mssql,但是处于安全考虑,root比较太大了,而且容易误操作,所以还要修改目录的组的owner:

~$ sudo chgrp mssql /var/sqlbackup

  从下图可以看出文件夹的组也已经修改成mssql:
在这里插入图片描述
  创建目录并配置权限之后,就可以使用mssql-conf工具来修改SQL Server的默认路径。

  1. 修改默认路径
      修改路径通过在Linux上使用mssql-conf工具来实现。该工具默认位于/opt/mssql/bin/下:
~$ sudo /opt/mssql/bin/mssql-conf set filelocation.defaultbackupdir /var/sqlbackup

  执行之后,会有一个提示要求重启SQL Server服务,如下图:
在这里插入图片描述
  按照提示重启服务之后,再次打开SSMS的服务器属性界面,可以看到已经修改成功,如图:
在这里插入图片描述

  到目前为止,备份的准备工作已经完成,当然我们可以不修改路径然后直接备份到有权限或者已经授权给mssql的目录,不过作为有效的运维手段,并不建议在日常工作中过多地覆盖默认值。

  1. 备份数据库
      备份操作与Windows上的SQL Server几乎没有差异,可以使用SSMS来实现,也可以在SQLCMD中实现,最大的区别就在于路径而已。
      图形化操作就略过了,下面在SQLCMD中演示一下,由于前面已经修改了默认路径,所以这里不需要额外指定文件的具体路径,当然如果你觉得无所谓,也可以指定,备份结束后,我们再检查文件夹的内容及权限,可见下图所示:
    在这里插入图片描述
      到此为止,备份操作已经完毕。接下来演示还原操作。

小结

  在Linux上备份数据库,从SQL Server角度看来是一样的,但是要注意Linux的文件目录和权限控制。
  从最佳实践来看,不建议放在默认的地方,因为不管Windows还是Linux,默认路径都不是非常适合存放用户的东西。

发布了192 篇原创文章 · 获赞 1268 · 访问量 250万+

猜你喜欢

转载自blog.csdn.net/DBA_Huangzj/article/details/104692470