【Windows迁移】之SQL Server迁移至openEuler

img

futao2023-12-21openEulerWindows迁移

概述

近些年,数量庞大的企业和个人放弃Windows平台选择Linux平台,并且这个数字呈现扩大的趋势。很长的一段时间,Linux是网络服务器的领导者,具有更强的稳定性、可靠性、成本和安全性等,能够在苛刻的工作负载中实现高可用性和高性能,已经更好的用户体验和丰富的工具集,这也是人们选择Linux的重要原因。

2016年,微软重新构建了SQL Server,致力于将大部分依赖特定操作系统的功能划分,以支持更多的平台。该项目帮助更多想要将Windows平台应用服务迁移至Linux平台的用户。本文介绍如何将SQL Server 2019迁到至openEuler,以帮助用户完成Windows平台数据迁移。

在openEuler上安装SQL Server并创建数据库

准备工作

本部分参考https://www.cnblogs.com/linuxjava/p/17456089.html

安装Python2

安装SQL Server 2019需要Python2依赖,而默认yum源中并没有提供Python2,因此需要手动下载和安装。

  1. 使用wget获取Python包:
wget https://www.python.org/ftp/python/2.7.9/Python-2.7.9.tgz
  1. 安装Python2需要的一些基本库:
sudo yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make libffi-devel
  1. 如果没有安装tar,请先安装tar:
sudo yum install tar -y
  1. 解压和安装Python2:
# 使用tar命令解压
tar xzf Python-2.7.9.tgz
# 进入解压后的目录中
cd Python-2.7.9
# 生成MakeFile文件
sudo ./configure --prefix=/usr/local
# 安装
sudo make altinstall
  1. 将安装在/usr/local/bin/目录下的Python软链接到/usr/bin/目录下:
sudo ln -s /usr/local/bin/python2.7 /usr/bin/python
sudo ln -s /usr/local/bin/python2.7 /usr/bin/python2

建立so文件软链接

系统中没有liblber-2.4.so.2libldap-2.4.so.2这两个文件,但有liblber.so.2libldap.so.2(即文件名中不含有版本号),可以建立软链接完成替代:

sudo ln -s /usr/lib64/liblber.so.2 /usr/lib64/liblber-2.4.so.2
sudo ln -s /usr/lib64/liblber.so.2 /usr/lib/liblber-2.4.so.2
sudo ln -s /usr/lib64/libldap.so.2 /usr/lib/libldap-2.4.so.2
sudo ln -s /usr/lib64/libldap.so.2 /usr/lib64/libldap-2.4.so.2

安装SQL Server

本部分参考https://learn.microsoft.com/zh-cn/sql/linux/quickstart-install-connect-red-hat?view=sql-server-ver15&tabs=rhel8

安装SQL Server服务

  1. 由于openEuler本身并没有SQL Server源,并且与Red Hat有一定相似性,故而采用Red Hat的存储库作为下载源。下载SQL Server 2019 (15.x) Red Hat存储库配置文件:
sudo curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/8/mssql-server-2019.repo
  1. 安装SQL Server:
sudo yum install -y mssql-server
  1. 运行mssql-conf setup,按照提示设置 SA 密码并选择版本。选择版本时,Evaluation、Developer和Express版是免费的
sudo /opt/mssql/bin/mssql-conf setup

根据提示完成设置即可。 4. 完成配置后,验证服务是否正在运行:

systemctl status mssql-server
  1. 在防火墙上打开SQL Server端口。默认的SQL Server端口为TCP 1433:
sudo firewall-cmd --zone=public --add-port=1433/tcp --permanent
sudo firewall-cmd --reload

如果使用的防火墙不是FirewallD,则需要使用其对应的命令。

禁用sa账户

根据官方文档中的建议,在安装后应当禁用sa账户以确保安全性,但本教程中后续将使用sa账户,故而跳过本步骤,在实际使用时可根据安全性需要选择是否禁用sa账户。

步骤参考:https://learn.microsoft.com/zh-cn/sql/linux/quickstart-install-connect-red-hat?view=sql-server-ver15&tabs=rhel8#disable-the-sa-account-as-a-best-practice

安装SQL Server命令行工具

  1. 本步骤需要再次使用Red Hat存储库作为下载源。下载Microsoft Red Hat存储库配置文件:
curl https://packages.microsoft.com/config/rhel/8/prod.repo | sudo tee /etc/yum.repos.d/mssql-release.repo
  1. 如果安装了早期版本的mssql-tools,请删除所有旧的unixODBC包。
sudo yum remove mssql-tools unixODBC-utf16 unixODBC-utf16-devel
  1. 使用unixODBC开发人员包安装mssql-tools18:
sudo yum install -y mssql-tools18 unixODBC-devel
  1. 将 mssql-tools 更新至最新版本:
sudo yum check-update
sudo yum update mssql-tools18
  1. 向bash shell中的PATH环境变量添加/opt/mssql-tools18/bin/: 若要使sqlcmd和bcp能从登录会话的bash shell进行访问,请使用下列命令修改~/.bash_profile文件中的PATH
echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> ~/.bash_profile

若要使sqlcmd和bcp能从交互式/非登录会话的bash shell进行访问,请使用下列命令修改~/.bashrc文件中的PATH

echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> ~/.bashrc
source ~/.bashrc

连接数据库

使用SQL Server名称(-S)、用户名(-U)和密码(-P)的相应参数运行sqlcmd:

sqlcmd -S localhost -U sa -P '<YourPassword>'

上述命令中,连接方式是本地连接,服务器名称是localhost,用户名是sa,密码是安装时指定的sa密码。

如果不想显式输入密码,可以省略-P选项以及对应参数,执行命令后将被要求输入密码。

如果在登录时出现SSL证书认证失败错误,可以通过添加-C选项解决。

当出现了sqlcmd的命令提示符1>时,说明连接成功。

例如,下面是一个成功的交互案例:

[spy@localhost ~]$ sqlcmd -S 192.168.137.223 -U sa -C
Password: #此时输入密码,密码不显示
1> #此时已经登录成功,可以输入SQL语句了

上面的案例中,192.168.137.223是本机IP,也可以替换成远程IP,根据实际情况更改。

若要退出sqlcmd,输入exit或quit即可。

将SQL Server数据迁移至openEuler

本部分参考https://learn.microsoft.com/zh-cn/sql/linux/sql-server-linux-migrate-restore-database?view=sql-server-ver15

请将下面出现的所有YourDB替换为实际数据库名称。

备份数据

在参考的微软官方文档中,主要使用了SQL Server Management Studio (SSMS)并通过图形化交互的方式完成备份文件的创建。由于数据库管理系统的多样性,该方法在使用了其他数据库管理系统或不使用图形化管理系统时难以使用,因此此处不做介绍,如果希望使用该方法,请参阅https://learn.microsoft.com/zh-cn/sql/linux/sql-server-linux-migrate-restore-database?view=sql-server-ver15#create-a-backup-on-windows

此处推荐使用操作较为简单、适用性较广的使用SQL语句的方法:

BACKUP DATABASE [YourDB] TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\YourDB.bak'
WITH NOFORMAT, NOINIT, NAME = N'YourDB-Full Database Backup',
SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO

如果遇到用户权限问题,可以用以下方法解决:

打开Windows服务(按Win+R后输入services.msc或使用其他方法打开),找到对应的数据库实例服务(例如SQL Server (MSSQLSERVER)),右键打开属性,选中登录选项卡,将登录身份改为本地系统账户或为指定账户赋予需要的权限。

生成备份文件后,使用scp等方法将该文件传输到openEuler上。

迁移数据

  1. 进入超级用户模式:
sudo su
  1. 创建新的备份目录:
mkdir -p /var/opt/mssql/backup
  1. 将备份文件移动到该目录:(假设备份文件就在当前目录下,实际使用时更改文件路径或先cd到正确的目录下)
mv YourDB.bak /var/opt/mssql/backup/

移动备份文件的目的是:/var/opt/mssql的子目录属于用户mssql和组mssql。 4. 退出超级用户模式:

exit
  1. 启动sqlcmd:
sqlcmd -S 192.168.137.223 -U sa -C
  1. 登录sqlcmd后,输入下面的SQL语句:
RESTORE DATABASE YourDB
FROM DISK = '/var/opt/mssql/backup/YourDB.bak'
WITH MOVE 'YourDB' TO '/var/opt/mssql/data/YourDB.mdf',
MOVE 'YourDB_Log' TO '/var/opt/mssql/data/YourDB_Log.ldf'
GO

sqlcmd中不可以同时复制和粘贴多行命令。

如果执行成功,应当收到已成功还原数据库的消息。

如果遇到类似下述错误:

File 'YourDB_Product' cannot be restored to 'Z:\Microsoft SQL Server\MSSQL11.GLOBAL\MSSQL\Data\YourDB\YourDB_Product.ndf'. Use WITH MOVE to identify a valid location for the file.
Msg 5133, Level 16, State 1, Server servername, Line 1
Directory lookup for the file "Z:\Microsoft SQL Server\MSSQL11.GLOBAL\MSSQL\Data\YourDB\YourDB_Product.ndf" failed with the operating system error 2(The system cannot find the file specified.).

在这种情况下,数据库包含辅助文件。 如果未在RESTORE DATABASEMOVE子句中指定这些文件,则还原过程将尝试在与原始服务器相同的路径中创建这些文件。

可以列出备份中包含的所有文件:

RESTORE FILELISTONLY FROM DISK = '/var/opt/mssql/backup/YourDB.bak'
GO

应会看到如下所示的列表(仅列出前两列):

LogicalName         PhysicalName                                                                 ..............
----------------------------------------------------------------------------------------------------------------------
YourDB              Z:\Microsoft SQL Server\MSSQL11.GLOBAL\MSSQL\Data\YourDB\YourDB.mdf          ..............
YourDB_Product      Z:\Microsoft SQL Server\MSSQL11.GLOBAL\MSSQL\Data\YourDB\YourDB_Product.ndf  ..............
YourDB_Customer     Z:\Microsoft SQL Server\MSSQL11.GLOBAL\MSSQL\Data\YourDB\YourDB_Customer.ndf ..............
YourDB_log          Z:\Microsoft SQL Server\MSSQL11.GLOBAL\MSSQL\Data\YourDB\YourDB_Log.ldf      ..............

可使用此列表为其他文件创建MOVE子句。在本示例中,RESTORE DATABASE为:

RESTORE DATABASE YourDB
FROM DISK = '/var/opt/mssql/backup/YourDB.bak'
WITH MOVE 'YourDB' TO '/var/opt/mssql/data/YourDB.mdf',
MOVE 'YourDB_Product' TO '/var/opt/mssql/data/YourDB_Product.ndf',
MOVE 'YourDB_Customer' TO '/var/opt/mssql/data/YourDB_Customer.ndf',
MOVE 'YourDB_Log' TO '/var/opt/mssql/data/YourDB_Log.ldf'
GO
  1. 列举所有数据库来验证是否还原成功:
SELECT Name FROM sys.Databases
GO
  1. 数据迁移成功 img

文中所述SQL Server迁移方案,由 Porting Platform WinApp SIG 参与。如果您对Windows迁移的相关技术感兴趣,欢迎您的围观和加入。您可以添加小助手微信,加入对应 SIG 微信群。

img


【免责声明】本文仅代表作者本人观点,与本网站无关。本网站对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。本文仅供读者参考,由此产生的所有法律责任均由读者本人承担。

openEuler 24.03 LTS 发布,首次实现 RISC-V 原生支持

image2

openEuler2024-06-26openEuler

6 月6 日,openEuler 24.03 LTS 版本正式发布,首次实现 x86/ARM/RISC-V 版本的同源构建,成为全球首个支持 RISC-V 架构的长周期维护版本。在 24.03 版本中,RISC-V 首次追平 x86 与 ARM 发版范围,实现了官方软件仓” Everything + Epol “的全量覆盖。自 2023 年底 openEuler 24.03 LTS 版本发布计划[1]公开以来,中国科学院软件研究所智能软件研究中心 OERV 团队结合当前 RISC-V 发展现状与生态需求,制定了”面向服务器场景,为开发者提供稳定的 RISC-V 本地编译构建环境,大幅提高 RISC-V 操作系统的编译构建速度” 的版本目标。并为此开展了大量协同与创新工作,包括设计基于 RISC-V 服务器、Docker 与 QEMU 的多级构建机调度器;优化多个大型软件包的构建内存与线程分配策略;并在 Infra、 OS-Builder 、QA 、Release 等 SIGs 的大力支持下,解决了版本研发过程中流水线、构建、测试等方面的诸多问题,打造了从编译构建到测试发布的完整能力体系。

image2

下载链接:https://www.openeuler.org/zh/download/?version=openEuler%2024.03%20LTS

持续创新,多项成果 RISC-V 架构首发

openEuler 24.03 LTS 面向 RISC-V 架构实现了 UEFI、热补丁、可信执行环境 TEE 等新特性支持。

在 UEFI 支持方面,OERV 团队完成了 EDK2 的适配调优,使 openEuler 成为 RISC-V 架构领域中首个支持硬件 UEFI 标准的社区发行版,为进一步推进 RISC-V 系统引导加载标准化和实现安全启动等特性奠定基础。在热补丁支持方面,团队基于社区原生项目 sysCare 实现了对 RISC-V 架构的支持,使 openEuler 成为全球首个支持热补丁特性的社区发行版。在可信执行环境支持方面,团队与上海交通大学合作,将蓬莱 TEE 解决方案以正式特性整合到 24.03 LTS 版本中,使其成为首个合入操作系统发行版的 RISC-V TEE 框架。蓬莱 TEE 利用 RISC-V 架构下的硬件安全机制,可为 openEuler RISC-V 面向安全通信、密钥保护、代码鉴权等高安全性要求应用提供保障。

image2

针对 RISC-V 生态固有的碎片化问题,中国科学院软件研究所依托 openEuler 社区于 2024 年初发起了” RISC-V 内核同源计划”,旨在维护一套统一的操作系统软件版本基线。首要任务为围绕 openEuler Kernel 6.6 对齐 RISC-V 厂商 SDK 版本,建设 Kernel CI 等公共基础设施,保证 RISC-V 基础软件生态的统一。内核同源计划分为两个阶段:第一阶段完成 sdk 对齐 kernel 6.6 的主线回合工作;第二阶段完成 基于 olk 的 RISC-V 多硬件兼容性工作,继而合入 openEuler 主线。目前,OERV 团队已与算能、达摩院玄铁团队、奕斯伟和跃昉等多家主流 RISC-V 厂商达成合作,在社区初步建立了 RISC-V 内核同源规范,并围绕 24.03 LTS 版本展开了前期验证。当前已联合算能和玄铁团队完成了 SG2042 和 TH1520 的两阶段工作,并且合入主线,初步验证了内核同源计划的可行性。相关镜像已在官方下载界面的嵌入式场景下推送,预计在年底发布的 24.03 LTS SP1 版本中会集成更多 Kernel 同源成果。

image2

值得一提的是,内核同源的衍生项目——第三方镜像工程也于同期启动,旨在为厂商打造定制优化的镜像版本,充分发掘 RISC-V 碎片化特性带来的优势。
Upstream,共建 RISC-V 基础能力

在 24.03 LTS 版本的开发工程中,OERV 加强了 RISC-V 软件上游贡献,在包括音视频和虚拟化领域都加大了对上游软件的投入力度,以促进整个 RISC-V 软件生态与基础能力的发展提升。

image2

OERV 主要针对 ffmpeg 的关键编解码器(包括 h264、h265、vp8、vp9 和 vvc)进行了深入的优化。特别对 vp8 和 vp9 实现了性能提升(2-16倍),并对最新支持的 vvc 解码器提交了首个优化 patch。同时 OERV 积极推动和加速 RISC-V 架构在虚拟化领域软件生态的建设。目前团队成功在 QEMU 上实现和验证了对 StratoVirt 的完整支持, 并正在积极扩展对其他 Hypervisors 如  KataContainers  的支持和探索。至此 OERV 已经做好了迎接 SG2380 和 JH8110 的软硬件生态的准备,争取打造最早全量支持向量拓展和硬件虚拟化的 RISC-V 发行版。
结语OERV 团队将持续探索推进 RISC-V 生态建设,欢迎从芯片到应用的上下游厂商,围绕 openEuler 社区,共同打造稳定可靠的 RISC-V 系统基座,建设充满活力与生机的 RISC-V 生态。对 openEuler 与 RISC-V 感兴趣的伙伴们可以添加下面的微信,加入 OERV 开发社区,一起加速 openEuler RISC-V 的生态发展。中科院软件所 王经纬

image2

申请时请备注OERV

[1]:https://gitee.com/openeuler/release-management/blob/master/openEuler-24.03-LTS/release-plan.md