云原生|kubernetes|k8s下部署SQLServer以及Navicat连接SQLServer报错:远程主机强迫关闭了一个现有的连接 错误的解决

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介: 云原生|kubernetes|k8s下部署SQLServer以及Navicat连接SQLServer报错:远程主机强迫关闭了一个现有的连接 错误的解决

前言:

SQLServer数据库的部署比较繁琐,但好在有自动化编排系统kubernetes可以帮助我们从这些繁琐的部署中解放。本文在此仅仅做一个抛砖引玉:

1,利用kubernetes集群,快速的搭建一个安全可用的SQLServer,其中SQLServer的数据库文件利用hostpath挂载到本地目录中,使得这个数据库如同运行在本地一样丝滑柔顺。

2,SQLServer服务部署完成后,使用Navicat远程连接此数据库并建立一个测试数据库。

3,深入分析并解决远程连接数据库报远程主机强迫关闭了一个现有的连接,错误代码10054的错误。

一,

secret的建立

考虑到密码还是比较敏感的,因此,将要使用secret文件保存SQLServer的密码,部署secret的文件内容如下:

base64解码,可以看到解码后的MyC0m9l&xP@ssw0rd就是密码。

[root@node3 ~]# echo "MyC0m9l&xP@ssw0rd"|base64
TXlDMG05bCZ4UEBzc3cwcmQK
[root@node3 ~]# echo "TXlDMG05bCZ4UEBzc3cwcmQK"|base64 -d
MyC0m9l&xP@ssw0rd
cat >sqlserver-passwd.yaml <<EOF
apiVersion: v1
data:
  SA_PASSWORD: TXlDMG05bCZ4UEBzc3cwcmQK
kind: Secret
metadata:
  creationTimestamp: null
  name: mssql
  namespace: kube-system
EOF

或者使用命令直接生成:

kubectl create secret generic mssql --from-literal=SA_PASSWORD="MyC0m9l&xP@ssw0rd" -n kube-system -oyaml

二,

部署SQLServer的文件:

此文件是静态pod的格式,仍然使用hostpath形式挂载本地volume,本地路径为 /opt/mssql/data 特别注意,如果pod启动失败很可能是此目录没有权限,此目录可以开放为777权限。此文件使用的是hostNetwork 网络模式,因此,pod的端口是直接在kubernetes节点上,端口为1433。数据库的账号为sa,密码为上面的secret定义的MyC0m9l&xP@ssw0rd

cat >sqlserver.yaml<<EOF 
apiVersion: v1
kind: Pod
metadata:
  name: sqlserver
  labels:
    run: sqlserver
  name: sqlserver
  namespace: kube-system
spec:
  containers:
  - env:
    - name: MSSQL_PID
      value: Developer
    - name: ACCEPT_EULA
      value: "Y"
    - name: SA_PASSWORD
      valueFrom:
        secretKeyRef:
          name: mssql
          key: SA_PASSWORD
    image: mcr.microsoft.com/mssql/server:2019-latest
    imagePullPolicy: IfNotPresent
    livenessProbe:
      tcpSocket:
         port: 1433
      initialDelaySeconds: 15
      periodSeconds: 5
      failureThreshold: 8
    resources:
      requests:
        cpu: 200m
    name: sqlserver
    volumeMounts:
    - mountPath: /var/opt/mssql
      name: mssqldb
      readOnly: false
  dnsPolicy: ClusterFirst
  restartPolicy: Always
  volumes:
  - name: mssqldb
    hostPath:
      path: /opt/mssql/data
      type: DirectoryOrCreate
  hostNetwork: true
  priorityClassName: system-cluster-critical
status: {}
EOF

部署成功后的样子:

[root@node3 mnt]# kubectl get po -n kube-system 
NAME                            READY   STATUS    RESTARTS   AGE
coredns-7ff77c879f-nsj95        1/1     Running   8          4d3h
etcd-node3                      1/1     Running   8          4d3h
kube-apiserver-node3            1/1     Running   8          4d3h
kube-controller-manager-node3   1/1     Running   8          4d3h
kube-flannel-ds-amd64-6cdl5     1/1     Running   9          4d3h
kube-proxy-vdhzr                1/1     Running   8          4d3h
kube-scheduler-node3            1/1     Running   8          4d3h
mysql-node3                     1/1     Running   2          23h
sqlserver                       1/1     Running   0          57m

正确的pod的日志如下;

[root@node3 mnt]# kubectl logs -n kube-system sqlserver 
SQL Server 2019 will run as non-root by default.
This container is running as user mssql.
Your master database file is owned by mssql.
To learn more visit https://go.microsoft.com/fwlink/?linkid=2099216.
2022-11-07 11:57:42.47 Server      Setup step is FORCE copying system data file 'C:\templatedata\model_replicatedmaster.mdf' to '/var/opt/mssql/data/model_replicatedmaster.mdf'.
2022-11-07 11:57:42.56 Server      Setup step is FORCE copying system data file 'C:\templatedata\model_replicatedmaster.ldf' to '/var/opt/mssql/data/model_replicatedmaster.ldf'.
2022-11-07 11:57:42.57 Server      Setup step is FORCE copying system data file 'C:\templatedata\model_msdbdata.mdf' to '/var/opt/mssql/data/model_msdbdata.mdf'.
2022-11-07 11:57:42.59 Server      Setup step is FORCE copying system data file 'C:\templatedata\model_msdblog.ldf' to '/var/opt/mssql/data/model_msdblog.ldf'.
2022-11-07 11:57:42.72 Server      Microsoft SQL Server 2019 (RTM-CU18) (KB5017593) - 15.0.4261.1 (X64) 
  Sep 12 2022 15:07:06 
  Copyright (C) 2019 Microsoft Corporation
  Developer Edition (64-bit) on Linux (Ubuntu 20.04.5 LTS) <X64>
2022-11-07 11:57:42.73 Server      UTC adjustment: 0:00
2022-11-07 11:57:42.73 Server      (c) Microsoft Corporation.
2022-11-07 11:57:42.73 Server      All rights reserved.
2022-11-07 11:57:42.73 Server      Server process ID is 372.
2022-11-07 11:57:42.73 Server      Logging SQL Server messages in file '/var/opt/mssql/log/errorlog'.
2022-11-07 11:57:42.74 Server      Registry startup parameters: 
   -d /var/opt/mssql/data/master.mdf
   -l /var/opt/mssql/data/mastlog.ldf
   -e /var/opt/mssql/log/errorlog
2022-11-07 11:57:42.74 Server      SQL Server detected 2 sockets with 2 cores per socket and 2 logical processors per socket, 4 total logical processors; using 4 logical processors based on SQL Server licensing. This is an informational message; no user action is required.
2022-11-07 11:57:42.75 Server      SQL Server is starting at normal priority base (=7). This is an informational message only. No user action is required.
2022-11-07 11:57:42.75 Server      Detected 3146 MB of RAM. This is an informational message; no user action is required.
2022-11-07 11:57:42.76 Server      Using conventional memory in the memory manager.
2022-11-07 11:57:42.76 Server      Page exclusion bitmap is enabled.
2022-11-07 11:57:42.80 Server      Buffer pool extension is not supported on Linux platform.
2022-11-07 11:57:42.80 Server      Buffer Pool: Allocating 524288 bytes for 349377 hashPages.
2022-11-07 11:57:43.03 Server      Buffer pool extension is already disabled. No action is necessary.
2022-11-07 11:57:43.42 Server      Successfully initialized the TLS configuration. Allowed TLS protocol versions are ['1.0 1.1 1.2']. Allowed TLS ciphers are ['ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:!DHE-RSA-AES256-GCM-SHA384:!DHE-RSA-AES128-GCM-SHA256:!DHE-RSA-AES256-SHA:!DHE-RSA-AES128-SHA'].
2022-11-07 11:57:43.46 Server      Query Store settings initialized with enabled = 1, 
2022-11-07 11:57:43.47 Server      The maximum number of dedicated administrator connections for this instance is '1'
2022-11-07 11:57:43.49 Server      Node configuration: node 0: CPU mask: 0x000000000000000f:0 Active CPU mask: 0x000000000000000f:0. This message provides a description of the NUMA configuration for this computer. This is an informational message only. No user action is required.
2022-11-07 11:57:43.51 Server      Using dynamic lock allocation.  Initial allocation of 2500 Lock blocks and 5000 Lock Owner blocks per node.  This is an informational message only.  No user action is required.
2022-11-07 11:57:43.53 Server      In-Memory OLTP initialized on lowend machine.
2022-11-07 11:57:43.58 Server      [INFO] Created Extended Events session 'hkenginexesession'
2022-11-07 11:57:43.58 Server      Database Instant File Initialization: enabled. For security and performance considerations see the topic 'Database Instant File Initialization' in SQL Server Books Online. This is an informational message only. No user action is required.
ForceFlush is enabled for this instance. 
2022-11-07 11:57:43.60 Server      Total Log Writer threads: 2. This is an informational message; no user action is required.
2022-11-07 11:57:43.65 Server      clflush is selected for pmem flush operation.
2022-11-07 11:57:43.67 Server      Software Usage Metrics is disabled.
2022-11-07 11:57:43.73 spid9s      [1]. Feature Status: PVS: 0. CTR: 0. ConcurrentPFSUpdate: 1.
2022-11-07 11:57:43.73 spid9s      Starting up database 'master'.
2022-11-07 11:57:43.75 Server      CLR version v4.0.30319 loaded.
ForceFlush feature is enabled for log durability.
2022-11-07 11:57:44.30 spid9s      Resource governor reconfiguration succeeded.
2022-11-07 11:57:44.30 spid9s      SQL Server Audit is starting the audits. This is an informational message. No user action is required.
2022-11-07 11:57:44.31 spid9s      SQL Server Audit has started the audits. This is an informational message. No user action is required.
2022-11-07 11:57:44.42 spid9s      SQL Trace ID 1 was started by login "sa".
2022-11-07 11:57:44.44 spid9s      Server name is 'node3'. This is an informational message only. No user action is required.
2022-11-07 11:57:44.55 spid24s     Always On: The availability replica manager is starting. This is an informational message only. No user action is required.
2022-11-07 11:57:44.56 spid27s     [4]. Feature Status: PVS: 0. CTR: 0. ConcurrentPFSUpdate: 1.
2022-11-07 11:57:44.57 spid12s     [32767]. Feature Status: PVS: 0. CTR: 0. ConcurrentPFSUpdate: 1.
2022-11-07 11:57:44.57 spid24s     Always On: The availability replica manager is waiting for the instance of SQL Server to allow client connections. This is an informational message only. No user action is required.
2022-11-07 11:57:44.58 spid27s     Starting up database 'msdb'.
2022-11-07 11:57:44.59 spid12s     Starting up database 'mssqlsystemresource'.
2022-11-07 11:57:44.61 spid29s     [5]. Feature Status: PVS: 0. CTR: 0. ConcurrentPFSUpdate: 1.
2022-11-07 11:57:44.62 spid29s     Starting up database 'test'.
2022-11-07 11:57:44.63 spid12s     The resource database build version is 15.00.4261. This is an informational message only. No user action is required.
2022-11-07 11:57:44.73 spid22s     A self-generated certificate was successfully loaded for encryption.
2022-11-07 11:57:44.76 spid22s     Server is listening on [ 'any' <ipv6> 1433].
2022-11-07 11:57:44.78 spid22s     Server is listening on [ 'any' <ipv4> 1433].
2022-11-07 11:57:44.79 spid12s     [3]. Feature Status: PVS: 0. CTR: 0. ConcurrentPFSUpdate: 1.
2022-11-07 11:57:44.80 spid12s     Starting up database 'model'.
2022-11-07 11:57:44.80 Server      Common language runtime (CLR) functionality initialized.
2022-11-07 11:57:44.81 Server      Server is listening on [ ::1 <ipv6> 1434].
2022-11-07 11:57:44.81 Server      Server is listening on [ 127.0.0.1 <ipv4> 1434].
2022-11-07 11:57:44.82 Server      Dedicated admin connection support was established for listening locally on port 1434.
2022-11-07 11:57:44.84 spid22s     Server is listening on [ ::1 <ipv6> 1431].
2022-11-07 11:57:44.86 spid22s     Server is listening on [ 127.0.0.1 <ipv4> 1431].
2022-11-07 11:57:44.87 spid22s     SQL Server is now ready for client connections. This is an informational message; no user action is required.
2022-11-07 11:57:44.95 spid29s     Parallel redo is started for database 'test' with worker pool size [2].
2022-11-07 11:57:45.08 spid12s     Clearing tempdb database.
2022-11-07 11:57:45.08 spid9s      Parallel redo is shutdown for database 'test' with worker pool size [2].
2022-11-07 11:57:45.40 spid12s     [2]. Feature Status: PVS: 0. CTR: 0. ConcurrentPFSUpdate: 1.
2022-11-07 11:57:45.41 spid12s     Starting up database 'tempdb'.
2022-11-07 11:57:46.02 spid12s     The tempdb database has 4 data file(s).
2022-11-07 11:57:46.04 spid24s     The Service Broker endpoint is in disabled or stopped state.
2022-11-07 11:57:46.04 spid24s     The Database Mirroring endpoint is in disabled or stopped state.
2022-11-07 11:57:46.05 spid24s     Service Broker manager has started.
2022-11-07 11:57:46.06 spid9s      Recovery is complete. This is an informational message only. No user action is required.
2022-11-07 12:03:11.29 spid58      Attempting to load library 'xplog70.dll' into memory. This is an informational message only. No user action is required.
2022-11-07 12:03:11.35 spid58      Using 'xplog70.dll' version '2019.150.4261' to execute extended stored procedure 'xp_msver'. This is an informational message only; no user action is required.

OK,部署完成后就可以进入Navicat测试环节了。

三,

Navicat测试连接SQLServer

大概说一下本次部署的版本:SQLServer版本为Microsoft SQL Server 2019,Navicat版本为permium 15,而我们要使用Navicat连接SQLServer服务器,需要一个客户端程序,如同Oracle数据库一样。当然,如果会编程,比如,Java程序或者python程序,连接数据库服务器是需要的驱动。

Navicat自己带有此客户端,但它不是默认安装,需要自己点一哈安装,此客户端存放在Navicat的安装目录下。

 

安装这个客户端最好还是使用管理员权限安装,Navicat自带的客户端版本是10,安装完毕后,打开Navicat,按如下填写:

这里报错了,远程主机强迫关闭了一个现有的连接。那么,前面的提示很明显是SQL Server Native Client 10.0,也就是说客户端的版本和服务器端的版本不兼容,两者之间的版本相差太多,OK,重新下载一个客户端即可,下载地址:https://www.microsoft.com/zh-CN/download/details.aspx?id=50402

新的客户端下载完成后,直接管理员权限安装即可,目前的最新版本是12,安装完毕后在Navicat的高级里将可以看到:

在点击测试连接就OK了:

建立数据库:

右键点击Navicat的连接名,库名自定义,剩下的按我的设置,确定即可。

 

SQL预览里有建库语句,可复制下来保存留底:

SQLServer就这样简单的安装完毕了。

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
7天前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
53 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
4天前
|
存储 Kubernetes Docker
Kubernetes(k8s)和Docker Compose本质区别
理解它们的区别和各自的优势,有助于选择合适的工具来满足特定的项目需求。
48 19
|
15天前
|
Kubernetes 应用服务中间件 nginx
二进制安装Kubernetes(k8s)v1.32.0
本指南提供了一个详细的步骤,用于在Linux系统上通过二进制文件安装Kubernetes(k8s)v1.32.0,支持IPv4+IPv6双栈。具体步骤包括环境准备、系统配置、组件安装和配置等。
148 10
|
1月前
|
Kubernetes Cloud Native 微服务
云原生入门与实践:Kubernetes的简易部署
云原生技术正改变着现代应用的开发和部署方式。本文将引导你了解云原生的基础概念,并重点介绍如何使用Kubernetes进行容器编排。我们将通过一个简易的示例来展示如何快速启动一个Kubernetes集群,并在其上运行一个简单的应用。无论你是云原生新手还是希望扩展现有知识,本文都将为你提供实用的信息和启发性的见解。
|
1月前
|
Kubernetes Cloud Native API
深入理解Kubernetes——容器编排的王者之道
深入理解Kubernetes——容器编排的王者之道
46 1
|
3月前
|
SQL 数据库
数据库数据恢复—SQL Server数据库报错“错误823”的数据恢复案例
SQL Server附加数据库出现错误823,附加数据库失败。数据库没有备份,无法通过备份恢复数据库。 SQL Server数据库出现823错误的可能原因有:数据库物理页面损坏、数据库物理页面校验值损坏导致无法识别该页面、断电或者文件系统问题导致页面丢失。
115 12
数据库数据恢复—SQL Server数据库报错“错误823”的数据恢复案例
|
1月前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第16天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括配置系统源、安装 SQL Server 2019 软件包以及数据库初始化,确保 SQL Server 正常运行。
|
1月前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第8天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统准备、配置安装源、安装 SQL Server 软件包、运行安装程序、初始化数据库以及配置远程连接。通过这些步骤,您可以顺利地在 CentOS 系统上部署和使用 SQL Server 2019。
|
1月前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第7天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统要求检查与准备、配置安装源、安装 SQL Server 2019、配置 SQL Server 以及数据库初始化(可选)。通过这些步骤,你可以成功安装并初步配置 SQL Server 2019,进行简单的数据库操作。
|
2月前
|
存储 数据挖掘 数据库
数据库数据恢复—SQLserver数据库ndf文件大小变为0KB的数据恢复案例
一个运行在存储上的SQLServer数据库,有1000多个文件,大小几十TB。数据库每10天生成一个NDF文件,每个NDF几百GB大小。数据库包含两个LDF文件。 存储损坏,数据库不可用。管理员试图恢复数据库,发现有数个ndf文件大小变为0KB。 虽然NDF文件大小变为0KB,但是NDF文件在磁盘上还可能存在。可以尝试通过扫描&拼接数据库碎片来恢复NDF文件,然后修复数据库。