当前位置: 首页 > news >正文

网站建设项目的网络图/网站降权查询工具

网站建设项目的网络图,网站降权查询工具,手机怎样做自己的网站,手機如何做网站文章目录 1. MySQL主从复制1.1 使用场景1.2 MySQL的复制类型1.3 主从复制的作用1.4 主从复制的工作过程1.5 实现MySQL主从复制1.5.1 前置准备1.5.2 主服务器mysql配置1.5.3 从服务器1 mysql配置1.5.4 从服务器2 mysql配置 1.6 MySQL主从复制延时问题的原因和解决办法1.6.1 故障…

文章目录

  • 1. MySQL主从复制
    • 1.1 使用场景
    • 1.2 MySQL的复制类型
    • 1.3 主从复制的作用
    • 1.4 主从复制的工作过程
    • 1.5 实现MySQL主从复制
      • 1.5.1 前置准备
      • 1.5.2 主服务器mysql配置
      • 1.5.3 从服务器1 mysql配置
      • 1.5.4 从服务器2 mysql配置
    • 1.6 MySQL主从复制延时问题的原因和解决办法
      • 1.6.1 故障现象
      • 1.6.2 原因
      • 1.6.3 解决方案
      • 1.5.5 测试
    • 1.6 主从复制的3种同步模式
      • 1.6.1 异步复制(Asynchronous replication)
      • 1.6.2 全同步复制(Fully synchronous replication)
      • 1.6.3 半同步复制(Semisynchronous replication)
    • 1.7 半同步复制
      • 1.7.1 前置准备
      • 1.7.2 配置主服务器
      • 1.7.3 配置从服务器
      • 1.7.4 测试
      • 1.7.5 什么情况下半同步和异步会互相转换
  • 2. MySQL读写分离
    • 2.1 读写分离原理
    • 2.2 读写分离的使用场景
    • 2.3 主从复制和读写分离的关系
    • 2.4 常见的读写分离类型
      • 2.4.1 基于程序代码内部实现
      • 2.4.2 基于中间代理层实现
    • 2.5 实现读写分离
      • 2.5.1 前置准备
      • 2.5.2 配置amoeba
      • 2.5.3 测试读写分离

1. MySQL主从复制

1.1 使用场景

  • 在企业应用中,成熟的业务通常数据量都比较大
  • 单台MySQL在安全性、高可用性和高并发方面的无法满足实际的需求

配置多台主从数据库服务器以实现读写分离

1.2 MySQL的复制类型

  • 基于语句的复制(STATEMENT,MySQL默认类型)
    在服务器上执行sql语句,在从服务器上执行同样的语句,mysql默认采用基于语句的复制,执行效率高。

  • 基于行的复制(ROW)
    把改变的内容复制过去,而不是把命令在从服务器上执行一遍。

  • 混合类型的复制(MIXED)
    默认采用基于语句的复制,一旦发现基于语句无法精确复制时,就会采用基于行的复制。

1.3 主从复制的作用

  1. 读写分离:我们可以通过主从复制的方式来同步数据,然后通过读写分离提高数据库并发处理能力。
  2. 数据备份通过主从复制将主库上的数据复制到了从库上,相当于是一种热备份机制,也就是在主库正常运行的情况下进行的备份不会影响到服务
  3. 具有高可用性数据备份实际上是一种冗余的机制,通过这种冗余的方式可以换取数据库的高可用性,也就是当服务器出现故障或宕机的情况下,可以切换到从服务器上,保证服务器的正常运行。

1.4 主从复制的工作过程

在这里插入图片描述

  1. Master服务器更新数据,并写入二进制日志
  2. Slave 开启IO线程向Master请求二进制日志事件/记录
  3. Master为每个IO线程开启dump线程向Slave发送二进制日志事件
  4. Slave保存二进制日志事件到中继日志
  5. Slave开启SQL线程读取中继日志中的二进制事件并解析成sql语句进行重发/逐一执行
注:
中继日志通常会位于 OS 缓存中,所以中继日志的开销很小。
复制过程有一个很重要的限制,即复制在 Slave上是串行化的,也就是说 Master上的并行更新操作不能在 Slave上并行操作。

1.5 实现MySQL主从复制

在这里插入图片描述

1.5.1 前置准备

#主服务器
192.168.67.100
systemctl disable --now firewalld
setenforce 0
#关闭防火墙和selinux策略#从服务器1
192.168.67.101
systemctl disable --now firewalld
setenforce 0
#关闭防火墙和selinux策略#从服务器2
192.168.67.102
systemctl disable --now firewalld
setenforce 0
#关闭防火墙和selinux策略#所有服务器默认已经编译安装mysql服务

1.5.2 主服务器mysql配置

ntpdate ntp.aliyun.com
#与阿里云进行时间同步vim /etc/my.cnf
#编辑mysql配置文件#在[mysqld]项添加
server-id=1
log-bin=mysql-bin						#添加,主服务器开启二进制日志
binlog_format=mixed#选配项
expire_logs_days=7						#设置二进制日志文件过期时间,默认值为0,表示logs不过期
max_binlog_size=500M					#设置二进制日志限制大小,如果超出给定值,日志就会发生滚动,默认值是1GB
skip_slave_start=1						#阻止从库崩溃后自动启动复制,崩溃后再自动复制可能会导致数据不一致的#如果对安全性有需求
#"双1设置",数据写入最安全
innodb_flush_logs_at_trx_commit=1		#redo log(事务日志)的刷盘策略,每次事务提交时MySQL都会把事务日志缓存区的数据写入日志文件中,并且刷新到磁盘中,该模式为系统默认
sync_binlog=1                           #在进行每1次事务提交(写入二进制日志)以后,Mysql将执行一次fsync的磁盘同步指令,将缓冲区数据刷新到磁盘

在这里插入图片描述

#添加完后
systemctl restart mysqld
#重启服务

在这里插入图片描述

#前往/usr/local/mysql/data/目录下查看二进制文件是否创建成功
cd /usr/local/mysql/data
ls

在这里插入图片描述

#进入数据库服务器
grant replication slave on *.* to 'aaa-slave'@'192.168.67.%' identified by '12323';
#授权做主从复制,指定所有库和所有表,指定网段192.168.67使用aaa-slave用户并设定密码
flush privileges;
#刷新权限
show master status;
#查看主服务器二进制文件与位置点偏移量

在这里插入图片描述

1.5.3 从服务器1 mysql配置

yum install ntp ntpdate -yservice ntpd start
#开启服务
/usr/sbin/ntpdate 192.168.67.100				#与主服务器进行时间同步#设置计划任务
crontab -e
*/30 * * * * /usr/sbin/ntpdate 192.168.67.100
#每半小时与主服务器进行一次时间同步

在这里插入图片描述

vim /etc/my.cnf
#编辑配置文件server-id = 2								#修改,注意id与Master的不同,两个Slave的id也要不同
relay-log=relay-log-bin						#开启中继日志,从主服务器上同步日志文件记录到本地
relay-log-index=relay-log-bin.index			#定义中继日志文件的位置和名称,一般和relay-log在同一目录#选配项
innodb_buffer_pool_size=2048M		#用于缓存数据和索引的内存大小,让更多数据读写内存中完成,减少磁盘操作,可设置为服务器总可用内存的 70-80%
sync_binlog=0						#MySQL不做任何强制性的磁盘刷新指令,而是依赖操作系统来刷新数据到磁盘
innodb_flush_log_at_trx_commit=2	#每次事务log buffer会写入log file,但一秒一次刷新到磁盘
log-slave-updates=0					#slave 从 master 复制的数据会写入二进制日志文件里,从库做为其他从库的主库时设置为 1
relay_log_recovery=1				#当 slave 从库宕机后,假如 relay-log 损坏了,导致一部分中继日志没有处理,则自动放弃所有未执行的 relay-log, 并且重新从 master 上获取日志,这样就保证了 relay-log 的完整性。默认情况下该功能是关闭的,将 relay_log_recovery 的值设置为 1 时, 可在 slave 从库上开启该功能,建议开启。

在这里插入图片描述

systemctl restart mysqld
#重启服务

在这里插入图片描述

#登录mysql
CHANGE master to master_host='192.168.67.100',master_user='aaa-slave',master_password='123123',master_log_file='mysql-bin.000002',master_log_pos=777;
#指定master主机地址、端口号、用户名、密码、日志文件、位置点偏移量start slave;
#启动同步,如有报错执行 reset slave;
show slave status\G					#查看 Slave 状态
//确保 IO 和 SQL 线程都是 Yes,代表同步正常。

在这里插入图片描述

1.5.4 从服务器2 mysql配置

yum install ntp ntpdate -yservice ntpd start
#开启服务
/usr/sbin/ntpdate 192.168.67.100				#与主服务器进行时间同步#设置计划任务
crontab -e
*/30 * * * * /usr/sbin/ntpdate 192.168.67.100
#每半小时与主服务器进行一次时间同步

在这里插入图片描述

vi /etc/my.cnf
#编辑配置文件#添加
server-id = 3
relay-log=relay-log-bin
relay-log-index=relay-log-bin.index	

在这里插入图片描述

systemctl restart mysqld
#重启服务

在这里插入图片描述

#登录mysql
CHANGE master to master_host='192.168.67.100',master_user='aaa-slave',master_password='123123',master_log_file='mysql-bin.000002',master_log_pos=777;
#指定master主机地址、端口号、用户名、密码、日志文件、位置点偏移量start slave;
#启动同步,如有报错执行 reset slave;
show slave status\G					#查看 Slave 状态
//确保 IO 和 SQL 线程都是 Yes,代表同步正常。

在这里插入图片描述

#一般 Slave_IO_Running: No 的可能性:
1、网络不通
2、my.cnf配置有问题
3、密码、file文件名、pos偏移量不对
4、防火墙没有关闭

1.6 MySQL主从复制延时问题的原因和解决办法

1.6.1 故障现象

MySQL主从复制延时问题的故障现象通常表现为主库上的数据变更在从库上出现延迟。
这可能导致从库上的数据与主库不同步,并可能对应用程序或业务产生一些问题。

一些常见的故障现象包括:

从库数据延迟:主库上的数据变更在从库上出现延迟,通常可以通过查看从库的 Seconds_Behind_Master 参数来确定延迟的时间。

延迟逐渐增加:从库上的延迟可能会逐渐增加,从几秒钟到几分钟甚至更长。

复制停止:复制进程可能会在某些情况下停止,导致复制完全中断。

数据丢失:如果出现严重的复制延迟或复制停止,可能会导致从库上的数据丢失。在复制延迟问题得到解决之前,从库上的数据可能无法与主库保持同步。

1.6.2 原因

  1. master服务器高并发,形成大量事务;
  2. 网络延迟;
  3. 主从硬件设备导致(cpu主频、内存io、硬盘io);
  4. 是同步复制、而不是异步复制;

1.6.3 解决方案

  • 从库优化Mysql参数;
  • 比如增大innodb_buffer_pool_size,让更多操作在Mysql内存中完成,减少磁盘操作。
  • 从库使用高性能主机;
  • 包括cpu强悍、内存加大。避免使用虚拟云主机,使用物理主机,这样提升了i/o方面性。
  • 从库使用SSD磁盘;
  • 网络优化,避免跨机房实现同步。

1.5.5 测试

#前往主服务器
create database scj;
#创建新库create table scj.scj1 (id int, name varchar(10), age int, sex char(1));
#创建新表#添加数据
insert into scj.scj1 values (1, '张三', 20, '男');
insert into scj.scj1 values (2, '李四', 22, '男');
insert into scj.scj1 values (3, '赵四', 21, '男');
insert into scj.scj1 values (4, '尼古拉斯', 24, '男');

在这里插入图片描述

#前往从服务器查看#从服务器1

在这里插入图片描述

#从服务器2

在这里插入图片描述

1.6 主从复制的3种同步模式

1.6.1 异步复制(Asynchronous replication)

MySQL默认的复制即是异步的,主库在执行完客户端提交的事务后会立即将结果返给客户端,并不关心从库是否已经接收并处理
这样就会有一个问题,主如果crash掉了,此时主上已经提交的事务可能并没有传到从上,如果此时,强行将从提升为主,可能导致新主上的数据不完整。

1.6.2 全同步复制(Fully synchronous replication)

指当主库执行完一个事务,所有的从库都执行了该事务才返回给客户端。
因为需要等待所有从库执行完该事务才能返回,所以全同步复制的性能必然会收到严重的影响。

1.6.3 半同步复制(Semisynchronous replication)

介于异步复制和全同步复制之间,主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收到并写到relay log中才返回给客户端。
相对于异步复制,半同步复制提高了数据的安全性,同时它也造成了一定程度的延迟,这个延迟最少是一个TCP/IP往返的时间
所以,半同步复制最好在低延时的网络中使用

1.7 半同步复制

1.7.1 前置准备

主:192.168.67.100
从:192.168.67.101

1.7.2 配置主服务器

vim /etc/my.cnf
#编辑配置文件
#在 [mysqld] 区域添加下面内容plugin-load=rpl_semi_sync_master=semisync_master.so			#加载mysql半同步复制的插件
rpl_semi_sync_master_enabled=ON								#或者设置为"1",即开启半同步复制功能
rpl-semi-sync-master-timeout=1000							#超时时间为1000ms,即1s

在这里插入图片描述

systemctl restart mysqld
#重启服务

在这里插入图片描述

1.7.3 配置从服务器

vim /etc/my.cnf	plugin-load=rpl_semi_sync_slave=semisync_slave.so
rpl_semi_sync_slave_enabled=ON

在这里插入图片描述

systemctl restart mysqld
#重启服务

在这里插入图片描述

1.7.4 测试

#前往主服务器
#进入mysqlshow status like 'Rpl_semi_sync_master_status';
#查看是否开启半同步复制
show variables like 'rpl_semi_sync_master_timeout';
#查看超时时间

在这里插入图片描述

#前往从服务器开启mysql
show status like 'Rpl_semi_sync_slave_status';

在这里插入图片描述

STOP SLAVE IO_THREAD;
START SLAVE IO_THREAD;
#重启io进程

在这里插入图片描述

#在主库查询半同步状态
show status like '%Rpl_semi%';	

在这里插入图片描述

#参数说明:
Rpl_semi_sync_master_clients              		#半同步复制客户端的个数
Rpl_semi_sync_master_net_avg_wait_time    		#平均等待时间(默认毫秒)
Rpl_semi_sync_master_net_wait_time        		#总共等待时间
Rpl_semi_sync_master_net_waits            		#等待次数
Rpl_semi_sync_master_no_times             		#关闭半同步复制的次数
Rpl_semi_sync_master_no_tx                		#表示没有成功接收slave提交的次数
Rpl_semi_sync_master_status               		#表示当前是异步模式还是半同步模式,on为半同步
Rpl_semi_sync_master_timefunc_failures    		#调用时间函数失败的次数
Rpl_semi_sync_master_tx_avg_wait_time     		#事物的平均传输时间
Rpl_semi_sync_master_tx_wait_time         		#事物的总共传输时间
Rpl_semi_sync_master_tx_waits             		#事物等待次数
Rpl_semi_sync_master_wait_pos_backtraverse		#可以理解为"后来的先到了,而先来的还没有到的次数"
Rpl_semi_sync_master_wait_sessions        		#当前有多少个session因为slave的回复而造成等待
Rpl_semi_sync_master_yes_tx               		#成功接受到slave事物回复的次数

1.7.5 什么情况下半同步和异步会互相转换

当半同步复制发生超时(由rpl_semi_sync_master_timeout参数控制,默认为10000ms,即10s),会暂时关闭半同步复制,转而使用异步复制,也就是会自动降为异步工作。

当 master dump 线程发送完一个事务的所有事件之后,如果在rpl_semi_sync_master_timeout 内,收到了从库的响应, 则主从又重新恢复为半同步复制

注:
1) 在一主多从的架构中,如果要开启半同步复制,并不要求所有的从都是半同步复制。
2) MySQL 5.7极大的提升了半同步复制的性能。
5.6 版本的半同步复制,dump thread 承担了两份不同且又十分频繁的任务:传送binlog 给 slave ,还需要等待 slave 反馈信息,而且这两个任务是串行的,dump thread 必须等待 slave 返回之后才会传送下一个 events 事务。dump thread 已然成为整个半同步提高性能的瓶颈。在高并发业务场景下,这样的机制会影响数据库整体的系统吞吐量(TPS)5.7 版本的半同步复制中,独立出一个 ack collector thread ,专门用于接收 slave 的反馈信息。这样 master 上有两个线程独立工作,可以同时发送 binlog 到 slave ,和接收 slave 的反馈。

2. MySQL读写分离

2.1 读写分离原理

是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作
数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。

2.2 读写分离的使用场景

数据库不一定要读写分离,如果程序使用数据库较多时,而更新少,查询多的情况下会考虑使用
利用数据库主从同步,再通过读写分离可以分担数据库压力,提高性能。

2.3 主从复制和读写分离的关系

在实际的生产环境中,对数据库的读和写都在同一个数据库服务器中,是不能满足实际需求的。

无论是在安全性、高可用性还是高并发等各个方面都是完全不能满足实际需求的。

因此,通过主从复制的方式来同步数据,再通过读写分离来提升数据库的并发负载能力。有点类似于rsync,但是不同的是rsync是对磁盘文件做备份,而mysql主从复制是对数据库中的数据、语句做备份。

2.4 常见的读写分离类型

2.4.1 基于程序代码内部实现

在代码中根据 select、insert 进行路由分类,这类方法也是目前生产环境应用最广泛的。

优点是性能较好,因为在程序代码中实现,不需要增加额外的设备为硬件开支;
缺点是需要开发人员来实现,运维人员无从下手。

但是并不是所有的应用都适合在程序代码中实现读写分离,像一些大型复杂的Java应用,如果在程序代码中实现读写分离对代码改动就较大。

2.4.2 基于中间代理层实现

代理一般位于客户端和服务器之间,代理服务器接到客户端请求后通过判断后转发到后端数据库,有以下代表性程序。

  • MySQL-Proxy:MySQL-Proxy 为 MySQL 开源项目,通过其自带的 lua 脚本进行SQL 判断。
  • Atlas:是由奇虎360的Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。
  • Amoeba:由陈思儒开发,作者曾就职于阿里巴巴。该程序由Java语言进行开发,阿里巴巴将其用于生产环境。但是它不支持事务和存储过程。
  • Mycat:是一款流行的基于Java语言编写的数据库中间件,是一个实现了MySql协议的服务器,其核心功能是分库分表。配合数据库的主从模式还可以实现读写分离。

2.5 实现读写分离

在这里插入图片描述

2.5.1 前置准备

#主服务器
192.168.67.100#从服务器1
192.168.67.101
#从服务器1
192.168.67.102#amobeba
192.168.67.103#客户端
192.168.67.104

2.5.2 配置amoeba

systemctl disable --now firewalld
setenforce 0vim /etc/selinux/config

在这里插入图片描述

cd /opt#所需安装包
amoeba-mysql-binary-2.2.0.tar.gz  
jdk-6u14-linux-x64.bin chmod +x jdk-6u14-linux-x64.bin
#给予可执行权限./jdk-6u14-linux-x64.bin
#直接执行#ctrl C选择yes

在这里插入图片描述

mv jdk1.6.0_14/ /usr/local/jdk1.6
#移动jdk主目录到/usr/local下#添加环境变量
cd /etc/profile.d
vi java.shexport JAVA_HOME=/usr/local/jdk1.6                     #java家目录
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib   #编译路径
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH    #设置java环境变量
export AMOEBA_HOME=/usr/local/amoeba                   #设置amobeba家目录 
export PATH=$PATH:$AMOEBA_HOME/bin                     #设置amobeba环境变量source /etc/profile.d/java.sh
java -version
#查看当前脚本

在这里插入图片描述

mkdir amoeba
#创建amobeba工作目录tar zxvf /opt/amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/
#解压缩软件包

在这里插入图片描述

cd /usr/local/amoeba/bin
#前往启动文件处./amoeba
#以当前目录启动

在这里插入图片描述

#在主从服务器同时操作grant all on *.* to amoeba@'192.168.67.%' identified by '123123';
#在Master、Slave1、Slave2 的mysql上开放权限给 Amoeba 访问

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#前往amoeba
cd /usr/local/amoeba/conf
#前往配置文件处
cp amoeba.xml amoeba.xml.bak
#备份xml文件vim amoeba.xml									
#修改amoeba配置文件

在这里插入图片描述
在这里插入图片描述

cp dbServers.xml dbServers.xml.bak
#拷贝数据库配置文件vi dbServers.xml
#修改数据库配置文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

/usr/local/amoeba/bin/amoeba start&					
#启动Amoeba软件,在后台执行ss -natp |grep java
#查看是否启动成功

在这里插入图片描述

2.5.3 测试读写分离

#该步骤沿用主从复制配置
#前往客户端
yum install -y mariadb-server mariadb
#安装一个简单配置的mysql数据库
systemctl start mariadb.service
#开启服务mysql -uamoeba -padmin123 -h 192.168.67.103 -P8066
#登录原先设置的账户

在这里插入图片描述

show databases;select * from scj.scj1;
#查看库和表数据内容是否同步

在这里插入图片描述

#在表中添加数据查看同步情况
insert into scj.scj1 values (5, 'sakula酱', 20, '女');

在这里插入图片描述

#前往主服务器、从服务器1、从服务器2查看
#进入数据库
select * from scj.scj1;
#查看表数据

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#同步没有问题
#证明连接amoeba可以在三台服务器中进行写入操作
#需要证明连接amoeba执行写入操作是写入哪一台服务器的#前往从服务器1-2关掉同步
stop slave;

在这里插入图片描述

#现在前往客户端添加数据
insert into scj.scj1 values (6, '日川冈板', 28, '男');

在这里插入图片描述

#验证能否实现读的负载均衡
#在从服务器1添加数据
insert into scj.scj1 values (7, '强者', 23, '男');#在从服务器2添加数据
insert into scj.scj1 values (8, '弱者', 20, '男');

在这里插入图片描述

#前往客户端查看
#进入数据库
select * from scj.scj1

在这里插入图片描述

相关文章:

MySQL详细案例 1:MySQL主从复制与读写分离

文章目录 1. MySQL主从复制1.1 使用场景1.2 MySQL的复制类型1.3 主从复制的作用1.4 主从复制的工作过程1.5 实现MySQL主从复制1.5.1 前置准备1.5.2 主服务器mysql配置1.5.3 从服务器1 mysql配置1.5.4 从服务器2 mysql配置 1.6 MySQL主从复制延时问题的原因和解决办法1.6.1 故障…...

Kafka 常见问题

文章目录 kafka 如何确保消息的可靠性传输Kafka 高性能的体现利用Partition实现并行处理利用PageCache 如何提高 Kafka 性能调整内核参数来优化IO性能减少网络开销批处理数据压缩降低网络负载高效的序列化方式 kafka 如何确保消息的可靠性传输 消费端弄丢了数据 唯一可能导致…...

如何去开展软件测试工作

1. 软件测试 在一般的项目中,一开始均为手动测试,由于自动化测试前期投入较大,一般要软件项目达到一定的规模,更新频次和质量均有一定要求时才会上自动化测试或软件测试。 1.1. 项目中每个成员的测试职责 软件测试从来不是某一…...

详解如何在python中实现简单的app自动化框架

一、app自动化环境搭建 1、安装jdk及配置jdk的环境变量 app底层是c语言,应用层是java,所以需要jdk 2、安装SDK,配置android SDK环境 3、安装模拟器 4、下载安装Appium工具 01、appium客户端 appium destop 服务器 02、命令行安装&#…...

【TCP】三次握手 与 四次挥手 详解

三次握手 与 四次挥手 1. 三次握手2. 四次挥手三次握手和四次挥手的区别 在正常情况下,TCP 要经过三次握手建立连接,四次挥手断开连接 1. 三次握手 服务端状态转化: [CLOSED -> LISTEN] 服务器端调用 listen 后进入 LISTEN 状态&#xff…...

正则表达式新解

文章目录 是什么?正则用法匹配单个字符匹配一组字符其他元字符核心函数 贪婪匹配和非贪婪匹配正则练习 是什么? 正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊…...

MissionPlanner编译过程

环境 windows 10 mission planner 1.3.80 visual studio 2022 git 2.22.0 下载源码 (已配置git和ssh) 从github上克隆源码 git clone gitgithub.com:ArduPilot/MissionPlanner.git进入根目录 cd MissionPlanner在根目录下的ExtLibs文件下是链接的其它github源码&#xff0…...

SpringBoot 员工管理---通用模板 ---苍穹外卖day2

感谢点击 希望你有所收获! 目录 1.新增员工 需求分析:根据页面原型进行业务分析 接口设计 数据库设计 代码开发 功能测试 如何在接口文档中统一添加JWT令牌 ​ 获取当前登录员工的ID 2.员工分页查询 需求分析 代码开发 如何将日期格式化 ​3.启用禁用员工 1.新…...

可信执行环境(Tee)入门综述

SoK: Hardware-supported Trusted Execution Environments [ArXiv22] 摘要引言贡献 范围系统和威胁模型系统模型威胁模型共存飞地对手无特权软件对手系统软件对手启动对手外围对手结构对手侵入性对手 关于侧信道攻击的一点注记 VERIFIABLE LAUNCH信任根(RTM&#xf…...

Java浮点运算为什么不精确

有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top 首发博客地址[1] 面试题手册[2] 系列文章地址[3] 1. 什么是 Java 浮点运算? 在 Java 中,浮点运算指的是对浮点数进行加减乘除等基本运算…...

linux使用操作[1]

文章目录 版权声明快捷键ctrl c 强制停止ctrl d 退出、登出history命令光标移动快捷键清屏快捷键 软件安装命令常见linux系统包管理器yum命令apt命令 systemctl命令软连接日期&时区修改linux时区ntp程序 IP地址&主机名ip&主机名域名解析win配置主机名映射虚拟机…...

权限提升Linux篇

提权工具 https://github.com/liamg/traitor https://github.com/AlessandroZ/BeRoot https://github.com/rebootuser/LinEnum https://github.com/mzet-/linux-exploit-suggester https://github.com/sleventyeleven/linuxprivchecker https://github.com/jondonas/linux…...

影刀自动化采集底层逻辑

hello,大家好&#xff0c;这里是【玩数据的诡途】 接上回 <我的影刀故事> 今天给大家介绍一下整个采集的底层逻辑&#xff0c;包括业务流程自动化也是基于这一套基础逻辑进行展开的&#xff0c;顺便带大家熟悉一下影刀&#xff0c;既然叫影刀系列了&#xff0c;那后续一些…...

swiper使用

介绍 Swiper&#xff08;swiper master&#xff09;是一个第三方的库&#xff0c;可以用来实现移动端、pc端的滑动操作。&#xff0c;swiper应用广泛&#xff0c;使用频率仅次于jquery, 轮播图类排名第一&#xff0c;是网页设计师必备技能&#xff0c;众多耳熟能详的品牌在使用…...

基于遗传算法解决的多仓库多旅行推销员问题(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

微信小程序 工具使用(HBuilderX)

微信小程序 工具使用:HBuilderX 一 HBuilderX 的下载二 工具的配置2.1 工具 --> 设置 --> 运行配置2.1.1 微信开发者工具路径2.1.2 node 运行配置 2.2 插件 工具 --> 插件安装2.2.1 下载插件 三 微信小程序端四 同步运行五 BUG5.1 nodemon在终端无法识别 一 HBuilderX…...

设计模式:观察者模式(C++实现)

观察者模式&#xff08;Observer Pattern&#xff09;是一种设计模式&#xff0c;用于定义对象之间的一对多依赖关系&#xff0c;当一个对象&#xff08;称为主题或可观察者&#xff09;的状态发生变化时&#xff0c;它的所有依赖对象&#xff08;称为观察者&#xff09;都会收…...

【前端打怪升级日志之微前端框架篇】微前端qiankun框架子应用间跳转方法

参考链接qiankun官网&#xff1a;微应用之间如何跳转&#xff1f; 1.主应用、子应用路由都是hash模式 主应用根据 hash 来判断微应用&#xff0c;无需考虑该问题 2.主应用根据path判断子应用 方法实现适用条件参数传递存在问题a标签跳转<a href"/toA"></…...

C语言中的typedef struct用法

在学习数据结构的时候&#xff0c;我经常遇到typedef struct&#xff0c;刚开始感觉很别扭&#xff0c;查阅资料之后才真真理解了。 先从结构体说起。 1、结构体用法 struct Student{int age;char s;}如果要定义一个该结构体变量&#xff0c;就需要:struct Student st1; 有没…...

司徒理财:9.27黄金原油日内多空走势行情操作建议

黄金走势分析&#xff1a;      黄金昨日抵达了此前一直强调的日线布林下轨的1903位置&#xff0c;甚至更低&#xff01;昨天的空单也是直接获利收割了&#xff01;现在如果是要继续做空&#xff0c;下方是有日线支撑的&#xff0c;甚至周线的支撑也不远&#xff0c;在1890…...

C++设计模式(Design Patterns)

设计模式主要原则 单一职责原则&#xff08;Single Responsibility Principle&#xff09; 实现类要职责单一 里氏替换原则&#xff08;Liskov Substitution Principle&#xff09; 不要破坏继承关系 依赖倒置原则&#xff08;Dependence Inversion Principle&#xff09; …...

vue点击按钮收缩菜单

问题描述 VUE菜单有一个BUG&#xff0c;当我们点击其它按钮或者首页的时候&#xff0c;已经展示的一级菜单是不会自动收缩的。这个问题也导致很多开发者把一级菜单都换成了二级菜单。 错误展示 错误的效果请看下图。 解决方法 1、寻找菜单文件 因为我使用的是ruoyi的前端框…...

Vue 防止忘记的命令

创建新项目 npm init vuelatest cd <项目名> npm install npm run dev 运行项目 yarn yarn serve 这里如果我用npm install 或者npm run serve会报错&#xff0c;但是新建项目用npm就不会&#xff0c;有大佬知道为什么吗...

APACHE NIFI学习之—RouteOnContent

RouteOnContent 描述: 通过正则表达式匹配输入数据流的内容,然后将输入数据流的副本路由到正则表达式相匹配的输出数据流。 正则表达式作为用户自定义的属性添加,并以该属性名称为输出连线,其值为正则表达式所匹配数据流内容。 当用户定义的属性支持属性表达式语言时,其结…...

【C语言】【结构体的内存对齐】计算结构体内存大小,有图解

计算结构体内存大小&#xff0c;需要用到结构体内存对齐的知识 来段代码看看什么是结构体对齐&#xff1a; #include<stdio.h> struct S1 {char a;char b;int num; }; struct S2 {char a;int num;char b; }; int main() {printf("%zd\n", sizeof(struct S1))…...

Intel 700 800系网卡升级支持WOL UEFI PXE方法

Intel 700 800系网卡默认的NVM版本是不支持UEFI的&#xff0c;升级NVM也不能解决&#xff0c;需要将UEFI driver 包到NVM里。操作步骤如下&#xff1a; 1. 下载Preboot软件包&#xff0c;有Windows和Linux版本&#xff0c;本次使用Linux版本做示例。 Intel Ethernet Connecti…...

vue3 - 使用 xlsx 库将数据导出到 Excel 文件

GitHub Demo 地址 在线预览 xlsx是由SheetJS开发的一个处理excel文件的JavaScript库。它可以读取、编写和操作 Excel 文件 安装xlsx npm install xlsx --save实现一个通过的数据导出工具类 import * as XLSX from xlsx/*** description: 导出excel* param {any} dataList* p…...

机器学习,深度学习

一 、Numpy 1.1 安装numpy 2.2 Numpy操作数组 jupyter扩展插件&#xff08;用于显示目录&#xff09; 1、pip install jupyter_contrib_nbextensions -i https://pypi.tuna.tsinghua.edu.cn/simple 2、pip install jupyter_nbextensions_configurator -i https://pypi.tuna.t…...

【性能测试】jmeter连接数据库jdbc

一、下载第三方工具包驱动数据库   1. 因为JMeter本身没有提供链接数据库的功能&#xff0c;所以我们需要借助第三方的工具包来实现。 &#xff08;有这个jar包之后&#xff0c;jmeter可以发起jdbc请求&#xff0c;没有这个jar包&#xff0c;也有jdbc取样器&#xff0c;但不能…...

蓝桥等考Python组别二级007

第一部分:选择题 1、Python L2 (15分) 下面哪个不是Python的基本数据类型?( ) 布尔型整数型指针型字符串正确答案:C 2、Python L2...