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

目录

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.rhkb.cn/news/502268.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flink CDC 自定义函数处理 SQLServer XML类型数据 映射 doris json字段方案

Flink CDC 自定义函数处理 SQLServer XML类型数据方案 1. 背景 因业务使用SQLServer数据库,CDC同步到doris 数仓。对于SQLServer xml类型,doris没有相应的字段对应, 可以使用json来存储xml数据。需要进行一步转换。从 flink 自定义函数入手…

Jdk动态代理源码缓存优化比较(JDK17比JDK8)

目录 JDK 8的缓存实现 JDK 17的缓存实现 优化比较 总结实际应用影响 JDK 8的缓存实现 // JDK 8 private static final WeakCache<ClassLoader, Class<?>[], Class<?>> proxyClassCache new WeakCache<>(new KeyFactory(), new ProxyClassFact…

《learn_the_architecture_-_aarch64_exception_model》学习笔记

1.当发生异常时&#xff0c;异常级别可以增加或保持不变&#xff0c;永远无法通过异常来转移到较低的权限级别。从异常返回时&#xff0c;异常级别可能会降低或保持不变&#xff0c;永远无法通过从异常返回来移动到更高的权限级别。EL0级不进行异常处理&#xff0c;异常必须在比…

声音是如何产生的

一、音频概述 RTMP中一般音频采用aac编码&#xff0c;采样率为44100HZ, 每帧1024采样&#xff0c;帧率43&#xff0c;23.2ms一帧 RTC中一般音频采用opus编码&#xff0c;采样率为48000HZ&#xff0c;每帧480采样&#xff0c;帧率100&#xff0c;10ms一帧 通道数&#xff08;c…

Docker新手:在tencent云上实现Python服务打包到容器

1 使用docker的原因 一致性和可移植性&#xff1a;Docker 容器可以在任何支持 Docker 的环境中运行&#xff0c;无论是开发者的笔记本电脑、测试服务器还是生产环境。这确保了应用在不同环境中的行为一致&#xff0c;减少了“在我的机器上可以运行”的问题。 隔离性&#xff…

Science Robotics让软机器人“活”得更久的3D打印!

软机器人硬件在医疗、探索无结构环境等领域有广泛应用&#xff0c;但其生命周期有限&#xff0c;导致资源浪费和可持续性差。软机器人结合软硬组件&#xff0c;复杂组装和拆卸流程使其难以维修和升级。因此&#xff0c;如何延长软机器人的生命周期并提高其可持续性成为亟待解决…

conan从sourceforge.net下载软件失败

从sourceforge.net下载软件&#xff0c;经常会没有开始下载就返回了。 原因是&#xff1a; 自动选择的镜像站不能打开。 在浏览器中&#xff0c;我们可以手动选择站点尝试&#xff0c;但是conan就不行了。 手动选择一个站点&#xff0c;能够有文件保存窗口弹出&#xff0c;之后…

数势科技:解锁数据分析 Agent 的智能密码(14/30)

一、数势科技引领数据分析变革 在当今数字化浪潮中&#xff0c;数据已然成为企业的核心资产&#xff0c;而数据分析则是挖掘这一资产价值的关键钥匙。数势科技&#xff0c;作为数据智能领域的领军者&#xff0c;以其前沿的技术与创新的产品&#xff0c;为企业开启了高效数据分析…

第J4周:ResNet与DenseNet结合探索

目录 FROM一、本周内容1. ResNet与DenseNet的基本原理2. ResNet与DenseNet结合模块图 二、核心代码及运行截图 FROM &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 我的环境 语言环境&#xff1a;Python 3…

MYSQL--------选择合适的数据类型

char与varchar char&#xff1a;固定长度字符串类型&#xff0c;无论实际存储的字符串长度是多少&#xff0c;都会占用固定长度的存储空间。适合存储长度固定的字符串&#xff0c;如身份证号码、邮政编码等&#xff0c;存储和查询效率较高&#xff0c;但如果存储的字符串长度差…

vue3 拆信封动画

snows_ls BLOGhttp://snows-l.site/ 一、效果如下 截图工具截图效果不是很好&#xff0c; 可以查看线上效果 信封 | snows_ls BLOGhttp://snows-l.site/about/like/envelope 二、源码如下 <!--* Description: ------------ fileDescription -----------* Author: snows_l …

用python编写一个放烟花的小程序

import pygame import random # 代码解释及使用说明&#xff1a; # 首先&#xff0c;导入 pygame 和 random 库。pygame 用于创建游戏窗口和图形绘制&#xff0c;random 用于生成随机数。 # 初始化 pygame&#xff0c;并设置屏幕尺寸为 800x600 像素&#xff0c;设置窗口标题为…

法律专业legal case的留学论文写作技巧分析(1)

对于法律专业的留学生而言&#xff0c;案例的分析是写作的重要方面。无论留学的国家是英、美、澳洲还是加拿大&#xff0c;它们都属于case law 的法律体系。一个非常显著的特点便是通过对案例进行分析和提炼&#xff0c;从中总结提炼出principle和rules。case analysis的留学论…

Jenkins 中自动化部署 Spring Boot 项目

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的全栈工程师 欢迎分享 / 收藏 / 赞 / 在看…

MetaGPT - 多Agent框架

文章目录 一、关于 MetaGPT功能介绍快速开始的演示视频教程 二、安装Pip安装Docker安装 一、关于 MetaGPT MetaGPT 为GPTs分配不同的角色&#xff0c;以形成一个协作实体来完成复杂的任务。 github : https://github.com/geekan/MetaGPTtwitter : https://twitter.com/MetaGP…

计算机网络 (15)宽带接入技术

前言 计算机网络宽带接入技术是指通过高速、大容量的通信信道或网络&#xff0c;实现用户与互联网或其他通信网络之间的高速连接。 一、宽带接入技术的定义与特点 定义&#xff1a;宽带接入技术是指能够传输大量数据的通信信道或网络&#xff0c;其传输速度通常较高&#xff0c…

计算机网络复习(大题)

&#x1f4e2;&#x1f4e2;&#x1f4e2;传送门 一、简答题&#xff08;1&#xff09;五层原理体系结构每层功能&#xff1a;&#xff08;2&#xff09;TCP建立连接三次握手过程&#xff1a;&#xff08;3&#xff09;访问浏览器的过程&#xff1a;&#xff08;4&#xff09;抓…

AI代码开发实践-微信小程序开发

接上回&#xff0c;本人参加了一次小孩学校组织的护学岗&#xff0c;萌生了开发一个微信小程序的水印相机的想法&#xff0c;说干就干。 最近也是在学习用AI编程&#xff0c;索性之前也用一点&#xff0c;今天就尝试一下 工具选择&#xff0c;环境搭建 阿里-通义灵码 通义灵…

基于Java的超级玛丽游戏的设计与实现【源码+文档+部署讲解】

目 录 1、绪论 1.1背景以及现状 1.2 Java语言的特点 1.3 系统运行环境及开发软件&#xff1a; 1.4 可行性的分析 1.4.1 技术可行性 1.4.2 经济可行性 1.4.3 操作可行性 2、 需求分析 2.1 用户需求分析 2.2功能需求分析 2.3界面设计需求分析…

麒麟服务器安装kafka--亲测

我这安装的是单机版本的&#xff1a; 下载地址&#xff1a;Index of /kafka/3.9.0 我下载的是&#xff1a;https://dlcdn.apache.org/zookeeper/zookeeper-3.9.3/apache-zookeeper-3.9.3-bin.tar.gz https://dlcdn.apache.org/kafka/3.9.0/kafka_2.12-3.9.0.tgz 一、下载并上…