探索SQL Server 2022在Ubuntu 20.04上的安装、配置、备份与常见问题

这篇具有很好参考价值的文章主要介绍了探索SQL Server 2022在Ubuntu 20.04上的安装、配置、备份与常见问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近新项目要上线,考虑成本,放弃云数据库,选择自行安装,数据库选择SQL Server 2022,系统选择Ubuntu 20.04。

//SQL Server 2022文档地址

https://learn.microsoft.com/zh-cn/sql/sql-server/?view=sql-server-ver16

SQL Server 2022 安装

SQL Server 2022先决条件:服务器内存至少需要2 GB 。

1、导入公共存储库 GPG 密钥

$ wget -qO- https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc

2、注册 SQL Server Ubuntu 存储库

sudo add-apt-repository "$(wget -qO- https://packages.microsoft.com/config/ubuntu/20.04/mssql-server-2022.list)"

3、运行以下命令以安装 SQL Server

sudo apt-get updatesudo apt-get install -y mssql-server

4、等待安装完成后,运行 mssql-conf setup

按照提示选择数据库版本及设置 SA 密码。其中数据库版本Evaluation、Developer 和 Express 版为免费版本。

sudo /opt/mssql/bin/mssql-conf setup

注意:SA 账户密码需要最小长度为 8 个字符,包括大写和小写字母、十进制数字和/或非字母数字符号。

此时如果正常,那恭喜您!但我尝试了好几次,都卡在了这里,系统提示:error while loading shared libraries: liblber-2.4.so.2

探索SQL Server 2022在Ubuntu 20.04上的安装、配置、备份与常见问题

网上查了一堆资料,最终找到了解决办法:

下载安装libldap-2.4-2_2.4.47+dfsg.4-1+eagle_amd64包

wget https://community-packages.deepin.com/deepin/pool/main/o/openldap/libldap-2.4-2_2.4.47%2Bdfsg.4-1%2Beagle_amd64.debsudo dpkg -i libldap-2.4-2_2.4.47+dfsg.4-1+eagle_amd64.deb

再次运行 mssql-conf setup,继续设置,再次遇到问题,系统提示:error while loading shared libraries: libssl1.1,解决办法:

下载安装libssl1.1_1.1.1-1ubuntu2.1~18.04.23_amd64包

wget http://security.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1-1ubuntu2.1~18.04.23_amd64.debsudo dpkg -i libssl1.1_1.1.1-1ubuntu2.1~18.04.23_amd64.deb

最后运行 mssql-conf setup,完成设置,没再报错。

5、验证服务是否正常运行

systemctl status mssql-server --no-pager

探索SQL Server 2022在Ubuntu 20.04上的安装、配置、备份与常见问题此时SQL Server 已在 Ubuntu 上正常运行。

6、打开 SQL Server TCP 端口(默认值为 1433)

开启内网远程访问,我们使用的是腾讯云,需要设置安全组,内网放行1433端口。

SQL Server 2022 配置

SQL Server 数据库安装完成后,还需要进行一些常规配置。

1、启用 SQL Server 代理

为了进行日常数据备份等任务,我们需要开启代理:

sudo /opt/mssql/bin/mssql-conf set sqlagent.enabled true
//重启服务生效
sudo systemctl restart mssql-server

2、更改默认数据或日志目录位置

使用 filelocation.defaultdatadir 和 filelocation.defaultlogdir 设置可更改创建新数据库和日志文件的位置。默认路径为:/var/opt/mssql/data。可以使用以下步骤进行修改:

//为新的数据库数据和日志文件创建目标目录
sudo mkdir /home/d/mssql/data

//将目录的所有者和组更改为 mssql 用户
sudo chown mssql  /home/d/mssql/data
sudo chgrp mssql  /home/d/mssql/data

//使用 mssql-conf 通过 set 命令更改默认数据目录
sudo /opt/mssql/bin/mssql-conf set filelocation.defaultdatadir /home/d/mssql/data

//使用 mssql-conf 通过 set 命令更改默认日志文件目录
sudo /opt/mssql/bin/mssql-conf set filelocation.defaultlogdir /home/d/mssql/data

//重启服务生效
sudo systemctl restart mssql-server

3、更改生成备份文件的默认位置

使用 filelocation.defaultbackupdir 设置可更改生成备份文件位置。默认路径为:/var/opt/mssql/data。可以使用以下步骤进行修改:

//为新的备份文件创建目标目录
sudo mkdir /home/d/mssql/bak/ -p

//将目录的所有者和组更改为 mssql 用户
sudo chown mssql /home/d/mssql/backup
sudo chgrp mssql /home/d/mssql/backup

//使用 mssql-conf 通过 set 命令更改默认备份目录
sudo /opt/mssql/bin/mssql-conf set filelocation.defaultbackupdir /home/d/mssql/backup

//重启 SQL Server 服务
sudo systemctl restart mssql-server

更多配置请查看文档:

https://learn.microsoft.com/zh-cn/sql/linux/sql-server-linux-configure-mssql-conf?view=sql-server-ver16

4、设置数据库自动备份

备份是保护数据的唯一方法,为了防止数据丢失和保障业务的持续性,需要对数据进行备份。这里采用的方案是按周进行完整备份,按天进行差异备份,按小时进行事务备份,在还原数据时,只需要选择完全备份、差异备份集和事务备份,打上勾后进行还原即可。

完整备份是指备份整个数据库,包括表、索引、视图和存储过程等所有数据库对象,完整备份所需时间较长,占用空间也最多,但恢复数据时只需还原单个文件,因此最为简单和快速。

差异备份是针对上一次完全备份来说的,它只备份自上次完全备份之后发生更改的数据。因此,差异备份比完全备份小,还原也比完全备份快且对性能影响最小。

事务日志备份是指备份数据库的事务日志,它包含了自上次事务日志备份以来发生的所有事务。它需要依赖于一个完整备份和一个或多个差异或事务日志备份,还原时需要按照顺序还原所有相关的备份。因此,事务日志备份的优点是占用空间最小,备份时间最短,可以恢复到任何点的时间,甚至可以恢复到故障发生时的状态(尾部日志备份)。缺点是还原速度最慢,需要多个步骤和文件,如果中间有一个文件丢失或损坏,就无法完成还原。

我使用 SQL Server 代理中提供的作业来执行计划,新建三个作业,一个执行完整备份任务,一个执行差异备份任务,还有一个执行事务备份任务。如下图所示

探索SQL Server 2022在Ubuntu 20.04上的安装、配置、备份与常见问题

首先、设置作业的步骤,我们可以在步骤中添加执行备份任务的脚本。

探索SQL Server 2022在Ubuntu 20.04上的安装、配置、备份与常见问题

然后、设置作业计划,指定脚本执行的时间周期及间隔。

探索SQL Server 2022在Ubuntu 20.04上的安装、配置、备份与常见问题

这样就可以了,以上为演示截图。

SQL Server 完整备份脚本:

-- 声明一个变量,获取当前时间
DECLARE @Dt DATETIME2(7) = GETDATE();​
-- 声明一个变量,设置数据库名
DECLARE @Name VARCHAR(20) = 'test';
-- 声明一个变量,存储备份文件的路径,并使用112格式代码转换日期
DECLARE @Path VARCHAR(100) = CONCAT('/home/d/mssql/backup/',@Name,'_',CONVERT(VARCHAR(8),@Dt ,112),'_full.bak');
-- 声明一个变量,存储完整备份集的名称
DECLARE @FullName VARCHAR(20) = CONCAT(@Name,'_full');​
-- 创建一个新的备份文件,并写入完整备份
BACKUP DATABASE @Name
  TO DISK = @Path
  WITH FORMAT, -- 创建新的介质集并清除所有现有备份集
    NAME = @FullName, -- 指定完整备份集的名称
    DESCRIPTION = 'Full backup', -- 指定介质集的描述
    COMPRESSION, -- 启用数据压缩
    CHECKSUM; -- 启用校验和检测
GO

SQL Server 差异备份脚本:

-- 声明一个变量,获取当前时间
DECLARE @Dt DATETIME2(7) = GETDATE();​
-- 声明一个变量,设置数据库名
DECLARE @Name VARCHAR(20) = 'test';
-- 声明一个变量,存储备份文件的路径,并使用112格式代码转换日期
DECLARE @Path VARCHAR(100) = CONCAT('/home/d/mssql/backup/',@Name,'_',CONVERT(VARCHAR(8),@Dt ,112),'_diff.bak');
-- 声明一个变量,存储差异备份集的名称
DECLARE @DiffName VARCHAR(20) = CONCAT(@Name,'_diff');
-- 写入差异备份,并覆盖现有的备份文件
BACKUP DATABASE @Name
  TO DISK = @Path
  WITH 
    --INIT, -- 覆盖现有的备份文件
    DIFFERENTIAL, -- 指定差异备份
    NAME = @DiffName, -- 指定差异备份集的名称
    DESCRIPTION = 'Differential backup', -- 指定介质集的描述
    COMPRESSION, -- 启用数据压缩
    CHECKSUM; -- 启用校验和检测
GO

SQL Server 事务日志备份脚本:

-- 声明一个变量,获取当前时间
DECLARE @Dt DATETIME2(7) = GETDATE();​
-- 声明一个变量,设置数据库文件名
DECLARE @Name VARCHAR(20) = 'test';
-- 声明一个变量,存储所需的日期
DECLARE @Date DATE;
-- 使用DATEFROMPARTS函数获取指定日期的零点时间
SET @Date = DATEFROMPARTS(YEAR(@Dt), MONTH(@Dt), DAY(@Dt));
-- 使用DATEPART函数获取当前时间的小时数
DECLARE @Hour INT = DATEPART(HOUR, @Dt);
-- 使用IIF函数根据当前时间是否小于5点来返回昨天或今天的日期
SET @Date = IIF(@Hour < 5, DATEADD(DAY, -1, @Date), @Date);
-- 声明一个变量,存储备份文件的路径,并使用112格式代码转换日期
DECLARE @Path VARCHAR(100) = CONCAT('/home/d/mssql/backup/',@Name,'_',CONVERT(VARCHAR(8),@Date ,112),'_log.bak');

-- 声明一个变量,存储事务日志备份集的名称
DECLARE @LogName VARCHAR(20) = CONCAT(@Name,'_log');
-- 写入事务日志备份,并覆盖现有的备份文件
BACKUP LOG @Name
  TO DISK = @Path
  WITH
    --INIT, -- 覆盖现有的备份文件
    NAME = @LogName, -- 指定事务日志备份集的名称
    DESCRIPTION = 'Transaction log backup', -- 指定介质集的描述
    COMPRESSION, -- 启用数据压缩
    CHECKSUM; -- 启用校验和检测
GO

为了防止磁盘空间不足,我们需要定期清理备份文件,这里我们使用sh脚本来执行删除30天以前的文件:

sudo vim /home/d/mssql/backup/bakup_clear.sh

#!/bin/bash
find /home/d/mssql/backup -mtime +30 -name "*.bak" -exec rm -rf {} \

#在/home/ubuntu/backup目录下,找到所有修改时间超过30天且文件名以.bak结尾的文件或目录,并删除它们,解释一下:

#find /home/ubuntu/backup:这是find命令的基本用法,它会在指定的目录(/home/ubuntu/backup)下查找文件或目录。
#-mtime +30:这是find命令的一个选项,它会匹配那些修改时间(mtime)超过30天(+30)的文件或目录。
#-name "*.bak":这是find命令的另一个选项,它会匹配那些文件名(name)符合指定的模式(*.bak)的文件或目录。
#-exec rm -rf {} \;:这是find命令的最后一个选项,它会对每个匹配的文件或目录执行指定的命令(rm -rf {}),其中{}表示匹配的文件或目录的名称,;表示命令的结束。

#授执行权限
sudo chmod 755 /home/d/mssql/backup/bakup_clear.sh

#设置定时任务
#打开配置文件 
sudo crontab -e
#输入以下内容
0 1 * * * /bin/sh /home/d/mssql/backup/bakup_clear.sh

#编辑创建一个定时服务
sudo crontab -e      
#查看当前用户的定时任务
sudo crontab -l  

//参考文档:

https://learn.microsoft.com/zh-cn/sql/relational-databases/integrated-acceleration/use-integrated-acceleration-and-offloading?view=sql-server-ver15
//使用默认MS_XPRESS压缩选项WITH COMPRESSION (ALGORITHM = MS_XPRESS);

SQL Server 数据库的备份和还原文档:

https://learn.microsoft.com/zh-cn/sql/relational-databases/backup-restore/back-up-and-restore-of-sql-server-databases?view=sql-server-ver16

Linux 上的 SQL Server 的性能最佳做法和配置指南:

https://learn.microsoft.com/zh-cn/sql/linux/sql-server-linux-performance-best-practices?view=sql-server-linux-ver16文章来源地址https://www.toymoban.com/news/detail-710533.html

👇感谢阅读,点赞+分享+收藏+关注👇
探索SQL Server 2022在Ubuntu 20.04上的安装、配置、备份与常见问题
文章出自猿惑豁微信公众号

到了这里,关于探索SQL Server 2022在Ubuntu 20.04上的安装、配置、备份与常见问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Ubuntu Server 20.04 系统安装(三):Ubuntu硬盘分区、挂载

    可以看到这里有个未分区的4T硬盘 如:sdb 这样的是硬盘 sdb1 sdb2 这样的是分区,现在还没分区 sudo parted /dev/sdb (sdb 是要挂载的硬盘) 输入一下命令分区: 如图所示 分好区之后可以看下,名字叫sdb1 sudo fdisk -l 格式化该分区: sudo mkfs.ext4 /dev/sdb1 上述步骤,只需要一次,下一次重

    2024年02月12日
    浏览(41)
  • Ubuntu 20.04 安装VNC Server的简单教程

    桌面版默认就已安装,服务器版需要手动安装,并启动 不要安装tigervncserver 要安装这个 standalone的,会有一点区别(不识别 下面的 -localhost no) 如果希望用某个用户比如 demo登录,就用su切换到这个用户。 如果想用root登录就直接使用root账号进行操作。  上面的命令会在~/.vnc

    2024年02月12日
    浏览(34)
  • ubuntu20.04 server 安装后磁盘空间只有一半的处理

    这里扩展:/dev/mapper/ubuntu–vg-ubuntu–lv

    2024年02月11日
    浏览(42)
  • Ubuntu 20.04 系统配置 OpenVINO 2022.3 环境

    由于 OpenVINO 2021 版本在调用 IECore 时会出现 Segmentation fault 的问题,因此需要将其升级为 2022 版本的。 1. 卸载原来版本的 OpenVINO 进入OpenVINO的卸载目录,通常在 /opt/intel 文件夹下, 之后执行卸载程序,一路next即可 之后将 ~/.bashrc 中原本的 source 那行注释掉 注释以下这行 至此

    2024年02月03日
    浏览(44)
  • Ubuntu Server 20.04 网卡启动及配置

    由于网络环境问题,联网安装会导致报错,故在安装期间disable了所有网卡,下面记录装好之后打开的过程。 得到本机的所有网卡信息,例如我这边网卡为eth0 将上述网卡名称填入 把up换成down是关掉 ubuntu server 20.04 采用读yaml配置文件的方式修改网卡配置,文件在/etc/netplan/下,

    2024年02月11日
    浏览(50)
  • Ubuntu Server 20.04 系统安装(六):Linux搭建frp服务,实现内网穿透服务,实现外网到内网的在线访问

    frp 是什么? frp 采用 Golang 编写,支持跨平台,仅需下载对应平台的二进制文件即可执行,没有额外依赖。 frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

    2024年01月17日
    浏览(40)
  • Ubuntu Server 20.04 系统安装(六):Linux搭建frp服务,实现内网穿透服务,实现外网到内网的在线访问 Ubuntu 设置frp开机自启动

    frp 是什么? frp 采用 Golang 编写,支持跨平台,仅需下载对应平台的二进制文件即可执行,没有额外依赖。 frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

    2024年02月13日
    浏览(35)
  • Ubuntu 更换IP (服务器)以Ubuntu-live-server20.04为例

    1.切换root登录(默认登录root) 2.输入下面代码,摁Tab键,系统会自动识别并且查找哪一个网卡或者网口的配置文件 多半是(00或者01) 注意:Linux操作系统下 注意空格 3.看到配置文件之后,摁  i  进入编辑模式 ens33:代表网卡名称                                       

    2024年01月22日
    浏览(40)
  • Ubuntu Server 20.04 网卡启动及配置(配置前请注意文件备份)

    ubuntu server 20.04 采用读yaml配置文件的方式修改网卡配置,文件在/etc/netplan/下,一般为 00-installer-config.yaml 打开配置文件 按下i进入编辑模式,修改网卡为DHCP 修改为静态ip: 注意yaml对缩进和空格要求严格 应用更改

    2024年02月13日
    浏览(43)
  • Ubuntu Server 20.04 上用命令行创建到机房内网的专用连接

    Linux 下面创建虚拟专用网络的方法在图形化界面下很简单,但是 ubuntu server 是没有图形化界面的。要在 ubuntu server 上创建到公司或者机房内网的专用连接只能使用命令行,主要有下面两个步骤。 1. netplan 中设置使用 NetworkManager 而不是使用默认的 networkd 2. 用 nmcli 命令创建专用

    2024年02月11日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包