中标麒麟 RAC 19c 部署(Openssh免密BUG解决方案)

news2024/11/28 2:34:20

部署环境:

主机一主机二
host ip192.168.80.46192.168.80.47
vip 192.168.80.48192.168.80.49
private ip192.168.10.10192.168.10.11
storage ip192.168.20.33192.168.20.34
主机名rac19c1rac19c2
 

需要上传的软件包:

一.虚拟机配置

选择中标麒麟IOS文件,声卡打印机,USB适配器可以拔掉。

1.配置语言环境:

vi /etc/locale.conf

2.配置yum源

挂载:

验证yum源可用性:

3.关闭防火墙:

4.关闭selinux

5.设置disk.enableUUID = “true”

编辑以下文件:

6.配置网卡

重启服务器:

验证语言与防火墙:

关机:

二.克隆虚拟机

1.克隆storage

2.克隆racnode1与racnode2

三.配置虚拟机网络

虚拟网络配置如下:

Storage节点 虚拟机配置:

虚拟机内root用户登录:

编辑第二块网卡:

重启网卡:

尝试使用远程终端连接:

Storage 节点网络配置结束

racnode1节点网络配置:

启动后用root用户登入

更改用户名:

Ens32配置:

Ens34配置:

Ens35配置:

重启网卡:

尝试连接节点1:

racnode2节点网络配置:

Ens34配置:

Ens35配置:

重启网卡后检查:

网络环境检查是否通畅:

每个节点的每个ip都ping一下看看是否通畅

至此网络配置结束

四.配置共享存储

存储规划:

Storage中添加磁盘:

配置共享存储,在共享存储中创建target服务,创建iqn号,访问iqn下面的lun。

存储服务器server端

安装target包

yum -y install targetd targetcli

启动target服务

systemctl start target

开机自动启动target服务

systemctl enable target

查看target的状态

systemctl status target

查看磁盘

先把准备共享的块做出来,创建一个target,在 target 上创建 LUN

[root@storage ~]# targetcl

目前是在根路径下,直接敲ls(和linux的ls一样)命令来查看所有路径及路径下的配置,敲pwd命令可以显示当前所在的路径(和linux的pwd一样)。

cd /backstores/block

将磁盘与名称绑定

create name=disk1 dev=/dev/sdb

create name=disk2 dev=/dev/sdc

create name=disk3 dev=/dev/sdd

create name=disk4 dev=/dev/sde

create name=disk5 dev=/dev/sdf

create name=disk6 dev=/dev/sdg

create name=disk7 dev=/dev/sdh

create name=disk8 dev=/dev/sdi

create name=disk9 dev=/dev/sdj

进入ISCSI路径下创建完成iscsi名称

cd /iscsi

create iqn.2024-06.com.zhangxin:racdisk

创建完成iscsi名称后,下面会默认创建一个tpg1的路径,在tpg1路径下有三个路径为主要的:

1.acls(客户端访问名称,免认证配置)

2.luns(共享lun存储池,调用block共享块)

3.portals(共享存储地址和端口)

绑定lun

cd iqn.2024-06.com.zhangxin:racdisk/tpg1/luns

create lun=lun1 storage_object=/backstores/block/disk1

create lun=lun2 storage_object=/backstores/block/disk2

create lun=lun3 storage_object=/backstores/block/disk3

create lun=lun4 storage_object=/backstores/block/disk4

create lun=lun5 storage_object=/backstores/block/disk5

create lun=lun6 storage_object=/backstores/block/disk6

create lun=lun7 storage_object=/backstores/block/disk7

create lun=lun8 storage_object=/backstores/block/disk8

create lun=lun9 storage_object=/backstores/block/disk9

创建acls免认证访问

创建允许客户端连接对象

cd /iscsi/iqn.2024-06.com.zhangxin:racdisk/tpg1/acls

/iscsi/iqn.20...isk/tpg1/acls> create wwn=iqn.2024-04.com.zhangxin:rac19c1

/iscsi/iqn.20...isk/tpg1/acls> create wwn=iqn.2024-04.com.zhangxin:rac19c2

配置完成后

cd /

保存配置到配置文件

Saveconfig

下面配置 rac两个节点的target客户端

配置存储客户端client

安装客户端软件

yum -y install iscsi-initiator-utils

启动服务

systemctl start iscsid.service

systemctl start iscsi.service

开机自动启动

systemctl enable iscsid.service

systemctl enable iscsi.service

racnode1 修改配置文件

vi /etc/iscsi/initiatorname.iscsi

InitiatorName=iqn.2024-06.com.zhangxin:rac19c1

racnode2 修改配置文件

vi /etc/iscsi/initiatorname.iscsi

InitiatorName=iqn.2024-06.com.zhangxin:rac19c1

重启客户端服务

systemctl restart iscsid.service

systemctl restart iscsi.service

两个节点全执行:
客户端连接网络存储

发现网络存储

iscsiadm -m discovery -t st -p 192.168.20.30

连接网络存储

iscsiadm -m node -T iqn.2024-06.com.zhangxin:racdisk -p 192.168.20.30:3260 -l

lsblk 可以看到 存储服务器的磁盘

关机重启查看 磁盘是否能自动共享,注意开机先开存储服务器

在两节点查看共享磁盘,能看见说明没问题了。

至此共享磁盘配置完毕

五.配置共享存储多路径

查看登录的session 会话

iscsiadm -m session

iscsiadm -m session -P 3 查看登录session的详细信息

iscsiadm -m discovery -t st -p 192.168.20.31

iscsiadm -m node -T iqn.2024-06.com.zhangxin:racdisk -p 192.168.20.31:3260 -l

可以看到存储服务器的磁盘被识别了两次

查看所有磁盘id:

for i in b c d e f g h i j k l m n o p q r s; 
do 
echo "sd$i" "`/usr/lib/udev/scsi_id  --whitelisted --replace-whitespace --device=/dev/sd$i` "; 
done

安装多路径软件:

yum install device-mapper-multipath device-mapper -y

设置开机自动启动多路径

systemctl enable multipathd.service

启动多路径

配置multipath.conf

/usr/share/doc/device-mapper-multipath-0.4.9/multipath.conf /etc/multipath.conf

/sbin/mpathconf –enable

启动服务

systemctl start multipathd.service

相同id的磁盘已被绑定。

至此多路径绑定完毕。

.数据库服务器参数配置(该参数生产环境需要具体商定)

1、设置/etc/hosts
#public ip
192.168.80.46         rac19c1
192.168.80.47         rac19c2

#vip ip
192.168.80.48         rac1-vip
192.168.80.49         rac2-vip

#private ip
192.168.10.10         rac1-priv
192.168.10.11         rac2-priv

#scan ip
192.168.80.50         rac19c-scan

2、创建用户和组

/usr/sbin/groupadd -g 54321 oinstall 
/usr/sbin/groupadd -g 54329 asmadmin
/usr/sbin/groupadd -g 54327 asmdba
/usr/sbin/groupadd -g 54328 asmoper
/usr/sbin/groupadd -g 54322 dba
/usr/sbin/groupadd -g 54323 oper
/usr/sbin/groupadd -g 54324 backupdba
/usr/sbin/groupadd -g 54325 dgdba
/usr/sbin/groupadd -g 54326 kmdba
/usr/sbin/groupadd -g 54330 racdba
/usr/sbin/useradd -u 54321 -g  oinstall -G dba,asmdba,backupdba,dgdba,kmdba,racdba,oper oracle 
/usr/sbin/useradd -u 54331 -g  oinstall -G asmadmin,asmdba,asmoper,dba,racdba grid

echo 'passworda2!' | passwd --stdin grid
echo 'passworda2!' | passwd --stdin oracle

在虚拟机中添加一块100磁盘用于安装


扫一下盘:
echo "- - -" > /sys/class/scsi_host/host0/scan
echo "- - -" > /sys/class/scsi_host/host1/scan
echo "- - -" > /sys/class/scsi_host/host2/scan

在最底下 sdt,已经可以找到了100G磁盘

对磁盘格式化后挂载:

授权:

mkdir -p /u01/app/19.3.0/grid
mkdir -p /u01/app/grid
mkdir -p /u01/app/oracle
mkdir -p /u01/app/oracle/product/19.3.0/dbhome_1


chown -R grid:oinstall  /u01
chown -R oracle:oinstall  /u01/app/oracle
chmod -R 775 /u01/

七.安装依赖包

yum install -y bc gcc gcc-c++ binutils compat-libcapl compat-libstdc++ dtrace-modules dtrace-modules-headers

yum install -y dtrace-modules-provider-headers dtrace-utils elfutils-libelf elfutils-libelf-devel fontconfig-devel glibc glibc-devel

yum install -y libstdc99 libstdc++-devel libxcb make smartmontools sysstat unzip
yum install -y unixODBC unixODBC-devel


yum install -y kmod*
yum install -y ks*
yum install -y libaio*
yum install -y compat*

八.修改资源限制参数

vi /etc/security/limits.conf

cat >> /etc/security/limits.conf << "EOF"

grid soft nproc 16384 
grid hard nproc 16384 
grid soft nofile 65536 
grid hard nofile 65536 
grid soft stack 32768 
grid hard stack 32768 
oracle soft nproc 16384 
oracle hard nproc 16384 
oracle soft nofile 65536 
oracle hard nofile 65536
oracle soft stack 32768 
oracle hard stack 32768
oracle soft  memlock unlimited
oracle hard  memlock unlimited 

EOF

vi /etc/pam.d/login

echo "session    required   pam_limits.so" >> /etc/pam.d/login

九、修改内核参数

vi /etc/sysctl.conf 

fs.aio-max-nr = 1048576 
fs.file-max = 6815744 
kernel.sem = 250 32000 100 128 
net.ipv4.ip_local_port_range = 9000 65500 
net.core.rmem_default = 262144 
net.core.rmem_max = 4194304 
net.core.wmem_default = 262144 
net.core.wmem_max = 1048586 
kernel.panic_on_oops = 1  
kernel.shmmax = 4831838208
kernel.shmall = 1179648
kernel.shmmni = 4096
vm.min_free_kbytes = 524288
vm.swappiness = 10
vm.nr_hugepages = 2560

sysctl -p

# SGA=4000*0.7*0.8=2240M

# PGA=4000*0.7*0.2=560

单个共享内存段的最大值,要放下整个SGA,

kernel.shmmax=4.5*1024*1024*1024=4831838208

kernel.shmall=kernel.shmmax/getconf PAGESIZE=4831838208/4096=1179648

[root@node1 yum.repos.d]# getconf PAGESIZE

4096

[root@node1 yum.repos.d]#

安装oracle时实际设置 :SGA=4500M

#vm.nr_hugepages= 1280    大内存页, < shmmax= 2560m/2m=1280

vm.nr_hugepages= 2240M/2=1120

十.关闭透明页

cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
cat /sys/kernel/mm/transparent_hugepage/defrag
[always] madvise never

配置开机设置never

vi /etc/rc.d/rc.local

if test -f /sys/kernel/mm/transparent_hugepage/enabled; then 
	echo never > /sys/kernel/mm/transparent_hugepage/enabled 
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then 
	echo never > /sys/kernel/mm/transparent_hugepage/defrag 
fi
添加或修改transparent_hugepage=never,numa=off文件中的参数
vi  /etc/default/grub:

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet numa=off transparent_hugepage=never"
GRUB_DISABLE_RECOVERY="true"

运行grub2–mkconfig 命令以重新生成grub.cfg文件

grub2-mkconfig -o /boot/grub2/grub.cfg

十一.设置用户环境变量

grid用户环境变量

vi .bash_profile

alias sqlplus="rlwrap sqlplus" 
export TMP=/tmp 
export ORACLE_BASE=/u01/app/grid
export ORACLE_HOME=/u01/app/19.3.0/grid
export ORACLE_SID=+ASM1
export NLS_DATE_FORMAT="yyyy-mm-dd HH24:MI:SS"
export PATH=$PATH:$ORACLE_HOME/bin:$ORACLE_HOME/OPatch


alias sqlplus="rlwrap sqlplus" 
export TMP=/tmp 
export ORACLE_BASE=/u01/app/grid
export ORACLE_HOME=/u01/app/19.3.0/grid
export ORACLE_SID=+ASM2
export NLS_DATE_FORMAT="yyyy-mm-dd HH24:MI:SS"
export PATH=$PATH:$ORACLE_HOME/bin:$ORACLE_HOME/OPatch



oracle用户环境变量

vi .bash_profile

alias sqlplus="rlwrap sqlplus" 
export TMP=/tmp
export TMPDIR=$TMP
export LANG=en_US
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1
export ORACLE_SID=racdb1
export PATH=$PATH:$ORACLE_HOME/bin:$ORACLE_HOME/OPatch
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export NLS_DATE_FORMAT="yyyy-mm-dd HH24:MI:SS"
export NLS_LANG=AMERICAN_AMERICA.UTF8

vi .bash_profile

alias sqlplus="rlwrap sqlplus" 
export TMP=/tmp
export TMPDIR=$TMP
export LANG=en_US
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/19.3.0/db_1
export ORACLE_SID=racdb2
export PATH=$PATH:$ORACLE_HOME/bin:$ORACLE_HOME/OPatch
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export NLS_DATE_FORMAT="yyyy-mm-dd HH24:MI:SS"
export NLS_LANG=AMERICAN_AMERICA.UTF8

十二.配置ASM磁盘权限

vi /etc/udev/rules.d/99-oracle-asmdevices.rules

ENV{DM_NAME}=="mpatha", OWNER:="grid", GROUP:="asmadmin", MODE:="660"
ENV{DM_NAME}=="mpathb", OWNER:="grid", GROUP:="asmadmin", MODE:="660"
ENV{DM_NAME}=="mpathc", OWNER:="grid", GROUP:="asmadmin", MODE:="660"
ENV{DM_NAME}=="mpathd", OWNER:="grid", GROUP:="asmadmin", MODE:="660"
ENV{DM_NAME}=="mpathe", OWNER:="grid", GROUP:="asmadmin", MODE:="660"
ENV{DM_NAME}=="mpathf", OWNER:="grid", GROUP:="asmadmin", MODE:="660"
ENV{DM_NAME}=="mpathg", OWNER:="grid", GROUP:="asmadmin", MODE:="660"
ENV{DM_NAME}=="mpathh", OWNER:="grid", GROUP:="asmadmin", MODE:="660"
ENV{DM_NAME}=="mpathi", OWNER:="grid", GROUP:="asmadmin", MODE:="660"
 

/sbin/udevadm control --reload 

/sbin/udevadm trigger --type=devices --action=change
udevadm trigger

至此服务器参数配置准备完毕。

十三.集群部署

软件包上传到哪里都可以,我这里自己加了一块硬盘,专门用于放置软件。

我们这里需要三个安装包:

上传到/soft 中

unzip LINUX.X64_193000_grid_home.zip -d /u01/app/19.3.0/grid/

安装grid中的rpm包(两个节点都需要安装,用scp传到节点2):

两个节点rpm

安装之后就可以进行grid安装

进入集群安装:

Scanname 需要与/etc/hosts中保持一致

Vip名称也要对应上

添加主机2

点击setup,成功后点击test。这里test大概率报错,原因是操作系统OpenSSH版本太高,ssl倒是没问题 MOS上面说的 -T参数我尝试了但没有解决。

解决方案:

1.降级操作系统 ssh(不推荐)

Index of /pub/OpenBSD/OpenSSH/portable/

去网站里面下载7.4p1的openssh

安装必备的软件包:

yum -y install gcc libcap libcap-devel glibc-devel pam-devel krb5-devel krb5-libs

yum install -y openssl-devel

解压压缩包

下面就是源码安装三板斧

  1. 编译安装

./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-zlib --with-ssl-dir=/usr --with-md5-passwords --mandir=/usr/share/man --with-kerberos5=/usr/lib64/libkrb5.so

  1. make
  2. make install

两个节点都操作一下,值得注意的是这里并没有卸载掉原本的OpenSSH8.0,不知道是否是覆盖了,还需要探究。

下面是make install可能碰到的错误

解决方案:重新生成证书文件

再重新执行make install

查看两个节点的SSH版本:

再次setup,test一次,已经可以成功了。

2.自己配置互信(推荐)

配置oracle用户的节点互信:

1、在两个节点执行:
su - oracle
mkdir ~/.ssh
chmod 755 .ssh 
/usr/bin/ssh-keygen -t rsa
/usr/bin/ssh-keygen -t dsa
全部按enter键即可。
2、将所有的key文件汇总到一个总的认证文件中,在节点1上执行:
su – oracle
ssh rac19c1 cat ~/.ssh/id_rsa.pub >> authorized_keys
ssh rac19c2 cat ~/.ssh/id_rsa.pub >> authorized_keys
ssh rac19c1 cat ~/.ssh/id_dsa.pub >> authorized_keys
ssh rac19c2 cat ~/.ssh/id_dsa.pub >> authorized_keys
在命令执行的过程中需要输入rac1和rac2对应的oracle用户的密码。
3、节点1上存在一份完整的key,拷贝到节点2:
[oracle@rac19c1 ~]$ cp authorized_keys .ssh/
[oracle@rac19c1 ~]$ cd .ssh/
[oracle@rac19c1 .ssh]$ chmod 600 authorized_keys
[oracle@rac19c1 .ssh]$ scp authorized_keys rac19c2:~/.ssh/
[oracle@rac19c2 ~]$ cd .ssh/
[oracle@rac19c2 .ssh]chmod 600 authorized_keys
4、在2个节点都执行一下命令
ssh rac19c1 date
ssh rac19c2 date
ssh rac19c1-priv date
ssh rac19c2-priv date
5、检验是否配置成功,在节点1上不用输入密码就可以通过ssh连接节点2,说明配置成功
[oracle@rac19c1 ~]$ ssh rac19c2
[oracle@rac19c2 ~]$ exit


配置grid用户的节点互信:
与Oracle用户执行方式相同,只是执行脚本的用户变成了grid。

GI部署只配置grid互信即可

最重要的一步:自己配置./gridSetup.sh的参数

这里互信就不需要配置了也可以通过。

我们就继续安装

.

下面按照预检配置即可,DBCA这里也省略,生产环境不同配置项也不同。

需要注意的是dbca 的时候也需要加

dbca -J-Doracle.install.ssh.setupCheckEnabled=false

与grid安装类似,也需要添加不检查互信的参数

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

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

相关文章

关于 element-ui el-cascader 数据回显问题的解决方案

前言 这两天在使用 el-cascader 控件时&#xff0c;后端日期的数据如“2023-05-06”前端需要按照“年-月-日”的形式分割成三级联动&#xff0c;因为数据库保存的是完整的日期&#xff0c;前端数据回显时需要对后端返回的数据进行处理。 问题再现 联动下拉框的数据如下&#x…

昇思25天学习打卡营第十四天|Pix2Pix实现图像转换

训练营进入第十四天&#xff0c;今天学的内容是Pix2Pix图像转换&#xff0c;记录一下学习内容&#xff1a; Pix2Pix概述 Pix2Pix是基于条件生成对抗网络&#xff08;cGAN, Condition Generative Adversarial Networks &#xff09;实现的一种深度学习图像转换模型&#xff0c…

C语言 -- 扫雷游戏

C语言 – 扫雷游戏 游戏规则&#xff1a; 给定一个棋盘&#xff0c;玩家需要排查出所有隐藏的雷&#xff0c;也就是选择出所有不是雷的地方。 玩家选择位置&#xff0c;若此处有雷&#xff0c;玩家被炸死&#xff0c;游戏结束&#xff1b; 若此处无雷&#xff0c;此处提示周围一…

【SOLID原则前端中的应用】里氏替换原则(Liskov Substitution Principle,LSP)- vue3示例

里氏替换原则&#xff08;Liskov Substitution Principle&#xff0c;LSP&#xff09;规定&#xff0c;子类对象必须能够替换父类对象&#xff0c;并且程序的行为保持不变。 在Vue 3中&#xff0c;这意味着我们在创建可替换的组件时&#xff0c;应该确保子组件能够完全替代父组…

Spring源码十五:Bean的加载

上一篇我们通过Spring源码十四&#xff1a;Spring生命周期介绍了refresh的最后两个方法&#xff0c;至此通过前面大概十篇左右的篇幅介绍完了Spring容器初始化&#xff0c;接下来&#xff0c;将进入Spring另外一个模块Bean相关的知识点。 在Spring框架中&#xff0c;Bean加载过…

动态白色小幽灵404网站源码

动态白色小幽灵404网站源码&#xff0c;页面时单页HTML源码&#xff0c;将代码放到空白的html里面&#xff0c;鼠标双击html即可查看效果&#xff0c;或者上传到服务器&#xff0c;错误页重定向这个界面即可&#xff0c;喜欢的朋友可以拿去使用 <!DOCTYPE html> <ht…

联想小新14Pro,误删了一个注册表,怎么办?

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

uniapp报错--app.json: 在项目根目录未找到 app.json

【问题】 刚创建好的uni-app项目&#xff0c;运行微信小程序控制台报错如下&#xff1a; 【解决方案】 1. 程序根目录打开project.config.json文件 2. 配置miniprogramRoot&#xff0c;指定小程序代码的根目录 我的小程序代码编译后的工程文件目录为&#xff1a;dist/dev/mp…

Java常见面试题汇总带答案

本文分为十九个模块,分别是: Java 基础、容器、多线程、反射、对象拷贝、Java Web 、异常、网 络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、MyBatis、RabbitMQ、 Kafka、Zookeeper、MySQL、Redis、JVM 等等… JDK 和 JRE 有什么区别? JDK:Jav…

linux软链接和硬链接的区别

1 创建软链接和硬链接 如下图所示&#xff0c;一开始有两个文件soft和hard。使用 ln -s soft soft1创建软链接&#xff0c;soft1是soft的软链接&#xff1b;使用ln hard hard1创建硬链接&#xff0c;hard1是hard的硬链接。可以看到软链接的文件类型和其它3个文件的文件类型是不…

【测试专题】软件总体计划方案(2024原件word)

测试目标&#xff1a;确保项目的需求分析说明书中的所有功能需求都已实现&#xff0c;且能正常运行&#xff1b;确保项目的业务流程符合用户和产品设计要求&#xff1b;确保项目的界面美观、风格一致、易学习、易操作、易理解。 获取&#xff1a;软件全套文档过去进主页。 一、…

什么是五级流水?银行眼中的“好流水”,到底是什么样的?

无论是按揭买房还是日常贷款&#xff0c;银行流水都是绕不开的一环。规划好你的流水&#xff0c;不仅能让你在申请贷款时更有底气&#xff0c;还可能帮你省下不少冤枉钱。今天&#xff0c;咱们就来一场深度剖析&#xff0c;聊聊如何在按揭贷款、个人经营抵押贷款前&#xff0c;…

STM32-SPI和W25Q64

本内容基于江协科技STM32视频学习之后整理而得。 文章目录 1. SPI&#xff08;串行外设接口&#xff09;通信1.1 SPI通信简介1.2 硬件电路1.3 移位示意图1.4 SPI时序基本单元1.5 SPI时序1.5.1 发送指令1.5.2 指定地址写1.5.3 指定地址读 2. W25Q642.1 W25Q64简介2.2 硬件电路2…

计网_计算机网络概述

2024.07.03&#xff1a;计算机网络概述 第1节 计算机网络概述 1.1 互连网与互联网1.1.1总结1.1.2 因特网(互联网)发展[自行了解] 1.2 计算机网络组成1.2.1 计算机网络组成方式11.2.2 计算机网络组成方式21.2.3 计算机网络组成方式3 1.3 三种交换方式1.3.1 电路交换(1) 电路交换…

常见的Java运行时异常

常见的Java运行时异常 1、ArithmeticException&#xff08;算术异常&#xff09;2、ClassCastException &#xff08;类转换异常&#xff09;3、IllegalArgumentException &#xff08;非法参数异常&#xff09;4、IndexOutOfBoundsException &#xff08;下标越界异常&#xf…

C语言 | Leetcode C语言题解之第220题存在重复元素III

题目&#xff1a; 题解&#xff1a; struct HashTable {int key;int val;UT_hash_handle hh; };int getID(int x, long long w) {return x < 0 ? (x 1ll) / w - 1 : x / w; }struct HashTable* query(struct HashTable* hashTable, int x) {struct HashTable* tmp;HASH_F…

【Python】已解决:(Python xml库 import xml.dom.minidom导包报错)‘No module named dom’

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决&#xff1a;&#xff08;Python xml库 import xml.dom.minidom导包报错&#xff09;‘No module named dom’ 一、分析问题背景 在使用Python处理XML文件时&#xff0c;xml…

收银系统源码-线上商城预售功能

1.功能描述 预售&#xff1a;智慧新零售收银系统&#xff0c;线上商城营销插件之一&#xff0c;商品出售时可设置以支付定金或全款的方式提前预售&#xff0c;门店按订单量备货&#xff0c;降低压货成本&#xff1b; 2.适用场景 易损商品提前下单备货&#xff0c;如水果生鲜…

【MySQL】1.初识MySQL

初识MySQL 一.MySQL 安装1.卸载已有的 MySQL2.获取官方 yum 源3.安装 MySQL4.登录 MySQL5.配置 my.cnf 二.MySQL 数据库基础1.MySQL 是什么&#xff1f;2.服务器&#xff0c;数据库和表3.mysqld 的层状结构4.SQL 语句分类 一.MySQL 安装 1.卸载已有的 MySQL //查询是否有相关…

U盘非安全退出后的格式化危机与高效恢复策略

在数字化时代&#xff0c;U盘作为数据存储与传输的重要工具&#xff0c;其数据安全备受关注。然而&#xff0c;一个常见的操作失误——U盘没有安全退出便直接拔出&#xff0c;随后再插入时却遭遇“需要格式化”的提示&#xff0c;这不仅让用户措手不及&#xff0c;更可能意味着…