MySQL 复制架构

news/2024/5/19 17:37:04/文章来源:https://blog.csdn.net/slxysyka/article/details/123484940

MySQL 复制架构

第一节 概述

1.1 数据拓展

  • 热备份:数据库在运行的过程中,对数据进行备份操作。相对的,还有冷备份,冷备份需要停机,然后对数据进行备份操作。
  • 多活:所谓的多活,就是让数据库机器节点会存在多个,避免单点情况的出现。
  • 故障切换:当一台数据库物理机出现异常状况时,可以自动的切换到其他物理机上。
  • 读写分离:当存在多台数据库物理机,将读写操作分别交给不同的机器完成。
  • 负载均衡:假设当存在多台数据库物理机接收读请求时,多个请求会均匀的分配到不同的机器上,避免大量请求压在某一台机器上。

1.2 常见架构

没有百分百的完美架构,只有适合的架构

理解mysql的分库分表,先了解mysql的架构设计,在mysql架构中,经常会使用到的就是读写分离,此设计理念的基础上常见架构有: 一主一从或多从、主主复制、级联复制、主主与级联复制结合。

一主一从或多从: 一个mysql数据库主节点,一个或者多个从节点.主节点与从节点进行数据同步

主主复制: 两个mysql主节点,主节点与主节点之间进行数据同步

级联复制: 类似一主多从架构,但是从节点分级同步

主主与级联复制结合: 双主节点同步,同时从节点分级同步

第二节 主从模式

1、主从简介

主从模式是使用的最多的mysql高可用架构。

存在一台master作为写机,一个或多个slave作为读机,实现读写分离。之所以这么设计是因为在实际的情况下,读的请求量一般是远远大于写请求。架构图如下

img

优点:

读与写的节点分离,数据写入master节点后,再由master节点将数据复制到slave节点上

缺点:

  • master是单点存在的,如果要对master进行停机维护,无法接收写请求
  • master需要将写入数据复制到各个slave节点,复制是有一定的时间延迟的,因此有可能出现查询数据不一致
  • 对master进行停机维护,需将某一个slave提升为新的master节点,选举规则需要进行自定义
  • 当slave被提升为新的master后,可能会造成新的master节点与旧master的数据不一致

1.3.2 主从搭建

在虚拟机中安装 docker

yum install -y docker

若遇到如下问题:

image-20210607104243205

#编辑yum的配置文件
vi /etc/yum/pluginconf.d/langpacks.conf
将第一行:enable=1改为enable=0#杀掉进程即可
kill -9 8683

查看docker版本

docker -v
#开启启动docker
systemctl enable docker
#查看运行状态
systemctl status docker
#启动
systemctl start docker
#停止
systemctl stop docker
#重启
systemctl restart docker

搜索mysql镜像

docker search mysql

下载mysql镜像

docker pull docker.io/mysql:5.7

安装mysql容器

#服务一
docker run --name mysqlm1 \
-p 10000:3306 \
--privileged=true \
-it \
-e MYSQL_ROOT_PASSWORD=123456 \
-e MYSQL_USER=user \
-e MYSQL_PASSWORD=pass \
-v /home/mysql/docker-data/m1/conf:/etc/mysql/conf.d \
-v /home/mysql/docker-data/m1/data/:/var/lib/mysql \
-v /home/mysql/docker-data/m1/logs/:/var/log/mysql \
-d mysql:5.7#服务二
docker run --name mysqls1 \
-p 20000:3306 \
--privileged=true \
-it \
-e MYSQL_ROOT_PASSWORD=123456 \
-e MYSQL_USER=user \
-e MYSQL_PASSWORD=pass \
-v /home/mysql/docker-data/s1/conf:/etc/mysql/conf.d \
-v /home/mysql/docker-data/s1/data/:/var/lib/mysql \
-v /home/mysql/docker-data/s1/logs/:/var/log/mysql \
-d mysql:5.7

参数说明:

-p 参数格式:宿主机端口号:容器内程序的端口号

-e MYSQL_ROOT_PASSWORD 给 MySQL 的 root 用户设置密码

-v 参数指定宿主机内的目录,用来给 docker 容器设定配置文件等等

images

在两台机器上新增配置文件,路径为/home/mysql/docker-data/m1/conf/my.cnf

# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2Mcharacter_set_server=utf8
init_connect='SET NAMES utf8'# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0lower_case_table_names=1
#指定主机号,不允许出现重复
server-id=134
#开启binlog
log-bin=mysql-bin
auto_increment_increment=2
auto_increment_offset=1#rpl_semi_sync_master_enabled=1
#rpl_semi_sync_master_timeout=10000

/home/mysql/docker-data/s1/conf/my.cnf

# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2Mcharacter_set_server=utf8
init_connect='SET NAMES utf8'# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0lower_case_table_names=1
#指定主机号,不允许出现重复
server-id=130
#开启binlog
log-bin=mysql-bin
auto_increment_increment=2
auto_increment_offset=1#rpl_semi_sync_master_enabled=1
#rpl_semi_sync_master_timeout=10000

❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤

修改 my.cnf 后记得重启 MySQL 容器!

[root@demo conf]# docker restart mysqlm1
mysqlm1
[root@demo conf]# docker restart mysqls1
mysqls1

❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤

在master的docker容器中添加mysql权限,开启备份机复制,并且设置备份用户信息

#在134服务中进入mysql容器
docker exec -it mysqlm1 /bin/bash#登录到 MySQL
mysql -u root -p
EnterPassword:123456#==================== 在 MySQL 中的操作 ===========================
#添加权限
GRANT REPLICATION SLAVE,FILE,REPLICATION CLIENT ON *.* TO 'repluser'@'%' IDENTIFIED BY '123456';#刷新权限
FLUSH PRIVILEGES;#退出MySQL
quit;
#==================== 在 MySQL 中的操作 ===========================#退出docker容器
exit#重启容器
docker restart mysqlm1#查看m1的binlog信息(需要进入docker容器,然后再登录MySQL执行)
show master status;

image-20220314111451455

设置主从关系

接着在slave中进入到mysql容器,设置master信息,用于标注当前slave的master是谁

images

#语法
change master to master_host='通过宿主机访问master的ip',master_port=docker对外暴露的宿主机master的端口号,master_user='repluser',master_password='123456',master_log_file='master中的binlob文件',master_log_pos=master中的position位置信息;
#命令
change master to master_host='192.168.2.128',master_port=10000,master_user='repluser',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=487;

提示:如果命令发现参数打错了 就 执行 stop slave; 再重新执行上述命令

image-20220314090841354

完成后,还需要开启slave中的IOSQL线程,这两个线程主要用于slave中进行数据备份。

  • IO 线程:从日志文件中读取数据,其中最关键的就是用来同步数据的 SQL 语句
  • SQL 线程:执行从日志文件中读取到的 SQL 语句

可以先查看slave中这两个线程的状态

show slave status\G;

image-20220314091210982

我们发现在slave中,这两个线程是关闭的,需要将这两个线程进行开启

#开启(在 docker容器中登录 MySQL 后执行)
start slave;

image-20220314091353282

到此,mysql主从复制就已经搭建完毕

1.3.3 测试

[1]查看主从相关信息

查看slave中的binlog是否已经开启

show global variables like "%log%";

image-20220314091518052

查看master、slave中的进程信息

#m1和s1分别输入
show processlist;

m1节点内容

image-20220314105409477

s1节点内容

image-20220314105450221

[2]数据库同步测试

在m1节点创建一个数据库

image-20220314105617999

在s1节点中查看数据库

image-20220314110455637

[3]表同步测试

在m1中创建一张表

DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(50) DEFAULT NULL,
`password` varchar(50) DEFAULT NULL,
`address` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

image-20220314112513243

在s1中查看表

image-20220314112651330

[4]数据同步测试

在m1中新增一条数据

INSERT INTO `t_user` VALUES ('1', 'zhangsan', '123', '北京');

image-20210607111612466

在130中查看数据

image-20210607111628561

[5]反向同步数据

在s1中新增一条数据

INSERT INTO `t_user` VALUES ('2', 'lisi', '123', '上海');

image-20210607111741609

在m1中查看数据

image-20210607111805185

结论: 从服务中新增数据无法同步到主服务中去, 主从同步是单向的!

[6]数据修复

如果因为各种原因,发现 slave 中的数据和 master中不一致,可以参考下面的步骤恢复(下面的步骤相当于在 slave 中推倒重来):

  • 停止 slave 相关复制线程

    stop slave;

  • 删除 slave 中同步过来的数据库

    drop database db_hr;

  • 重新设定主从关系

    change master to master_host=‘192.168.2.128’,master_port=10000,master_user=‘repluser’,master_password=‘123456’,master_log_file=‘mysql-bin.000002’,master_log_pos=154;

  • 重新启动 slave 中的相关复制线程

    start slave;

1.4 主从复制原理

  • 异步操作:不需要等待
  • 同步操作:需要等待

1.4.1 异步复制

img

  1. 在主服务器写操作举例:insert 语句。
  2. 事务提交到master,master确认修改已保存。
  3. master接收到应用事务提交请求后,更新内部的binlog日志,让mysql引擎执行事务操作,并返回给客户端执行结果信息。同时在master中会存在一个事件监听,其会一直监听着master中binlog日志文件的改变,一旦发现日志文件发生改变,触发dump线程
  4. dump线程被触发后,通知slave中的IO线程:现在有事务操作要进行同步
  5. slave中IO线程接收到通知后,会从slave中relay-log.info文件中获取slave中的binlog日志文件和pos位置信息。接着会把这部分信息发送给master的dump线程。发送信息的含义是:告诉master,我上次读取到了哪里,这次还从上次读取到的位置继续读取。
  6. master的dump线程收到这些信息后,会根据slave发送的binlog日志文件和pos位置,将最新的binlog日志和pos位置后面的内容同步给slave的IO线程
  7. slave的IO线程接收到这些信息后,会将这部分内容同步到slave中的relay-bin文件中
  8. 当relay-bin文件发生改变后,触发slave线程执行sql操作【异步】
  9. 当slave向relay-bin写入完成后,会向master返回一个ACK消息,同步成功。

对于这一系列的操作,可以发现master和slave在进行同步时是以异步的方式完成的,master写入完binlog后,会马上通过引擎进行事务提交并向客户端返回响应,对于与slave同步的操作,则是异步完成的。

优点:

效率高

缺点:

可能出现数据不一致

1.4.2 半同步复制

img

半同步复制与异步复制的工作流程大体相似

不同点: 当master中的binlog日志写入完成后,其不会马上通过引擎进行事务提交,而会处于等待,等到slave同步完成向master返回ACK通知后,才会唤醒等待,继续向下执行。

  • 等待的时长,默认为10秒,但该时间可以配置
  • 尽量的避免了主从数据不一致,但造成吞吐量的降低
  • mysql兜底方案: 使用半同步复制进行备份时slave节点挂掉了,那么当master等待10秒后,仍然会进行引擎提交,同时会将半同步复制切换为异步复制。等到slave节点重启后,又会自动的从异步复制切换到半同步复制。

1.4.3 异步复制实现

Mysql在进行复制操作时,默认是基于异步复制完成的。那为了更好的体会异步复制的效果,可以通过mysql日志来查看具体的复制过程效果。

  1. 查看master的Mysql日志信息
docker logs -f mysqlm1

image-20210607113019936

根据当前查看的日志信息,在master中已经开启了dump线程连接到了id为130的slave节点,并且该id就是在slave的mysql配置文件中设置的id。同时pos内容包括当前的binlog日志和pos位置。
  1. 查看slave的Mysql日志信息
docker logs -f mysqls1

image-20210607113156502

根据slave中的日志信息,可以看到,当前slave中已经开启了relay-log日志,其对应文件信息就是xxxxx-relay-bin。其内部保存的就是slave中的相关binlog信息和pos位置信息。

同时在slave中也已经开启了SQL Thread,并且根据信息可以,它会从7375d7dd3ef6-relay-bin.000001文件的4位置开始复制。

同时在slave中也开启了IO Thread,其已经连接到master,并且会从master的binlog日志的154的位置开启复制。

  1. 查看master当前的binlog日志信息
cd home/mysql/docker-data/129/data/
#确定当前master正在使用的binlog日志文件
cat mysql-bin.index
#查看当前binlog日志文件内容
tail -f mysql-bin.000001

image-20210607113730796

  1. 查看slave当前的日志信息

image-20210607114023235

1.4.4 半同步复制实现

  1. 进入mysql容器,加载lib,主从节点都要配置,因为主从节点间会存在切换。
# 这两条 install 命令需要在 m1 中都执行一遍,然后在 s1 中也都执行一遍
install plugin rpl_semi_sync_master soname 'semisync_master.so';
install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
#查看插件信息
show plugins;

image-20210607114621298

  1. 启用半同步**(务必先启用从库,再启用主库)**
#先启用从库,再启用主库从库:set global rpl_semi_sync_slave_enabled= 1;   # 1:启用,0:禁止主库:set global rpl_semi_sync_master_enabled= 1;   # 1:启用,0:禁止set global rpl_semi_sync_master_timeout=10000;   # 单位为ms
  1. 从库重启IO Thread
stop slave io_thread;
start slave io_thread;
  1. 主库查看启动状态
#查询状态信息
show global status like "%sync%";

image-20210607115008800

#查询参数信息
show global variables like '%sync%';

image-20210607115025368

  1. 半同步复制效果测试
  • 正常的向master中添加数据,slave可以进行正常数据更新

image-20210607115320148

  • 关闭slave的IO,再次向master中添加数据
# 从库执行操作:关闭 I/O 线程
stop slave io_thread;# 主库插入数据
INSERT INTO `t_user` VALUES ('3', 'ding', '111', '武汉');

image-20210607115718465

此时复制机制会由半同步复制转换为异步复制,当再次向master中添加数据,不会再次出现等待

  • slave中重新开启IO Thread
start slave io_thread;

异步复制会再次转换为半同步复制,master中打印日志信息如下:

image-20210607115905128

在slave IO Tthread关闭这段时间内的数据,会同步到slave中,不会出现数据丢失

image-20210607115930371

第三节 主主复制

1、简介

对于主从复制来说,其内部会存在一台master以及一台或多台slave。但有一个非常明显的问题,master是单点存在。一旦master宕机,则无法进行数据的写入。为了解决这个问题,可以使用主主复制架构。

在主主复制架构中,会存在两台master,没有slave。并且会对这两台master进行读写分离,两台master会进行相互的复制, 架构图如下:

img

在此架构中,两台master会进行双向复制,为什么这么做呢? 因为假设现在负责写的master宕机了,那么写的工作则会交给之前负责读的服务器来完成,相当于它即负责写又负责读。等到原先负责写的master恢复了,其在继续负责写工作。 反之亦然。因此才需要两者间进行双向复制。

缺点: 读请求的并发量过大,服务可能产生宕机, 主主复制架构直接使用的情况较少。

2、主主搭建

在 docker 中再各自创建一个实例:

docker run --name mysqlm2 \
-p 30000:3306 \
--privileged=true \
-it \
-e MYSQL_ROOT_PASSWORD=123456 \
-e MYSQL_USER=user \
-e MYSQL_PASSWORD=pass \
-v /home/mysql/docker-data/m2/conf:/etc/mysql/conf.d \
-v /home/mysql/docker-data/m2/data/:/var/lib/mysql \
-v /home/mysql/docker-data/m2/logs/:/var/log/mysql \
-d mysql:5.7docker run --name mysqlm3 \
-p 40000:3306 \
--privileged=true \
-it \
-e MYSQL_ROOT_PASSWORD=123456 \
-e MYSQL_USER=user \
-e MYSQL_PASSWORD=pass \
-v /home/mysql/docker-data/m3/conf:/etc/mysql/conf.d \
-v /home/mysql/docker-data/m3/data/:/var/lib/mysql \
-v /home/mysql/docker-data/m3/logs/:/var/log/mysql \
-d mysql:5.7

/home/mysql/docker-data/m2/conf/my.cnf

# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2Mcharacter_set_server=utf8
init_connect='SET NAMES utf8'# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0lower_case_table_names=1
#指定主机号,不允许出现重复
server-id=1341
#开启binlog
log-bin=mysql-bin
auto_increment_increment=2
auto_increment_offset=1#rpl_semi_sync_master_enabled=1
#rpl_semi_sync_master_timeout=10000

/home/mysql/docker-data/m3/conf/my.cnf

# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2Mcharacter_set_server=utf8
init_connect='SET NAMES utf8'# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0lower_case_table_names=1
#指定主机号,不允许出现重复
server-id=666
#开启binlog
log-bin=mysql-bin
auto_increment_increment=2
auto_increment_offset=1#rpl_semi_sync_master_enabled=1
#rpl_semi_sync_master_timeout=10000

❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤

修改 my.cnf 后记得重启 MySQL 容器!

❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤

添加slave的相关配置, 虽然是主主模式,也要添加从用户(供从机访问的用户)。由于 m2 和 m3 都有可能作为从机访问对方(此时对方是主机),所以在 m2 和 m3 都需要创建 repluser 用户。

#添加权限
GRANT REPLICATION SLAVE,FILE,REPLICATION CLIENT ON *.* TO 'repluser'@'%' IDENTIFIED BY '123456';
#刷新权限
FLUSH PRIVILEGES;
#在m2/m3服务器上运行
show master status;#执行主主关联(参考 m2 的状态设置 m3;参考 m3 的状态设置 m2)
#设置m2。因为m2要去连m3,所以这里要设置m3的IP地址和端口号。
change master to master_host='192.168.198.120',master_port=40000,master_user='repluser',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=1104;#设置m3。因为m3要去连m2,所以这里要设置m2的IP地址和端口号。
change master to master_host='192.168.198.120',master_port=30000,master_user='repluser',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=1104;#主主同步生效:也就是说m2和m3都需要执行
start slave;

查看master 129的进程列表:show processlist;

image-20210607143921793

slave131的进程列表:show processlist;

image-20210607143932355

第四节 其他模式

1、级联复制

写请求的入口为一个,但当master向slave进行复制时,对于slave可以分为多层, master只要向其中两台slave复制即可,然后再由slave将其数据复制到后面更多的slave中。通过这种方式可以减轻master向slave复制的IO压力。但是这种架构会使slave的延迟会加大,架构如下图:

img

2、双主与级联复制(了解)

对于master在前面几种架构设计中,都存在单点问题, 对于master单点问题的解决,可以采用当前的架构。

通过这种架构不仅可以解决master单点的问题,也可以解决slave延迟的问题, 架构图如下:

img

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

习惯了微信聊天,利用WebSocket手动实现个聊天功能怎么样?

1.背景 基于项目需求,最近需要实现一个简单的聊天功能。日常生活中,大家对于聊天也习以为常,微信、QQ等软件也经常用到,其实我们也可以引入一些第三方的sdk包等去实现,也可以利用WebSocket通信协议去手动实现简单的聊…

【蓝桥杯】第十三届蓝桥杯省赛 AK 攻略 —— C++ B组全真题超详细剖析

🎄目录🌼写在前面🌻 A题 --- 九进制转十进制🌷 题目描述🌷 解题思路🌷 代码编写🌻 B题 --- 顺子日期🌷 题目描述🌷 解题思路🌷 代码编写🌻 C题 --…

92年程序员发帖晒薪资称自己很迷茫,网友:老弟你可以了

当下,是一个“向钱看,向厚赚”的社会。快节奏的生活下,家庭、工作各方面压力很容易使年轻人陷入迷茫和焦虑。 与其他行业相比,程序员的高薪让人羡慕。那么,对于那些真正达到这么多收入的人来说,他们是怎么…

Mysql安装包安装教程(亲测简单高效版)

Mysql安装包安装教程(亲测简单高效版)安装流程mysql安装SQLyog安装安装流程 mysql安装 1.下载mysql,官方地址:mysql官网 2.解压mysql安装包到任意目录下 3.新建my.ini文件 4.配置my.ini [mysqld] basedirD:\Program Files\J…

sql语法:详解DDL

Mysql版本:8.0.26 可视化客户端:sql yog 目录一、DDL是什么?二、和数据库相关的DDL2.1 创建数据库2.2 删除数据库2.3 查看所有的数据库,当前用户登录后,可以看到哪些数据库2.4 查看某个数据库的详细定义2.5 修改数据库…

Windows系统GIT安装与GitHub远程仓库

文章目录Windows系统GIT安装Git是什么windows环境安装环境变量验证安装GitHub与远程仓库GitHub是什么GitHub账号注册创建本地SSH KeyGitHub接入本地电脑公匙创建个人远程库传送门Windows系统GIT安装 Git是什么 Git(读音为/gɪt/)是一个开源的分布式版本…

接口测试之Postman使用全指南(原来使用 Postman测试API接口如此简单)

目录 一、Postman背景介绍 二、Postman的操作环境 三、Postman重要提示: 四、什么是接口测试 五、接口测试工具 六、接口测试流程 七、接口测试执行 八、全局变量和环境变量 九、postman接口关联 十、postman动态参数 十一、postman断言 十二、postman用…

Unity --- Transform类

1.一个很有意思的事实是Transform类不仅用来管理游戏物体的位置缩放旋转,还用来管理游戏物体的父物体与子物体之间的关系 当游戏物体A的trasnform类a是游戏物体B的transform类b的父类的话,游戏物体A就是游戏物体B的父物体 2.如何访问脚本当前挂载的游戏…

手把手教你安装VSCode(附带图解步骤)

一、前端工具vscode 1.1、概述 前端开发是创建Web页面或app等前端界面呈现给用户的过程,通过HTML,CSS及JavaScript以及衍生出来的各种技术、框架、解决方案,来实现互联网产品的用户界面交互 [1] 。它从网页制作演变而来,名称上有…

如何用Python对股票数据进行LSTM神经网络和XGboost机器学习预测分析(附源码和详细步骤),学会的小伙伴们说不定就成为炒股专家一夜暴富了

前言 最近调研了一下我做的项目受欢迎程度,大数据分析方向竟然排第一,尤其是这两年受疫情影响,大家都非常担心自家公司裁员或倒闭,都想着有没有其他副业搞搞或者炒炒股、投资点理财产品,未雨绸缪,所以不少…

你单位数字化转型了吗?

写在前面:本文由Bing AI和我一起完成,它完成90%内容,致谢! 1.数字化转型 近两年数字化转型在社会面搞得轰轰烈烈,数字化转型是指,利用新一代信息技术,构建数据的采集、传输、存储、处理和反馈的…

抓取某话题下指定时间内的微博数据,包括博文数据、评论信息等(可通过高级搜索筛选时间)

代码有点长,完整代码放在文章最后了。 最后的数据存储为了3个表,表的各字段如下: # csv头部 writer.writerow((话题链接, 话题内容, 楼主ID, 楼主昵称, 楼主性别, 发布日期,发布时间, 转发量, 评论量, 点赞量, 评论者ID, 评论者昵称,评论者…

低代码开发公司:用科技强力开启产业分工新时代!

实现办公自动化,是不少企业的共同追求。低代码开发公司会遵循时代发展规律,注入强劲的科技新生力量,在低代码开发市场厚积爆发、努力奋斗,推动企业数字化转型升级,为每一个企业的办公自动化升级创新贡献应有的力量。 一…

Matlab仿真,数字基带传输系统的设计实验报告

实验目的 1、提高独立学习的能力; 2、培养发现问题、解决问题和分析问题的能力; 3、学习Matlab 的使用; 4、掌握基带数字传输系统的仿真方法; 5、熟悉基带传输系统的基本结构; 6、理解奈奎斯特第一准则; 7…

echarts入门基础教程

目录 效果图 1.下载资源 新建项目 2.引入echarts 3.准备一个呈现图表的盒子 4.初始化echarts实例对象 5.准备配置项 6.将配置项设置给echarts实例对象 7.完整代码 效果图 1.下载资源 新建项目 去官网下载echarts压缩包,在包里的dist文件里找到echarts.min.j…

sql语法:事务的”那些事“

Mysql版本:8.0.26 可视化客户端:sql yog 目录前言一、事务是什么?二、事务的特点三、如何提交事务和回滚事务?3.1 手动提交3.2 自动提交模式下开启事务3.3 注意事项四、事务的隔离级别4.1 模拟事务安全问题4.1.1 脏读问题模拟如下&#xff1…

【模块介绍】6×6矩阵键盘(硬件部分和扫描方式)

目录 概述 原理图 扫描方式 扫描法 单个按键按下 多个按键按下 行反转法 图解 成品 概述 矩阵键盘非常常见 就是利用键盘组成矩阵来减少IO口的使用 做成66的矩阵键盘可以使用12个IO口读取36个按键 矩阵键盘的优势在于成本低,无需其他芯片即可实现功能 …

Android WMS工作原理浅析(一)

WMS(WindowManagerService)相关概念 window:它是一个抽象类,具体实现类为 PhoneWindow ,它对 View 进行管理。Window是View的容器,View是Window的具体表现内容; windowManager:是一个接口类,继承自接口 ViewManager &…

Mac上初次使用vite新建Vue3项目需要注意,自己的错误记录

执行npm init vitejs/app时 报错: internal/modules/cjs/loader.js:1089 throw new ERR_REQUIRE_ESM(filename, parentPath, packageJsonPath); 一开始网上找原因,以为是node的版本过低,但是看了是自己的弄的版本号是12.1.x.x刚刚好跨过门槛…

ElasticSearch学习(十一)—— es7.2升级log4j版本

下载log4j2.17 下载地址:Apache Logging Serviceshttps://logging.apache.org/ 查找es安装目录下需要替换的log4j文件 /opt/elk# find . -name log4j* ./elasticsearch-7.2.0/lib/log4j-api-2.11.1.jar ./elasticsearch-7.2.0/lib/log4j-core-2.11.1.jar ./elastics…