openGauss 5.0企业版主从部署,实战狂飙
📢📢📢📣📣📣
哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验
一位上进心十足的【大数据领域博主】!😜😜😜
中国DBA联盟(ACDU)成员,目前服务于工业互联网
擅长主流Oracle、MySQL、PG、高斯及GP 运维开发,备份恢复,安装迁移,性能优化、故障应急处理等。
✨ 如果有对【数据库】感兴趣的【小可爱】,欢迎关注【IT邦德】💞💞💞
❤️❤️❤️感谢各位大可爱小可爱!❤️❤️❤️
文章目录
- 前言
- 📣 1.openGauss 5.0
- 📣 2.环境准备
- ✨ 2.1 关闭SeLinux
- ✨ 2.2 关闭防火墙
- ✨ 2.3 关闭RemoveIPC
- ✨ 2.4 设置root用户远程登录
- ✨ 2.5 yum安装依赖
- ✨ 2.6 host设置
- ✨ 2.7 Python安装
- 📣 3.目录创建
- 4.安装包解压
- 5.XML配置文件
- 6.初始化安装
- 7.执行安装
- 8.安装验证
前言
2023年4月1日, openGauss 5.0正式发布,本博客介绍了openGauss 5.0企业版主从部署的详细过程。📣 1.openGauss 5.0
2023年4月1日,openGauss 5.0.0是openGauss发布的第三个LTS版本,版本生命周期为3年。
openGauss 5.0.0版本与之前的版本功能特性保持兼容,在内核能力、工具链、兼容性方面全面增强。官网下载地址:
https://opengauss.org/zh/download/
📣 2.环境准备
##操作系统:
CentOS Linux release 7.9.2009 (Core)##主机IP
主库:hostnamectl set-hostname opengauss5M
备库:hostnamectl set-hostname opengauss5B##内存
[root@Jeames ~]# free -mtotal used free shared buff/cache available
Mem: 3020 281 2630 7 107 2684
Swap: 10239 0 10239##字符集确认
[root@opengauss5m ~]# locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"可以在/etc/profile文件中添加export LANG=en_US.UTF-8##软件依赖要求
下列依赖软件的默认安装包,若不存在下列软件,可参看软件对应的建议版本。
✨ 2.1 关闭SeLinux
sed -i ‘s/^SELINUX=enforcing/SELINUX=disabled/g’ /etc/selinux/config
setenforce 0注:主库和备库同时修改,然后重启服务器
[root@opengauss5m ~]# /usr/sbin/sestatus
SELinux status: disabled
✨ 2.2 关闭防火墙
注:主备库均做如下操作1.检查防火墙是否关闭
[root@opengauss5m ~]# systemctl status firewalld
若防火墙状态显示为active (running),则表示防火墙未关闭
若防火墙状态显示为inactive (dead),则无需再关闭防火墙2.关闭防火墙并禁止开机重启
systemctl disable firewalld.service
systemctl stop firewalld.service
✨ 2.3 关闭RemoveIPC
1.修改/etc/systemd/logind.conf文件中的“RemoveIPC”值为“no”
vi /etc/systemd/logind.conf
RemoveIPC=no##重新加载配置参数
systemctl daemon-reload
systemctl restart systemd-logind
✨ 2.4 设置root用户远程登录
vi /etc/ssh/sshd_config
## 将“PermitRootLogin”改为“yes”
PermitRootLogin yes## 注释掉“Banner”所在的行
#Banner none## 重启生效
systemctl restart sshd.service
✨ 2.5 yum安装依赖
注:两个节点均做如下操作##创建挂载目录
mkdir /cdrom[root@opengauss5m ~]# ls -lrt /opt/CentOS-7-x86_64-DVD-2009.iso
-rw-r--r-- 1 root root 4712300544 Apr 8 09:28 /opt/CentOS-7-x86_64-DVD-2009.iso##挂载目录
mount -o loop /opt/CentOS-7-x86_64-DVD-2009.iso /cdrom[root@opengauss5m ~]# df -TH
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 1.5G 0 1.5G 0% /dev
tmpfs tmpfs 1.5G 0 1.5G 0% /dev/shm
tmpfs tmpfs 1.5G 11M 1.5G 1% /run
tmpfs tmpfs 1.5G 0 1.5G 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 96G 6.8G 89G 8% /
/dev/sda1 xfs 1.1G 158M 906M 15% /boot
tmpfs tmpfs 297M 0 297M 0% /run/user/0
/dev/loop0 iso9660 4.8G 4.8G 0 100% /cdrom##yum源配置文件
[root@opengauss5m ~]# cd /etc/yum.repos.d/
[root@opengauss5m yum.repos.d]# mkdir bak
[root@opengauss5m yum.repos.d]# mv CentOS* bak[root@opengauss5m yum.repos.d]# vi local.repo
[base-local]
name=CentOS7-local
baseurl=file:///cdrom
enabled=1
gpgcheck=0#清空并重载yum
yum clean all
yum makecache
##测试yum安装
yum -y install tree##安装依赖包
yum install libaio-devel flex bison ncurses-devel glibc-devel patch redhat-lsb-core readline-devel libnsl -y
yum install net-tools -y
✨ 2.6 host设置
注:主备2个节点均做如下设置##主库
[root@opengauss5m ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6192.168.6.10 opengauss5m##备库
[root@opengauss5b ~]# more /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6192.168.6.11 opengauss5b
✨ 2.7 Python安装
CentOS:支持Python 3.6.X,python需要通过--enable-shared方式编译
1.依赖包安装
[root@opengauss5m ~]# yum install -y zlib*
[root@opengauss5m ~]# rpm -qa | grep zlib
zlib-1.2.7-18.el7.x86_64
zlib-devel-1.2.7-18.el7.x86_642.安装包下载
python官网 https://www.python.org/downloads/release/python-3615/下载安装包即可
安装包为:Python-3.6.15.tgz3.解压并编译
cd /opt
tar -zxvf Python-3.6.15.tgz
cd Python-3.6.15/
./configure --prefix=/usr/local/python3 --enable-sharedmake
make install
注意:make编译时间比较长,耐心等待4.OS上设置python的软连接
ln -s /usr/local/python3/bin/python3.6 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip5.环境校验
[root@opengauss5m ~]# python -V
python: error while loading shared libraries: libpython3.6m.so.1.0: cannot open shared object file: No such file or directory出现以上报错处理方法,libpython3.6m.so.1.0复制到/usr/lib64/目录下即可[root@opengauss5m ~]# find / -name libpython3.6m.so.1.0
/usr/local/python3/lib/libpython3.6m.so.1.0
/opt/Python-3.6.15/libpython3.6m.so.1.0[root@opengauss5m ~]# cp /usr/local/python3/lib/libpython3.6m.so.1.0 /usr/lib64[root@opengauss5m ~]# python3 -V
Python 3.6.15[root@opengauss5m ~]# python
Python 3.6.15 (default, Apr 8 2023, 11:45:45)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
📣 3.目录创建
##创建存放安装包的目录
mkdir -p /opt/software/openGauss
chmod 755 -R /opt/software##创建数据库软件相关目录
mkdir -p /opt/openGauss
chmod -R 755 /opt/openGauss
4.安装包解压
安装包下载地址: https://opengauss.org/zh/download/
注:从以上网站下载企业版即可上传到主库所在的目录:/opt/software/openGauss##解压安装包
cd /opt/software/openGauss
tar -zxvf openGauss-5.0.0-CentOS-64bit-all.tar.gz
tar -zxvf openGauss-5.0.0-CentOS-64bit-om.tar.gz
5.XML配置文件
安装openGauss前需要创建cluster_config.xml文件。cluster_config.xml文件包含部署openGauss的服务器信息、安装路径、IP地址以及端口号等。
用于告知openGauss如何部署。用户需根据不同场景配置对应的XML文件。本次部署以一主一备的方式创建XML配置文件## 配置数据库名称及各项目录
[root@opengauss5m ~]# find / -name cluster_config_template.xml
/opt/software/openGauss/script/gspylib/etc/conf/cluster_config_template.xml
说明:获取XML文件模板,按照实际环境配置编辑配置XML文件:
vi /opt/software/openGauss/cluster_config.xml<?xml version="1.0" encoding="UTF-8"?>
<ROOT><!-- openGauss整体信息 --><CLUSTER><!-- 数据库名称 --><PARAM name="clusterName" value="opengauss" /><!-- 数据库节点名称(hostname) --><PARAM name="nodeNames" value="opengauss5m,opengauss5b" /><!-- 数据库安装目录--><PARAM name="gaussdbAppPath" value="/opt/openGauss/app" /><!-- 日志目录--><PARAM name="gaussdbLogPath" value="/opt/openGauss/log/omm" /><!-- 临时文件目录--><PARAM name="tmpMppdbPath" value="/opt/openGauss/tmp"/><!-- 数据库工具目录--><PARAM name="gaussdbToolPath" value="/opt/openGauss/om" /><!-- 数据库core文件目录--><PARAM name="corePath" value="/opt/openGauss/corefile"/><!-- 节点IP,与数据库节点名称列表一一对应 --><PARAM name="backIp1s" value="192.168.6.10,192.168.6.11"/> </CLUSTER><!-- 每台服务器上的节点部署信息 --><DEVICELIST><!-- 节点1上的部署信息 --><DEVICE sn="opengauss5m"><!-- 节点1的主机名称 --><PARAM name="name" value="opengauss5m"/><!-- 节点1所在的AZ及AZ优先级 --><PARAM name="azName" value="AZ1"/><PARAM name="azPriority" value="1"/><!-- 节点1的IP,如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP --><PARAM name="backIp1" value="192.168.6.10"/><PARAM name="sshIp1" value="192.168.6.10"/><!--dn--><PARAM name="dataNum" value="1"/><PARAM name="dataPortBase" value="15400"/><PARAM name="dataNode1" value="/opt/openGauss/data/dn,opengauss5b,/opt/openGauss/data/dn"/><PARAM name="dataNode1_syncNum" value="0"/></DEVICE><!-- 节点2上的节点部署信息,其中“name”的值配置为主机名称 --><DEVICE sn="opengauss5b"><!-- 节点2的主机名称 --><PARAM name="name" value="opengauss5b"/><!-- 节点2所在的AZ及AZ优先级 --><PARAM name="azName" value="AZ1"/><PARAM name="azPriority" value="1"/><!-- 节点2的IP,如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP --><PARAM name="backIp1" value="192.168.6.11"/><PARAM name="sshIp1" value="192.168.6.11"/></DEVICE></DEVICELIST>
</ROOT>
6.初始化安装
采用交互模式执行前置,并在执行过程中自动创建操作系统root用户互信和omm用户互信
#主库执行即可
[root@opengauss5m ~]# cd /opt/software/openGauss/script
[root@opengauss5m script]# ./gs_preinstall -U omm -G dbgrp -X /opt/software/openGauss/cluster_config.xml
[GAUSS-51405] : You need to install software:expect
#解决办法是安装如下依赖包
yum install expect输入集群密码:omm123[FAILURE] opengauss5m:
[GAUSS-50202] : The /opt/openGauss must be empty. Or user [omm] has write permission to directory /opt/openGauss. Because it will create symbolic link [/opt/openGauss/app] to install path [/opt/openGauss/app_a07d57c3] in gs_install process with this user.
[FAILURE] opengauss5b:
[GAUSS-50202] : The /opt/openGauss must be empty. Or user [omm] has write permission to directory /opt/openGauss. Because it will create symbolic link [/opt/openGauss/app] to install path [/opt/openGauss/app_a07d57c3] in gs_install process with this user.#以上报错处理方法,然后再重新执行
[root@opengauss5m script]# rm -rf /opt/openGauss
[root@opengauss5m script]# chmod 775 /opt -R
[root@opengauss5m script]# chown omm:dbgrp /opt -R
7.执行安装
/opt/openGauss/app#主库执行即可,在执行过程中,用户需根据提示输入数据库的密码,密码具有一定的复杂度,为保证用户正常使用该数据库,请记住输入的数据库密码设置的密码要符合复杂度要求:
最少包含8个字符,最多包含16个字符。
不能和用户名、当前密码(ALTER)、或当前密码反序相同。
至少包含大写字母(A-Z)、小写字母(a-z)、数字、非字母数字字符(限定为~!@#$%^&*()-_=+\|[{}];:,<.>/?)四类字符中的三类字符。
1.登录到openGauss的主机,并切换到omm用户
[root@opengauss5m ~]# su - omm
[omm@opengauss5m ~]$ ll /opt/software/openGauss/cluster_config.xml
-rw------- 1 omm dbgrp 2532 Apr 8 11:21 /opt/software/openGauss/cluster_config.xml
gs_install -X /opt/software/openGauss/cluster_config.xml2.安装执行成功之后,需要手动删除主机root用户的互信,即删除openGauss数据库各节点上的互信文件。
rm –rf ~/.ssh
8.安装验证
1.集群状态检查
## 通过openGauss提供的gs_om工具可以完成数据库状态检查以omm用户身份登录服务器。
执行如下命令检查数据库状态是否正常,“cluster_state ”显示“Normal”表示数据库可正常使用[root@opengauss5m ~]# su - omm
Last login: Sat Apr 8 12:56:31 CST 2023 on pts/0
[omm@opengauss5m ~]$ gs_om -t status
-----------------------------------------------------------------------cluster_name : opengauss
cluster_state : Normal
redistributing : No-----------------------------------------------------------------------
[omm@opengauss5m ~]$ gs_om -t status --detail
[ Cluster State ]cluster_state : Normal
redistributing : No
current_az : AZ_ALL[ Datanode State ]node node_ip port instance state
---------------------------------------------------------------------------------------------
1 opengauss5m 192.168.6.10 15400 6001 /opt/openGauss/data/dn P Primary Normal
2 opengauss5b 192.168.6.11 15400 6002 /opt/openGauss/data/dn S Standby Normal3.gs_om -t stop
[omm@opengauss5m ~]$ gs_om -t stop4.启动集群
[omm@opengauss5m ~]$ gs_om -t start5.登录数据库
[omm@opengauss5m ~]$ gsql -d postgres -p 15400
gsql ((openGauss 5.0.0 build a07d57c3) compiled at 2023-03-29 03:07:56 commit 0 last mr )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.openGauss=# \lList of databasesName | Owner | Encoding | Collate | Ctype | Access privileges
-----------+-------+-----------+---------+-------+-------------------postgres | omm | SQL_ASCII | C | C |template0 | omm | SQL_ASCII | C | C | =c/omm +| | | | | omm=CTc/ommtemplate1 | omm | SQL_ASCII | C | C | =c/omm +| | | | | omm=CTc/omm
(3 rows)
相关文章:

openGauss 5.0企业版主从部署,实战狂飙
📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜&am…...
Vue中props组件和slot标签的区别
在 Vue 中,props 和 slot 都是组件之间进行通信的机制,它们的作用和应用场景有一些区别: props 是一种组件的数据传递机制,通过在父组件中以属性的形式向子组件传递数据。子组件接收这些数据,并可以进行相应的处理和渲…...

基于Windows下VSCode搭建Vue开发环境
一、准备工作 VSCode编辑器安装:https://code.visualstudio.com/Node.js安装:https://blog.csdn.net/qq_40197828/article/details/78302124VSCode插件安装:Vetur和ESlint 二、更换淘宝镜像源 更换镜像源命令:npm install -g c…...

Android开发 Dialog对话框 DatePickerDialog
1. AlertDialog AlertDialog是弹出的提醒对话框,有提示,确认,选择等功能。 没有公开的构造方法,一般用AlertDialog.Builder来完成参数设置,最后调用create方法创建。 参数设置常用的方法: 代码ÿ…...
开心档开发入门网之C++ Web 编程
C Web 编程什么是 CGI?公共网关接口(CGI),是一套标准,定义了信息是如何在 Web 服务器和客户端脚本之间进行交换的。CGI 规范目前是由 NCSA 维护的,NCSA 定义 CGI 如下:公共网关接口(…...

C# 和 VB .NET 的纯 FFmpeg 包装器:CSFFmpeg Crack
用于 C# 和 VB .NET 的纯 FFmpeg 包装器buildbuildpassingpassing releasereleasev1.0.3.0v1.0.3.0用于 C# 和 VB .NET Framework(WinForm 和 WPF)和 .NET Core 的纯 FFmpeg 包装器。 截图 主要 Winform 示例有据可查的例子目录: 关于截图好处…...
python外篇(序列化和非序列化)
目录 概念阐述 pickle json msgpack 概念阐述 序列化是指将对象转化为可存储或可传输的数据格式,例如将 Python 对象转化为二进制、JSON 或 XML 等格式,以便于将其存储到文件中或在网络上传输。在Python中,可以使用pickle、json、msgpac…...

Linux总结(二)
基础IO 1.什么叫文件? 我们需要在操作系统的角度理解文件。 文件 = 文件内容 + 属性(所以即使是空文件,也会占空间,因为我们是需要保存文件属性的,属性也是数据,所以占空间) C/C++程序默认会打开三个文件流,叫做标准输入(stdin),标准输出(stdout),标准错误(std…...

【4.1】Socket编程、TCP挥手
TCP连接断开 四次挥手 四次挥手过程 客户端发送FIN报文,客户端进入FIN_WAIT_1状态。 服务端接收报文,发送ACK报文,服务端进入CLOSE_WAIT状态。 客户端收到ACK报文,进入FIN_WAIT_2状态。 服务端处理完数据后,也发送…...

【竞赛经历】CSDN第41期竞赛题解
1 前言 本次的竞赛主要是最后一题,对于完全不懂珠算的人来说还是有点困难的,仅理解题目的意思就花了很多时间,最后侥幸拿了第一个前三。。。 2 题解 本次竞赛分为编程题部分和非编程题部分,其中非编程题部分比较简单。 2.1 非编…...

【Linux学习】信号——预备知识 | 信号产生 | 核心转储
🐱作者:一只大喵咪1201 🐱专栏:《Linux学习》 🔥格言:你只管努力,剩下的交给时间! 信号🔔信号🎵预备知识🎵信号处理方法的注册🔔信号…...

2023中国程序员薪酬报告出炉,你拖后腿了吗?
程序员薪资高已是公认的事实,但是具体高到什么程度呢?近期,全球人力服务公司 Michael Page Internatioal 就发布了《2023 中国大陆薪酬报告》,揭示了中国程序员的薪酬情况。 该报告中一共调研了国内 7 个行业以及 6 大城市不同职…...

Mac下Python3安装及基于Idea开发
本篇文章带大家基于Mac OS操作系统,下载、安装Python环境,并基于Idea编写第一个Demo。 Python3安装 访问Python官网:https://www.python.org/。找到“Download”菜单,点击下载: 此处下载的为Mac的安装包,…...

2017年 团体程序设计天梯赛——题解集
前言: Hello各位童学大家好!😊😊,茫茫题海你我相遇即是缘分呐,或许日复一日的刷题已经让你感到疲惫甚至厌倦了,但是我们真的真的已经达到了我们自身极限了吗?少一点自我感动…...

“唯一靶点”的华堂宁会成控糖爆品吗?
一上市,两次“断货”的货华堂宁有爆品那味儿了。 2022年10月28日华领医药-B(02552.HK)公告华堂宁(多格列艾汀)正式进入商业化,一周后各个渠道便进入到了断货和限售的状态。 对于一个不在传统九大降糖药品…...

Spring《三》DI依赖注入
🍎道阻且长,行则将至。🍓 上一篇:Spring《二》bean的实例化与生命周期 下一篇:敬请期待 目录一、setter注入🍉1.注入引用数据类型2.注入简单数据类型二、构造器注入🍊1.注入引用数据类型2.简单数…...

leetcode 面试题 17.06. 2出现的次数
编写一个方法,计算从 0 到 n (含 n) 中数字 2 出现的次数。 示例: 输入: 25 输出: 9 解释: (2, 12, 20, 21, 22, 23, 24, 25)(注意 22 应该算作两次) 该问题用的方法数数组dp,首先我通过总结规律写出了相关的code。使用一个dp数组记录10i10^i10i以内会出…...
CMake入门教程【基础篇】5.configure_file构建配置
configure_file配置文件 文章目录 知识点实例代码目录代码实现知识点 configure_fileconfigure_file 源文件转换为目标文件 实例 代码目录 |-📁prj4 |-- 🎴CMakeLists.txt |-- 🎴TutorialConfig.h.in |-- 🎴tutorial.cxx 代码实现 /prj4/CMakeLists.…...

软件开发可行性分析——健康食谱小程序
关于软件开发可行性分析先给大家介绍下面几个关键点: 什么是可行性分析? 检查并确定是否值得为项目或产品投入时间、金钱和资源。这样的评估活动称为“可行性分析”。 为什么要进行可行性分析? 在软件项目开发过程中,只要资源…...

ShuffleNet V1 对花数据集训练
目录 1. shufflenet 介绍 分组卷积 通道重排 2. ShuffleNet V1 网络 2.1 shufflenet 的结构 2.2 代码解释 2.3 shufflenet 代码 3. train 训练 4. Net performance on flower datasets 1. shufflenet 介绍 shufflenet的亮点:分组卷积 通道重排 mobilenet …...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...

定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...
【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论
路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中(图1): mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...

免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...

ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]
报错信息:libc.so.6: cannot open shared object file: No such file or directory: #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…...

spring Security对RBAC及其ABAC的支持使用
RBAC (基于角色的访问控制) RBAC (Role-Based Access Control) 是 Spring Security 中最常用的权限模型,它将权限分配给角色,再将角色分配给用户。 RBAC 核心实现 1. 数据库设计 users roles permissions ------- ------…...
数据库——redis
一、Redis 介绍 1. 概述 Redis(Remote Dictionary Server)是一个开源的、高性能的内存键值数据库系统,具有以下核心特点: 内存存储架构:数据主要存储在内存中,提供微秒级的读写响应 多数据结构支持&…...