MySQL主从复制与读写分离

news2024/10/6 6:48:17

目录

前言

一、MySQL主从复制的理解

1、MySQL的复制类型

2、MySQL主从复制的工作流程

3、MySQL架构(一主多备)

3.1 一主多备 

3.2 M-S-S

3.3 M-M/双主互备 (互为主从)

3.4 M-M-M

4、MySQL主从复制延迟原因

5、MySQL主从复制延迟的优化

二、搭建MySQL主从复制

1、配置主从服务器时间同步

1.1 主服务器时间同步配置

1.2 从服务器时间同步配置

2、mysql配置文件配置

2.1 主服务器配置

2.2 从服务器配置

3、验证

三、对于读写分离的三个问题

1、什么是读写分离?

2、为什么要读写分离?

3、什么时候要读写分离?

4、主从复制与读写分离

5、mysql支持的复制类型

6、主从复制的的工作过程

7、MySQL读写分离原理

8、目前较为常见的MySQL读写分离

(1) 基于程序代码内部实现

(2) 居于中间代理层实现

四、使用amoeba 搭建mysql读写分离

1、安装JAVA环境

2、安装amoeba软件

3、配置读写分离

3.1  主从mysql 开发权限给amoeba

3.2 amoeba 服务器修改/amoeba配置文件

3、修改数据库配置文件

4、启动amoeba,并进行测试

4.1 启动amoeba

4.2 客户端连接测试 

五、总结

1、读写分离使用的是什么方式?

2、如何查看主从同步状态是否成功

3、如果I/O不是yes呢,你如何排查?

4、show slave status能看到哪些消息(比较重要)

5、主从复制慢(延迟)会有哪些可能?怎么解决?

6、若主从版本不一致


前言

  • 在企业应用中,成熟的业务通常数据量都比较大
  • 单台MySQL在安全性、高可用性和高并发方面都无法满足实际的需求
  • 配置多台主从数据库服务器以实现读写分离

横向扩展:集群化,压力分摊

一、MySQL主从复制的理解

1、MySQL的复制类型

  • statement:基于语句的复制。在主服务器上执行sql语句,在从服务器上执行同样的语句,mysql默认采用基于语句的复制,执行效率高
  • row: 基于行的复制。把改变的内容复制过去,而不是把命令在从服务器上执行一遍
  • mixed:混合类型的复制。默认采用基于语句的复制,一旦发现基于语句无法精确复制时,就会采用基于行的复制

数据一般放在二进制日志文件中

2、MySQL主从复制的工作流程

  1. master 节点将数据的改变记录成二进制日志(bin log),当master上的数据发生改变时,则将其改变写入二进制日志中。
  2. slave节点会在一定时间间隔内对master的二进制日志进行探测其是否发生改变,如果发生改变,则开始一个I/O线程请求
  3. 同时master节点为每个I/O 线程启动一个dump线程,用于向其发送二进制事件,并保存值slave节点本地的中继日志(relay log)中,slave节点将启动sql线程从中继日志中读取二进制日志,在本地重放,即解析成sql语句逐一执行,使得其数据和master节点的保持一致,最后,I/O线程和sql线程进入睡眠状态,等待下一次被唤醒。

3、MySQL架构(一主多备)

3.1 一主多备 

         一般用来做读写分离的master 写 其他 salve 读这种架构最大问I/O 压力集在master 上 多台同步影响IO

3.2 M-S-S

中继:分担master压力,slave中继需要开启bin-log并配置log-savle-update

总结:slave中继可以使用black-hole存储引擎,不会把数据存储到磁盘,值记录在二进制日志

3.3 M-M/双主互备 (互为主从)

(很多人误以为这样可以做到mysql负载均衡,实际没什么好处,每个服务器需要同样的同步更新,破坏了事务隔离性和数据一致性)

3.4 M-M-M

监控三台机器互相做对方master

天生的缺陷:复制延迟,salve上同步要慢于master,如果大并发的情况那么延迟更严重mysql5.6 已经自身可以实现fail over故障切换

4、MySQL主从复制延迟原因

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

5、MySQL主从复制延迟的优化

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

二、搭建MySQL主从复制

  • master:192.168.157.10 mysq5.7
  • slave 1:192.168.157.45 mysql5.7
  • slave 2:192.168.157.55 mysql5.7
  • 客户端:192.168.157.65 mysql
  • 关闭服务器的 firewalld和selinux设置

1、配置主从服务器时间同步

配置时间同步,可以使用chrony ,也可以使用ntp,但是两者只能使用其一

1.1 主服务器时间同步配置

yum -y install ntp
vim /etc/ntp.conf
#在文件末尾添加
server 127.127.157.0  #设置时间源为本地
fudge 127.127.157.0 stratum 8  #设置时间层级(15以内)

#启动ntpd服务
service ntpd start 
#查看udp123端口
netstat -naup | grep :123

1.2 从服务器时间同步配置

yum -y install ntp
 service  ntpd start 
 #进行时间同步,同步主服务器的时间
 /usr/sbin/ntpdate  192.168.23.10
 
 #配置周期性同步时间
 crontab -e 
 */30 * * * * /usr/sbin/ntpdate 192.168.23.103

2、mysql配置文件配置

2.1 主服务器配置

 systemctl stop firewalld
 setenforce 0


vim /etc/my.cnf
.....
server-id = 10          #配置server id,集群内mysql服务器server -id不可以重复
log-bin=mysql-bin        #主服务器开启二进制日志
binlog_format=mixed      #使用混合模式
log-slave-updates=true    #允许从服务器更新二进制日hi

#重启mysql服务
systemctl restart mysqld
#进入数据库
mysql -uroot -123456

#刷新二进制日志
flush logs;  

#创建主从复制授权用户
grant  replication slave on *.* to 'myslave'@'192.168.157.%'  identified by '123456';

#查看当前 二进制日志名file和偏移量position
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 |      154 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

2.2 从服务器配置

#关闭firewalld和selinux
systemctl stop firewalld
setenforce 0


vim /etc/my.cnf
....
#配置slave1的server id为45,slave 2 的server-id为55
server-id= 45 (server-id=13 #slave2)

relay-log=relay-log-bin                  #开启中继日志,从主服务器上同步日志文件记录到本地
relay-log-index=slave-relay-bin.index    #定义中继日志的路径
relay_log_recovery=1


#重启mysqld服务
systemctl restart mysqld

#进入数据库
mysql -uroot -123456

#配置同步
change master to
master_host='192.168.157.10',master_user='myslave',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=154;

change master to
	master_host='192.168.157.10',   #主服务器地址
	master_user='myslave',          #使用的用户
	master_password='123456',        #密码
	master_log_file='mysql-bin.000003',   #当前二进制日志名
	master_log_pos=154;                #二进制日志偏移量
	 
start slave;        #启动同步。如果报错,执行reset  slave,然后重新设置

#查看slave状态,Slave_IO_Running和Slave_SQL_Running 状态都是yes
#如果状态不对,则stop slave;停止同步,然后再使用change命令重新配置
show slave status \G   

3、验证

#在主服务器上进行增删改操作
#创建数据库test02
mysql> create database test02;
Query OK, 1 row affected (0.01 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| bank               |
| mysql              |
| performance_schema |
| sys                |
| test               |
| test02             |
+--------------------+



#从服务器上进行查看
#此时,从服务器上自动创建了数据库 test02
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test02             |
+--------------------+
5 rows in set (0.00 sec)

三、对于读写分离的三个问题

1、什么是读写分离?

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

2、为什么要读写分离?

因为数据库的"写”(写10000条数据可能要3分钟)操作是比较耗时的。
但是数据库的读”(读10000条数据可能只要5秒钟)。
所以读写分离,解决的是,数据库的写入,影响了查询的效率。

3、什么时候要读写分离?

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

4、主从复制与读写分离

        在实际的生产环境中,对数据库的读和了都在同个数据库服务器中,是不能满足实际需求的。无论是在安全性、高可用性还是高并发等各个方面都是完全不能满足实际需求的。因此,通过上从复制的方式来同步数据,再通过读写分离来提升数据车的并发负载能力。有点类似于rSVpC,但是不同的是rsync是对碰盘文件做备份,而mysql主从复制是对数据库中的数据、语句做备份。

5、mysql支持的复制类型

(1)STATEMENT:基于语句的复制。在服务器上执行sql语句,在从服务器上执行同样的语句,mysgl默认采用基于讲句的复制,执行效率高。
(2) ROW: 基于行的复制。把改变的内容复制过去,而不是把命令在从服务器上执行一遍。
(3)MIXED:混合类型的复制。默认采用基于语句的复制,一旦发现基于语句无法精确复制时,就会采用基于行的复制。

6、主从复制的的工作过程

(1)Master节点将数据的改变记录成一进制日志(bin log),当Master上的数据发生改变时,则将其改变写入一进制日志中。

(2) slave节点会在一定时间间隔内对Master的二进制日志进行探测其是否发生改变,如果发生改变,则开始一个I/O线程请求 Master的一进制事件。

(3)同时Master节点为每个I/O线程启动一个dump线程,用于向其发送二进制事件,并保存slave节点本地的中继日志(Relay log)中,Slave节点将启动SQL线程从中继日志中读取二进制日志,在本地重放,即解析成 5ql语句逐一执行,使得其数据和 aster节点的保持一致,最后I/0线程和SOL线程将进入睡眠状态,等待下一次被唤醒。

首先,客户端将数据写入到master主服务器的数据库的磁盘中,master节点会通知存储引擎,会提交数据的事务,同时会将数据以基于行,sql,混合三种模式保存在二进制日志中;

从它会开启I/o线程用来监听mysql中binary log二进制文件,一旦二进制数据有更新的内容时,则会响应master,i/o线程发送请求,dump thread会读取binary log中的二进制文件的更新的内容并发送给I/o线程;

从接到数据后会保存在relay log(中继日志)中,同时sql thread线程会读取中继日志,并更新到本地的mysql中,达到主从的效果;

7、MySQL读写分离原理

  • 只在主服务器上写,只在从服务器上读主数据库处理事务性查询,从数据库处理SELECT查询数据库复制用于将事务性查询的变更同步到集群中的从数据库
  • 读写分离方案
    • 基于程序代码内部实现
    • 基于中间代理层实现
      • MySQL-Proxy
      • Amoeba

8、目前较为常见的MySQL读写分离

(1) 基于程序代码内部实现

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

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

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

(2) 居于中间代理层实现

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

  • MySQL-Proxy。MySQL-Proxy 为 MySQL 开源项口,通过其自带的 lua 脚本进行SQL 判断。
  • Atlas。是山奇虎360的web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它是在mysql-proxy0.8.2版本的基础上,对其进行了优化,增加了一些新的功能特性。360内部使用atlas运行的mysq1业务,每大承载的读写请求数达儿十亿条。支持事物以及存储过程。
  • Amoeba。由陈思儒开发,作者曾就职于阿里巴巴。该程序Java诺言进行开发,阿里巴巴将其用于生产环境。但是它不支持事务和存储过程。
    • 由于使用MysQL Proxy 需要写大量的Lua脚本,这些Lua并不是现成的,而是需要自己去写。这对于并不熟悉MysQL Proxy内置变量和MysQL Protocol 的人来说是非常困难的。
    • Amoeba是一个非常容易使用、可移植性非常强的软件。因此它在生产环境中被广泛应用于数据库的代理层。

四、使用amoeba 搭建mysql读写分离

  • master:192.168.157.10 mysq5.7
  • slave 1:192.168.157.45 mysql5.7
  • slave 2:192.168.157.55 mysql5.7
  • 客户端:192.168.157.65 mysql
  • 关闭服务器的 firewalld和selinux设置

1、安装JAVA环境

cd /opt/
#将ameoba软软件和jdk软件上传到 /opt/目录中
ls amoeba-mysql-binary-2.2.0.tar.gz 
ls jdk-6u14-linux-x64.bin 

cp jdk-6u14-linux-x64.bin   /usr/local/
cd /usr/local/

chmod +x jdk-6u14-linux-x64.bin


./jdk-6u14-linux-x64.bin   
#一直按回车,直到出现"please enter “yes” or “no" ,然后输入yes并回车
#出现  Press Enter to continue 。..... ,按下回车


mv   /usr/local/jdk1.6.0_14/  /usr/local/jdk1.6

vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.6
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin/:$PATH:$HOME/bin
export AMOEBA_HOME=/usr/local/amoeba
export PATH=$PATH:$AMOEBA_HOME/bin


source  /etc/profile
java -version  #需要1.6版本

2、安装amoeba软件

mkdir /usr/local/amoeba
tar zxvf /opt/amoeba-mysql-binary-2.2.0.tar.gz  -C /usr/local/amoeba/

chmod -R 755 /usr/local/amoeba/

/usr/local/amoeba/bin/amoeba
# 显示amoeba start|stop 说明安装成功

3、配置读写分离

3.1  主从mysql 开发权限给amoeba

#及群里所有mysql服务器
mysql -uroot -123456
#创建amoeba的授权登录用户
grant all on *.* to  amoeba@'192.168.157.%' identified by '123456';

3.2 amoeba 服务器修改/amoeba配置文件

cd /usr/local/amoeba/conf/
cp amoeba.xml{,.bak}

#修改amoeba配置文件,此为xml文件,使用<!-- --> 注释
vim amoeba.xml  

<!-- 配置amoeba服务器登录用户名和密码-->
30// <property name="user">amoeba</property>
32//  <property name="password">abc123</property>

<!-- defaultpool,默认池,定义写的数据库即maste。 master为自定义名 -->
115// <property name="defaultPool">master</property>

<!--打开原117和  120行的注释,配置 写为master,读为slave1和slave2-->
117// <property name="writePool">master</property>
118//  <property name="readPool">slaves</property>

3、修改数据库配置文件

cp dbServers.xml{,.bak}
#修改数据库配置文件
vim dbServers.xml

<!--注释23行。注释默认进入test库,以防mysql中没有test库报错-->
23// <!--<property name="schema">test</property>-->
<!--mysql的授权用户为amoeba -->
26// <property name="user">amoeba</property>

<!-- 删除或者取消28和30行的注释,使得29行的类容生效.此行配置mysql授权用户的密码-->
28// <!--  mysql password -->
29// <property name="password">abc123</property>
30// 

<!--设置主服务器名为master-->
45// <dbServer name="master"  parent="abstractServer">
<!-- 设置主服务器的ip地址-->0
48// <property name="ipAddress">192.168.157.10</property>

<!--设置从服务器名为slave1 -->
52// <dbServer name="slave1"  parent="abstractServer">
<!-- 设置slave1 ip地址 -->
55// <property name="ipAddress">192.168.157.45</property>

  
<!-- 复制slave1的配置(6行),修改为slave2 配置-->
58// <dbServer name="slave2"  parent="abstractServer">
59//     <factoryConfig>
60//         <!-- mysql ip -->
61//         <property name="ipAddress">192.168.157.55</property>
62//      </factoryConfig>
63// </dbServer>

<!-- 定义slaves(amoeba的配置文件amoeba.xml的 readpol部分定义的名字是slaves)-->
66// <dbServer name="slaves" virtual="true"> 
<!--将slave1,slave2加入 -->
72//<property name="poolNames">slave1,slave2</property>

4、启动amoeba,并进行测试

4.1 启动amoeba

#启动amoeba服务,信息提示框可以使用ctrl +c取消。或者重开一个终端
/usr/local/amoeba/bin/amoeba start &
#amoeba使用tcp的8066端口
netstat -natp | grep java

4.2 客户端连接测试 

主服务器:

在主从中写入数据

五、总结

1、读写分离使用的是什么方式?

  • amoeba、代理、mycat、sql_proxy
  • 通过amoeba代理服务器,实现只在主服务器上写,只在从服务器上读;
  • 主数据库处理事务性查询,从数据库处理select 查询;
  • 数据库复制被用来把事务查询导致的变更同步的集群中的从数据库

2、如何查看主从同步状态是否成功

  • 在从服务器上内输入  show slave status\G  查看主从信息看里面有IO线程的状态信息,还有master服务器的IP地址、端口事务开始号。
  • 当slave_IO_Running和Slave_SQL_Running都是YES时,表示主从同步状态成功

3、如果I/O不是yes呢,你如何排查?

  • 首先排查网络问题,使用ping 命令查看从服务器是否能与主服务器通信
  • 再查看防火墙和核心防护是否关闭(增强功能)
  • 接着查看从服务slave是否开启
  • 两个从服务器的server-id 是否相同导致只能连接一台
  • master_log_file master_log_pos的值跟master值是否一致

4、show slave status能看到哪些消息(比较重要)

  • I/O线程的状态信息
  • master服务器的IP地址、端口、事务开始的位置
  • 最近一次的错误信息和错误位置
  • 最近一次的I/O报错信息和ID
  • 最近一次的SQL报错信息和ID

5、主从复制慢(延迟)会有哪些可能?怎么解决?

  • 主服务器的负载过大,被多个睡眠或僵尸线程占用
  • 导致系统负载过大,从库硬件比主库差,导致复制延迟
  • 主从复制单线程,如果主库写作并发太大,来不及传送到从库,就会到导致延迟
  • 慢sql语句过多
  • 网络延迟

6、若主从版本不一致

  • 从的版本一定要高于主,保证可以向下兼容
  • 因为若主的版本更新,低版本的从无法兼容

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

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

相关文章

FL Studio2023最新版编曲音乐制作数字音频软件

FL Studio2023即“Fruity Loops Studio”&#xff0c;也就是众所熟知的水果软件&#xff0c; 全能音乐制作环境或数字音频工作站&#xff08;DAW&#xff09;。FL Studio可以编曲、剪辑、录音、混音&#xff0c;让你的计算机成为全功能录音室。 FL Studio2023是一个完整的软件音…

学术分享 | 清华大学 康重庆:电力系统碳计量技术与应用(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5;​ &#x1f4cb;&#x1f4cb;&#x1f4cb;本文目录如下&#xff1a;⛳️⛳️⛳️ 目录 ​ 0 写在最前面 1 学术分享 | …

MATLB|改进遗传算法优化微电网调度(考虑环境)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑…

Redis 高可用之持久化

Redis 高可用之持久化Redis 高可用什么是高可用Redis的高可用技术Redis持久化持久化的功能Redis提供两种方式进行持久化&#xff1a;RDB持久化触发条件bgsave执行流程启动时加载AOF持久化&#xff08;支持秒级写入&#xff09;开启AOF执行流程启动时加载RDB和AOF的优缺点RDB持久…

CSC7261M

CSC7261M是一款内置高压MOS的高性能、多工作模式的PWM控制芯片&#xff0c;内置多种保护机制。当系统为空载和轻载时&#xff0c;芯片采用Burst和Green控制模式可有效地减少了空载和轻载时的损耗。当系统为中载和重载时&#xff0c;CSC7261M芯片采用CCM模式可有效提升电源系统的…

校招面试中常见的算法题整理【长文】

⭐️我叫恒心&#xff0c;一名喜欢书写博客的研究生在读生。 原创不易~转载麻烦注明出处&#xff0c;并告知作者&#xff0c;谢谢&#xff01;&#xff01;&#xff01; 这是一篇近期会不断更新的博客欧~~~ 有什么问题的小伙伴 欢迎留言提问欧。 文章目录前言一、链表问题1 合并…

Anaconda安装详细教程

一、Anaconda下载 &#xff08;1&#xff09;方式一&#xff1a;Anaconda官网 不推荐使用官网下载&#xff1a; &#xff08;1&#xff09;官网下载速度非常慢&#xff0c;需要使用国内源下载 &#xff08;2&#xff09;官网下载的是最新版本&#xff0c;可能使用时会出现意料…

基于java+springboot+mybatis+vue+mysql的地方废物回收机构管理系统

项目介绍 地方废物回收机构管理系统能够通过互联网得到广泛的、全面的宣传&#xff0c;让尽可能多的用户了解和熟知地方废物回收机构管理系统的便捷高效&#xff0c;不仅为用户提供了服务&#xff0c;而且也推广了自己&#xff0c;让更多的用户了解自己。对于地方废物回收机构…

【 SQLite3移植到ARM Linux教程】

SQLite3移植到ARM Linux教程1 下载 SQLite3源码2 复制并解压源码包3 配置编译选项4 编译5 去除调试信息6 复制文件7 运行测试sqlite3SQLite 是一款轻型的数据库&#xff0c;是遵守ACID的关联式数据库管理系统&#xff0c;它的设计目标是嵌入式的&#xff0c;而且目前已经在很多…

MyBatis如何处理表关联

实体类 学生表 添加对应对象 - 教师 private Teacher teacher; 2. Mapper添加对应结果集映射 collection 一对多 学科表 对 学生表 1. 实体类 学科 添加对应集合 – 学生 private List<Student> stuList; 2. Mapper添加对应结果集映射 使用ResultType实现结果多表映…

[附源码]Python计算机毕业设计Django云南美食管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

Redis配置、优化以及相命令

目录 一、关系数据库和非关系型数据库 1、关系型数据库 2、非关系型数据库 二、关系型数据库和非关系型数据库区别 1、数据存储方式不同 1.1 关系型数据 1.2 非关系型数据库 2、扩展方式不同 2.1 SQL数据库 2.2 NoSQL数据库 3、对事务性的支持不同 3.1 SQL数据库 …

全网最详细的HTTP协议学习笔记

目录 一、HTTP简介 相关词语 HTTP请求过程 二、HTTP详解 1.在TCP/IP协议中的位置 2.Request(请求消息) 3.Response(响应消息) 4.HTTP状态码 5.HTTP请求方法 6.其他 三、练习自测 四、总结 五、重点&#xff1a;配套学习资料和视频教学 一、HTTP简介 全称&#…

[附源码]Python计算机毕业设计大学生兼职管理系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

[附源码]Python计算机毕业设计宠物短期寄养平台Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

R语言无监督学习:PCA主成分分析可视化

总览 在监督学习中&#xff0c;我们通常可以访问n个 观测值的p个 特征 集 &#xff0c;并 在相同观测值上测得的 Y。 无监督学习是一组没有相关的变量 Y的方法。在这里&#xff0c;我们重点介绍两种技术… 主成分分析&#xff1a;用于数据可视化或在其他监督学习方法之…

面试官:你说说Springboot的启动过程吧(5.4万字分析启动过程)

文章目录前言一、Springboot是什么二、启动流程2.1 构建Spring Boot项目2.2 启动的日志2.3 启动流程分析说明2.3.1 第一部分&#xff1a;SpringApplication的构造函数A、webApplicationType&#xff08;web应用类型&#xff09;B、引导注册初始化器C、设置初始化器D、设置监听器…

[附源码]Python计算机毕业设计大学生二手物品交易网站Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

锁存器和触发器

大多数数字系统中,除了需要具有逻辑运算和算术运算功能的组合逻辑电路外,还需要具有存储功能的电路。组合电路与存储电路结合构成时序逻辑电路,简称时序电路。 本文将讨论实现存储功能的两种逻辑单元电路∶锁存器和触发器,着重讨论其工作原理与电路结构,以及所实现的不同逻…

手写js——继承

原型链继承 所谓 函数 也就是 函数 Father其本身&#xff0c;也叫作构造函数 &#xff0c;当一个函数被创建的同时&#xff0c;也会为其创建一个 prototype 属性&#xff0c;而这个属性&#xff0c;就是用来指向 函数原型&#xff0c;的我们可以把 prototype 理解为 Father的一…