【业务场景】sql server从Windows迁移到Linux

news2025/3/13 16:02:12

目录

1.背景

2.Linux安装sql server

3.服务器不开端口的问题

4.数据库导入导出问题


1.背景

博主在24年年底接手运维了一个政府的老系统,整个应用和数据库单点部署在一台Windows Server服务器上,数据库选型是经典的老项目标配——sql server。随着近两年政府部门对信息系统的规范管理,开始建设各个地区的中心机房,用来集中统一部署各类政府系统。也伴随着软件国产化改革的深入,或者准确的说伴随着“信创”的展开和深入,开始纷纷要求中心机房的操作系统等基础设施国产化。原先系统开发的各个厂商需要配合政府部门完成原来老系统迁移部署到中心机房的国产化操作系统的服务器上这个全过程。博主碰见的就是要将Windows server上部署的应用和数据库迁移到中心机房的“统信”服务器上的这一要求。

应用无非就是JAVA开发的后端、前端框架开发的前端,配套需要的一些基础环境无非是nginx、redis。java作为跨平台语言迁移起来是很平滑的,前端也不存在跨平台的问题,nginx和redis在Linux上的部署也很简单,博主之前有文章单独说过。整个过程中最麻烦的就是sql server从windows server迁移到Linux(统信系统本身就是Linux)上的这个过程。这个过程应该是极具借鉴意义的,其中遇见的问题估计在toB的这种服务器迁移中是很常见的,所以特此记录下来。

遇见的问题有:

  1. Linux上安装sql server
  2. 服务器不开端口的问题
  3. 数据库导出/导入问题

2.Linux安装sql server

sql server作为微软推出的一款数据库,本身就是为了Windows而生的,要在Linux上安装sql server,解决方案,博主还是找了好些才找到一个可行方案,而且简单易用,确认可行:

Linux下安装SQL Server 2016(安装篇SQL Server on linux)_sql2016 linux下载-CSDN博客

3.服务器不开端口的问题

做过政府或者大企业项目的都知道,这类客户的中心机房的服务器端口管理特别严格,要开端口要跑的流程特别繁琐,甚至很多时候就拒接开端口,把ping之类的全部都禁掉。一般也就会允许开一个原创的命令行窗口去操作服务器,允许上传下载文件,对外暴露几个应用部署后哦需要的访问端口,比如网站部署后的80端口。

不开端口会带来一个很麻烦的问题:没办法用数据库工具访问到远端服务器上的数据库。只能在命令行窗口里通过基础的命令来操作数据库。

sql server在Windows上自带有自己的管理控制台工具来访问,在Linux上如何访问喃?

答案:用sqlcmd。

以下是安装步骤。

1.首先根据自己的版本去找到对应的源:

sudo curl -o /etc/yum.repos.d/mssql-tools.repo https://packages.microsoft.com/config/rhel/7/prod.repo

2.清理和刷新yum:

sudo yum clean all
sudo yum makecache

3.安装:

yum install -y mssql-tools unixODBC-devel

4.确认路径在哪儿:

ls /opt/mssql-tools/bin

5.配置环境变量

export PATH=$PATH:/opt/mssql-tools/bin

6.连接数据库:

sqlcmd -S 数据库的IP -U 用户名(一般是sa作为管理员) -P 密码(注意用前后单引号引起来);

注意:通过sqlcmd连接数据库后,执行的命令后面回车然后加上GO,前面输入的命令才会被提交执行。

4.数据库导入导出问题

估计大家都有一样的体感,每次进行数据库迁移的时候最麻烦的一道坎就是数据的导入导出问题,经常出现备份出来的文件,转头放到要部署到的目标服务器的时候导入还原不到了,各种问题,各种报错。建立了好几次迁移任务后,博主总结出来的:

最好就导出成create的建表语句和insert的数据插入语句,执行这种sql是失败率最低的,即使失败了去调整一下sql就是了。

博主是用的:

当然市面上的数据库连接工具太多了,选一个趁手的导出DDL和insert就行。导出很简单,问题是如何导入到上面说的不开放端口的远端服务器上?肯定是不可能一条一条sql执行的,量那么大。将导出整理好后的sql文件上传到服务器上,然后通过sqlcmd来批量执行写入指定库中才是正解:

sqlcmd -S 数据库的IP -U 用户名(一般是sa作为管理员) -P 密码(注意用前后单引号引起来)-d 数据库名称  -i sql脚本路径;

最后还有个问题就是肯定不可能用sa这种超级管理员账户去在JAVA中访问数据库,所以要给数据库建一个专门的用户,在sqlcmd中执行以下操作:

-- 切换到目标数据库
USE TestDB;
GO

-- 创建一个登录账号
CREATE LOGIN app_user WITH PASSWORD = 'StrongPassword123';

-- 创建一个数据库用户并映射到登录账号
CREATE USER app_user FOR LOGIN app_user;

-- 授予读写权限
ALTER ROLE db_datareader ADD MEMBER app_user;
ALTER ROLE db_datawriter ADD MEMBER app_user;
GO

如果上面建立的用户连接数据库还报错,可以通过命令去验证一下用户对指定的数据库是否有访问权限,示例:

sqlcmd -S 127.0.0.1,1433 -U penge -P 'penge2024#' -d Ps_CostInfoSite

如果没有权限就重新加一下,示例:

USE Ps_CostInfoSite;
GO
CREATE USER penge FOR LOGIN penge;
GO
ALTER ROLE db_owner ADD MEMBER penge;
GO

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2272348.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《Vue3实战教程》35:Vue3测试

如果您有疑问,请观看视频教程《Vue3实战教程》 测试​ 为什么需要测试​ 自动化测试能够预防无意引入的 bug,并鼓励开发者将应用分解为可测试、可维护的函数、模块、类和组件。这能够帮助你和你的团队更快速、自信地构建复杂的 Vue 应用。与任何应用一…

字玩FontPlayer开发笔记6 Tauri2设置菜单

字玩FontPlayer开发笔记6 Tauri2设置菜单 字玩FontPlayer是笔者开源的一款字体设计工具,使用Vue3 ElementUI开发,源代码: github: https://github.com/HiToysMaker/fontplayer gitee: https://gitee.com/toysmaker/fontplayer 笔记 字玩目…

我用AI学Android Jetpack Compose之开篇

最近突发奇想,想学一下Jetpack Compose,打算用Ai学,学最新的技术应该要到官网学,不过Compose已经出来一段时间了,Ai肯定学过了,用Ai来学,应该问题不大,学习过程记录下来,…

Zookeeper是如何保证事务的顺序一致性的?

大家好,我是锋哥。今天分享关于【Zookeeper是如何保证事务的顺序一致性的?】面试题。希望对大家有帮助; Zookeeper是如何保证事务的顺序一致性的? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Zookeeper 通过多个机制来保证事务的顺序一…

机器人手眼标定

机器人手眼标定 一、机器人手眼标定1. 眼在手上标定基本原理2. 眼在手外标定基本原理 二、眼在手外标定实验三、标定精度分析 一、机器人手眼标定 要实现由图像目标点到实际物体上抓取点之间的坐标转换,就必须拥有准确的相机内外参信息。其中内参是相机内部的基本参…

数据挖掘——聚类

数据挖掘——聚类 聚类K-meansKNN VS K-meansK-Nearest Neighbors (KNN)K-means K中心算法PAM算法 K-modes算法——解决数据敏感的问题KMeans算法 ——解决初始点选择问题K-中心点层次方法AGNES算法——最小距离单链接全链接平均链接 聚类评估K均值和K中心点的优缺点层次化聚类…

web实操9——session

概念 数据保存在服务器HttpSession对象里。 session也是域对象,有setAttribute和getAttribute方法 快速入门 代码 获取session和塞入数据: 获取session获取数据: 请求存储: 请求获取: 数据正常打印&#xff1a…

GPT系统重大升级,开创国内先河:o1支持图片识别功能正式上线

文章目录 零、前言一、授权码登录体验优化:一步直达聊天界面二、全新“项目”功能:让工作更有条理三、语音功能升级:全新交互体验四、o1支持图片识别五、总结 零、前言 我是虚竹哥,目标是带十万人玩转ChatGPT。 亲爱的用户&…

unity 播放 序列帧图片 动画

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、方法一:代码控制播放序列帧1、设置图片属性2、创建Image组件3、简单的代码控制4、挂载代码并赋值 二、方法二:直接使用1.Image上添加…

VisionPro软件Image Stitch拼接算法

2D图像拼接的3种情景 1.一只相机取像位置固定,或者多只相机固定位置拍图,硬拷贝拼图,采用CopyRegion工具实现 2.一只或多只相机在多个位置拍照,相机视野互相重叠,基于Patmax特征定位后,无缝 拼图&#xff…

【大模型】7 天 AI 大模型学习

今天终于来到大模型学习的实战课了(虽然前面跳了2天的课),今天我们会一起学习 Llama 模型的运行、部署、微调 ~ 一、Llama 介绍 Llama 模型官网:官网 Llama 论文:论文 Llama 代码:代码 理念:Th…

小程序学习08—— 系统参数获取和navBar组件样式动态设置

一 系统信息的概念 uni-app提供了异步(uni.getSystemInfo)和同步(uni.getSystemInfoSync)的2个API获取系统信息。 success 返回参数说明: 参数分类说明statusBarHeight手机状态栏的高度system操作系统名称及版本。。。 二 自定义navbar 2.1 获取系统参数 代码展示…

STM32的LED点亮教程:使用HAL库与Proteus仿真

学习目标:掌握使用STM32 HAL库点亮LED灯,并通过Proteus进行仿真验证! 建立HAL库标准工程 1.新建工程文件夹 新建工程文件夹建议路径尽量为中文。建立文件夹的目的为了更好分类去管理项目工程中需要的各类工程文件。 首先需要在某个位置建立工…

密码学原理技术-第十一章-Hash Functions

文章目录 总结Why we need hash functionsDigital Signature with a Hash FunctionBasic Protocol for Digital Signatures with a Hash FunctionPrincipal input–output behavior of hash functions Security propertiesThe three security requirements of hash functionsWh…

【AI大模型系列】AI Agent与LangChain框架介绍(七)

目录 一、什么是AI Agent 二、什么是LangChain 三、LangChain的重要模块 3.1 Model I/O(模块输入输出) 3.2 Retrieval(检索) 3.3 Chains(链式调用) 3.4 Agents 3.5 Memory(记忆&#xff…

RabbitMQ 架构介绍:深入理解与应用

RabbitMQ 是一个开源的消息代理(Message Broker)软件,它实现了高级消息队列协议(AMQP),并提供了可靠的消息传递机制。RabbitMQ 广泛应用于分布式系统中,用于解耦系统组件、异步处理任务和实现消…

数据结构9.3 - 文件基础(C++)

目录 1 打开文件字符读写关闭文件 上图源自&#xff1a;https://blog.csdn.net/LG1259156776/article/details/47035583 1 打开文件 法 1法 2ofstream file(path);ofstream file;file.open(path); #include<bits/stdc.h> using namespace std;int main() {char path[]…

【C++】B2101 计算矩阵边缘元素之和

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目背景与描述题目描述输入格式输出格式输入输出样例说明与提示 &#x1f4af;分析与解决方案解法一&#xff1a;我的做法代码实现解题思路优点与局限性 解法二&#xff1…

【软考网工笔记】计算机基础理论与安全——计算机硬件知识

计算机分级存储体系 计算机分级存储体系目前最常用的是三级存储体系。 CPU——CaChe&#xff08;高速缓存&#xff09;——主存——辅存 其中 Cache 是用于解决存取速度不够快&#xff0c;辅存是用于解决存储容量不够大&#xff0c;二者结合可在容量和速度实现提升的情况下尽可…

回归预测 | MATLAB实ELM-Adaboost多输入单输出回归预测

回归预测 | MATLAB实ELM-Adaboost多输入单输出回归预测 目录 回归预测 | MATLAB实ELM-Adaboost多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 一、极限学习机&#xff08;ELM&#xff09; 极限学习机是一种单层前馈神经网络&#xff0c;具有训练速…