利用Docker搭建一套Mycat2+MySQL8一主一从、读写分离的最简单集群(保姆教程)
文章目录
- 1、Mycat介绍
- 1.1、mycat简介
- 1.2、mycat重要概念
- 1.3、Mycat1.x与Mycat2功能对比
- 1.2、主从复制原理
- 2、前提准备
- 3、集群规划
- 4、安装和配置mysql主从复制
- 4.1、master节点安装mysql8容器
- 4.2、slave节点安装mysql8容器
- 4.2、配置主从复制
- 4.3、测试主从复制配置
- 5、安装mycat2和配置读写分离集群
- 5.1、docker部署mycat2
- 5.2、navicat连接mycat2
- 5.3、配置主从集群信息实现读写分离
- 6、测试
1、Mycat介绍
1.1、mycat简介
Mycat是一套布式数据库中间件(虚拟数据库类),它本身并不存储数据库。
其原理中最重要的一个动词是“拦截”,它拦截了用户发送过来的 SQL 语句,首先对 SQL 语句做了一些特定的分析:如分片分析、路由分析、读写分离分析、 缓存分析等,然后将此 SQL 发往后端的真实数据库,并将返回的结果做适当的处理,最终再返回给用户。



1.2、mycat重要概念
- 逻辑库schema、逻辑表:虚拟的逻辑上的库表
业务开发人员通常在实际应用中并不需要知道中间件的存在,只需 要关注数据库,所以数据库中间件可以被当作一个或多个数据库集 群构成的逻辑库;逻辑库,与MySQL中的Database(数据库)对应,⼀个逻辑库中定义了所包括的Table。 - 全局表
- 数据源:真实的mysql数据库
- 集群配置json
1.3、Mycat1.x与Mycat2功能对比
| 功能 | 1.6版本 | 2 版本 |
|---|---|---|
| 多语句 | 不支持 | 支持 |
| blob值 | 支持一部分 | 支持 |
| 全局二级索引 | 不支持 | 支持 |
| 任意跨库join(包含复杂查询) | catlet支持 | 支持 |
| 分片表与分片表JOIN查询 | ER表支持 | 支持 |
| 关联子查询 | 不支持 | 支持一部分 |
| 分库同时分表 | 不支持 | 支持 |
| 存储过程 | 支持固定形式的 | 支持更多 |
| 支持逻辑视图 | 不支持 | 支持 |
| 支持物理视图 | 支持 | 支持 |
| 批量插入 | 不支持 | 支持 |
| 执行计划管理 | 不支持 | 支持 |
| 路由注释 | 支持 | 支持 |
| 集群功能 | 支持 | 支持更多集群类型 |
| 自动hash分片算法 | 不支持 | 支持 |
| 支持第三方监控 | 支持mycat-web | 支持普罗米斯,kafka日志等监控 |
| 流式合拼结果集 | 支持 | 支持 |
| 范围查询 | 支持 | 支持 |
| 单表映射物理表 | 不支持 | 支持 |
| XA事务 | 弱XA | 支持,事务自动恢复 |
| 支持MySQL8 | 需要更改mysql8的服务器配置支持 | 支持 |
| 虚拟表 | 不支持 | 支持 |
| joinClustering | 不支持 | 支持 |
| union all语法 | 不支持 | 支持 |
| BKAJoin | 不支持 | 支持 |
| 优化器注释 | 不支持 | 支持 |
| ER表 | 支持 | 支持 |
| 全局序列号 | 支持 | 支持 |
| 保存点 | 不支持 | 支持 |
| 离线迁移 | 支持 | 支持(实验) |
| 增量迁移 | CRC32算法支持 | BINLOG追平(实验) |
| 安全停机 | 不支持 | 支持(实验) |
| HAProxy协议 | 不支持 | 支持 |
| 会话粘滞 | update后select会粘滞 | update后select会粘滞且支持设置时间 |
| 全局表插入支持全局序列号 | 不支持 | 支持 |
| 全局表插入支持主表插入自增结果作为序列号 | 不支持 | 支持 |
| 外部调用的分片算法 | 不支持但可定制 | 支持 |
Mycat1.x跟Mycat2的配置完全不一样了。
1.2、主从复制原理

重点理解:通过三个线程的运行过程原理
-
- 主服务将数据的更新记录保存到二进制日志–主服务器线程
-
- 从服务将主服务的二进制日志复制到本地中继日志–从服务IO线程
-
- 从服务读取中继日志,更新本地数据–从服务SQL线程
2、前提准备
-
两台Linux服务器,配置为:8c32g5m/ CentOS Linux release 7.9.2009
-
都安装docker,docker版本信息如下:

-
其中一台安装配置好jdk1.8 java环境,因为mycat是用java语言编写的,运行需要jdk环境。

3、集群规划
| 主机名 | 公网ip | 内网地址 | 端口号 | 角色 | 用户名 | 密码 |
|---|---|---|---|---|---|---|
| newvts-a | 39.xxx.xxx.232 | 192.168.1.93 | 8066 | mycat | root | xxxxxxxx |
| newvts-a | 39.xxx.xxx.232 | 192.168.1.93 | 3307 | master | root | xxxxxxxx |
| newvts-b | 39.xxx.xxx.190 | 192.168.1.94 | 3308 | slave | root | xxxxxxxx |
其中 newvts-a这台机子安装mycat2和mysql8, newvts-b只安装mysql8。
4、安装和配置mysql主从复制
4.1、master节点安装mysql8容器
- 拉取mysql8镜像。
#docker拉取mysql8镜像
docker pull mysql:8.0.25
- master节点安装mysql,容器名称为:mysql-vts-master1
docker run -p 3307:3306 --name mysql-vts-master1 \
-v /mydata/mysql-vts-master/log:/var/log/mysql \
-v /mydata/mysql-vts-master/data:/var/lib/mysql \
-v /mydata/mysql-vts-master/conf:/etc/mysql \
-v /mydata/mysql-vts-master/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=xxxxxxx \
-d mysql:8.0.25
- 修改/mydata/mysql-vts-master/conf目录下的my.cnf,注意server_id为101。
vim /mydata/mysql-vts-master/conf/my.cnf
[mysqld]## 设置server_id,同一局域网中需要唯一
server_id=101 ## 指定不需要同步的数据库名称
binlog-ignore-db=mysql ## 开启二进制日志功能
log-bin=mall-mysql-bin ## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M ## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed ## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7 ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
- 重启mysq-vts-master1容器
docker restart mysql-vts-master1
- master节点的mysql数据库中新建一个数据同步用户
#进入容器
docker exec -it mysql-vts-master1 /bin/bash
mysql -uroot -p
xxxxx#新建一个数据同步用户,用户名为vts_slave
CREATE USER 'vts_slave'@'%' IDENTIFIED BY 'xxxxxx';
#给这个用户授予权限
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'vts_slave'@'%';
#考虑到我的MySQL8 ,密码密码必须修改为mysql_native_password的plugin才能被连接,不然无法连接
ALTER USER 'vts_slave'@'%' IDENTIFIED WITH mysql_native_password BY 'xxxxxx';
- 通过navicat连接master-mysql
测试连接成功!

4.2、slave节点安装mysql8容器
- 运行slave节点mysql8容器,端口号为3308;容器名:mysql-vts-slave1。
docker run -p 3308:3306 --name mysql-vts-slave1 \
-v /mydata/mysql-vts-slave/log:/var/log/mysql \
-v /mydata/mysql-vts-slave/data:/var/lib/mysql \
-v /mydata/mysql-vts-slave/conf:/etc/mysql \
-v /mydata/mysql-vts-slave/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=xxxx \
-d mysql:8.0.25
- 修改/mydata/mysql-vts-slave/conf目录下的my.cnf,注意server_id为102
vim /mydata/mysql-vts-slave/conf/my.cnf
[mysqld]## 设置server_id,同一局域网中需要唯一
server_id=102## 指定不需要同步的数据库名称
binlog-ignore-db=mysql ## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用
log-bin=mall-mysql-slave1-bin ## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M ## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed ## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7 ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062 ## relay_log配置中继日志
relay_log=mall-mysql-relay-bin ## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1 ## slave设置为只读(具有super权限的用户除外)
read_only=1
- 重启mysq-vts-slave1
docker restart mysql-vts-slave1
- navicat连接slave节点的mysql8
测试连接成功!!

4.2、配置主从复制
- 进入主数据库 master容器,查看日志文件信息和位置标号。
#进入主数据库 master容器
docker exec -it mysql-vts-master1 /bin/bash
mysql -uroot -p
# xxxxxx#在主数据库master容器中查看主从状态
show master status;#记着下面两个值
# File mall-mysql-bin.000001
# Postion 1005

- 进入从数据库 slave容器 .在从数据库里面配置主从复制
#进入主数据库 slave
docker exec -it mysql-vts-slave1 /bin/bash
mysql -uroot -p
# xxxxxx#在从数据库里面配置主从复制
change master to master_host='192.168.1.93', master_user='vts_slave', master_password='xxxxx', master_port=3307, master_log_file='mall-mysql-bin.000001', master_log_pos=1005, master_connect_retry=30;
- 在从数据库slave中开启主从同步、查看主从状态
#在从数据库中查看主从同步状态:
show slave status \G
#在从数据库中开启主从同步
start slave;
#在从数据库中查看主从同步状态:
show slave status \G

Slave_IO_Running: YesSlave_SQL_Running: Yes
这两个线程为yes,证明主从复制配置成功。
4.3、测试主从复制配置
- 在主数据库中创建库和表,从数据库中也相应自动创建跟主数据库一样的库和表;
- 主数据库中的表操作更新,删除,新增时,从数据库中的表也自动更新;
- 从数据库操作更新,删除,新增操作时,主数据库不会发生变化。
5、安装mycat2和配置读写分离集群
5.1、docker部署mycat2
mycat2镜像我使用的是docker仓库中的zhangyx1619/mycat2:mysql-1.2.1,再次感谢张同学分享的mycat2镜像,我用着很不错。
#拉取镜像
docker pull zhangyx1619/mycat2:mysql-1.2.1
#查看镜像信息,主要查看环境变量的信息
docker inspect zhangyx1619/mycat2:mysql-1.2.1

拥有以下环境变量需要根据实际情况进行设置
"DATA_SOURCE_URL=jdbc:mysql://127.0.0.1:6606/mysql?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8","DATA_SOURCE_USER=mycat","DATA_SOURCE_PASSWORD=!@#123","MYCAT_ROOT_PASSWORD=!@#123","MYCAT_HOME=/usr/local/mycat"
这里我们先通过一下方式运行一个mycat2容器,然后进入此容器拷贝配置文件目录到宿主机
#首先运行一个mycat容器
docker run -d -p 8066:8066 -e DATA_SOURCE_URL=jdbc:mysql://192.168.1.93:3307/mysql -e DATA_SOURCE_USER=root -e DATA_SOURCE_PASSWORD=xxxxx -e MYCAT_ROOT_PASSWORD=xxxxx --name mycat2 zhangyx1619/mycat2:mysql-1.2.1#进入容器
docker exec -it 自己的容器id /bin/bash#拷贝容器内部的mycat配置目录到宿主机
docker cp 03f518d53daf:/usr/local/mycat /usr/local/mycat2#查看宿主机mycat2目录下的文件,确保conf logs两个文件夹的存在#删除刚运行的容器
docker rm -f 03f518d53daf#挂载数据卷(mycat2相应目录)重新运行zhangyx1619/mycat2:mysql-1.2.1,命令如下:
docker run -d -p 8066:8066 -e DATA_SOURCE_URL=jdbc:mysql://192.168.1.93:3307/mysql -e DATA_SOURCE_USER=root -e DATA_SOURCE_PASSWORD=xxxxx -e MYCAT_ROOT_PASSWORD=xxxxx -v /usr/local/mycat2/conf/:/usr/local/mycat/conf/ -v /usr/local/mycat2/logs/:/usr/local/mycat/logs/ --name mycat2 zhangyx1619/mycat2:mysql-1.2.1#查看运行的容器
docker ps -a

mycat2容器运行了,再次查看logs下的wrapper.log
tail -f /usr/local/mycat2/logs/wrapper.log
显示successful standlone,证明mycat2启动成功!
5.2、navicat连接mycat2

查看数据库,mycat2中能看到逻辑库了

5.3、配置主从集群信息实现读写分离
- mycat2中创建逻辑库
-- 创建逻辑库
CREATE DATABASE vts_info_sys;

此时查看 /usr/local/mycat2/conf/schemas/ 发现mycat自动创建了配置文件vts_info_sys.schema.json
ll /usr/local/mycat2/conf/schemas/

- customTables放置的是mycat默认的表的配置
- globalTables放置的是全局表的配置
- shardingTables放置分片表的配置
- normalTables放置普通表的配置
- 修改逻辑库json
-- 修改逻辑库 指定vts_info_sys逻辑库默认的targetName, mycat会自动加载vts_info_sys下已经有的物理表或者视图作为单表.
/*+ mycat:createSchema{"customTables":{},"globalTables":{},"normalTables":{},"schemaName":"vts_info_sys","shardingTables":{},"targetName":"prototype"
} */;
- 创建数据源、查看数据源
#添加数据源
/*+mycat:createDataSource{"name":"vts_master1","url":"jdbc:mysql://192.168.1.93:3307/?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true","user":"root","password":"xxxx" } */;/*+mycat:createDataSource{"name":"vts_slave1","url":"jdbc:mysql://192.168.1.94:3308/?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true","user":"root","password":"xxxx" } */;#查看数据源
/*+ mycat:showDataSources{} */;

- 创建修改集群
#创建集群
/*!mycat:createCluster{"name":"vts_info_sys_rw_c","masters":["vts_master1"],"replicas":["vts_slave1"]} */;#查看集群
/*+ mycat:showClusters{} */;

- 查询负载均衡策略readBalanceType
- BALANCE_ALL( 默认值 ):获取集群中所有数据源
- BALANCE_ALL_READ:获取集群中允许读的数据源
- BALANCE_READ_WRITE:获取集群中允许读写的数据源 , 但允许读的数据源优先
- BALANCE_NONE:获取集群中允许写数据源 , 即主节点中选择
- switchType
NOT_SWITCH: 不进行主从切换
SWITCH: 进行主从切换
- 在逻辑库中配置数据源(集群名称)
vim /usr/local/mycat2/conf/schemas/vts_info_sys.schema.json

重启Mycat
docker restart mycat2
6、测试
验证读写分离(登录Mycat)
首先,在mycat2中插入4条数据
#插入4条数据
INSERT INTO vts_info_sys.sys VALUES(1, "hh1");
INSERT INTO vts_info_sys.sys VALUES(2, "hh2");
INSERT INTO vts_info_sys.sys VALUES(3, "hh3");
INSERT INTO vts_info_sys.sys VALUES(4, "hh4");

然后,查看主数据库master1和从数据库slave1中,同时也直接了4条相同的数据


此时,我修改从数据库slave1中的第4条数据为hh444,主数据库master1中的数据不会发生改变(这符合主从复制的原理)

这时,我在mycat2中进行查询操作,可以看到查询语句在主从二个主机间切换;


至此,使用MyCat2搭建一主二从数据库集群完成。

平庸的人用热闹填补空虚,优秀的人则用独处成就自己。
相关文章:
利用Docker搭建一套Mycat2+MySQL8一主一从、读写分离的最简单集群(保姆教程)
文章目录 1、Mycat介绍1.1、mycat简介1.2、mycat重要概念1.3、Mycat1.x与Mycat2功能对比1.2、主从复制原理 2、前提准备3、集群规划4、安装和配置mysql主从复制4.1、master节点安装mysql8容器4.2、slave节点安装mysql8容器4.2、配置主从复制4.3、测试主从复制配置 5、安装mycat…...
算法——python实现堆排序
文章目录 堆排序二叉树堆堆排序的过程:代码实现python中的heapq模块 堆排序 二叉树 关于二叉树的操作,其实核心就是 父节点找子节点,子节点找父节点 如果要将二叉树存储到队列中,就需要找出 父子节点之间的规律: 父…...
uniapp-components(封装组件)
<myitem></myitem> 在其他类里面这样调用。...
avue-crud组件,输入框回车搜索问题
crud组件,输入框回车搜索问题。 文档是并没有标注,实际上已经具备此功能。 需要在curd的option增加属性 searchEnter: true 即可实现输入内容后回车搜索。 avue的一些踩坑记录 - 前端小小菜 - 博客园...
STM32F407ZGT6定时器相关测试
结论: 20us以下的IO翻转操作,存在误差输出比较定时器使能与禁用功能正常输入捕获定时器使能与禁用功能正常单通道输出比较、输入捕获均正常多通道输出比较波形无干扰,但仍是存在20us以下的IO翻转操作存在误差多通道输入捕获正常 一、单一通…...
群晖通过 Docker 安装 GitLab
Docker 配置容器步骤都是大同小异的,可以参考: 群晖通过 Docker 安装 Gitea-CSDN博客 1. 在 Docker 文件夹中创建 GitLab,并创建子文件夹 2. 设置权限 3. 打开 Docker 应用,并在注册表搜索 gitlab-ce 4. 选择 gitlab-ce 映像运行…...
1.Node.js环境搭建(windows)
一、环境搭建(windows) 1.1下载并安装 https://nodejs.org/dist/v18.20.4/node-v18.20.4-x64.msi1.2测试和查看版本 #cmd命令 node -v输出: #能正确输出版本号,说明安装成功 v18.20.41.3使用nodejs启动第一个js #hello.js console.log(hello world!…...
链上相遇,节点之间的悸动与牵连
公主请阅 1. 返回倒数第 k 个节点1.1 题目说明1.2 题目分析1.3 解法一代码以及解释1.3 解法二代码以及解释 2.相交链表2.1 题目说明示例 1示例 2示例 3 2.2 题目分析2.3 代码部分2.4 代码分析 1. 返回倒数第 k 个节点 题目传送门 1.1 题目说明 题目名称: 面试题 02…...
一些简单的编程题(Java与C语言)
引言: 这篇文章呢,小编将会举一些简单的编程题用来帮助大家理解一下Java代码,并且与C语言做个对比,不过这篇文章所出现的题目小编不会向随缘解题系列里面那样详细的讲解每一到题,本篇文章的主要目的是帮助小编和读者们…...
java计算机毕设课设—愤怒小鸟游戏(附源码、文章、相关截图、部署视频)
这是什么系统? 资源获取方式再最下方 java计算机毕设课设—愤怒小鸟游戏(附源码、文章、相关截图、部署视频) 基于Java的愤怒小鸟游戏,我们不仅复刻了原版游戏的核心玩法,还增加了一些创新元素。游戏以2D图形界面呈现,玩家需要…...
【ARM】MDK-Flex服务管理软件使用说明
【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 记录MDK网络版部署工具Imtools.exe 的各个界面中相关配置的功能说明 2、 问题场景 解决客户咨询,该服务管理软件如何使用,为客户使用服务管理软件后期自行维护增加一定指导作用。 3、软硬件环…...
【H2O2|全栈】WPS/Office系列有哪些好用的快捷方式?
目录 WPS/Office 前言 准备工作 Office通用快捷键 PPT快捷键 Excel快捷键 Word快捷键 结束语 WPS/Office 前言 本章节属于前端前置知识,即使不学习前端,在工作中掌握常见的WPS/Office办公技能也是十分重要的。在本篇中,我将会分享常…...
对比学习)
目录 概念 数据增强 损失函数 NCE(noise contrastive estimation) Info NCE CV上的发展 InstDisc InvaSpread CPC CMC MoCo simCLR MoCo v2 SimCLR v2 SwAV BYOL SimSiam MoCo v3 DiNO 概念 通过利用样本之间的相似性和不相似性&…...
第十六届蓝桥杯嵌入式真题
蓝桥杯嵌入式第十二届省赛真题二 蓝桥杯嵌入式第十三届省赛真题一 蓝桥杯嵌入式第十三届省赛真题二 蓝桥杯嵌入式第十四届省赛真题 蓝桥杯嵌入式第十四届模拟考试一 蓝桥杯嵌入式第十四届模拟考试二 蓝桥杯嵌入式第十五届模拟考试一 蓝桥杯嵌入式第十五届模拟考试二 蓝…...
音频转码常用命令
1.转码为wav8k16bit -v提高音量 pitch调高音调 speed调整语速 sox -v 2.0 input.wav -r 8000 output.wav pitch 50 speed 1.05 sox input.wav -r 8000 output.wav 只是转码,不提高音调语速 压缩文件:zip -r filename.zip file1 file2 file3 2.批量转…...
INNER JOIN、LEFT JOIN 和 RIGHT JOIN有什么区别?什么是自连接?
INNER JOIN、LEFT JOIN 和 RIGHT JOIN 都是多表连接的不同方式,它们的主要区别在于它们如何处理表之间不匹配的数据。下面分别介绍它们的区别。 目录 一.多表连接查询 INNER JOIN(内连接) LEFT JOIN(左连接) RIGHT…...
原型模式具体和直接调用构造函数创建实例的区别
原型模式与直接调用构造函数创建实例的区别主要在于创建对象的方式和使用场景。让我们一步一步来理解。 直接调用构造函数创建实例 这是我们通常使用的创建对象的方法。通过调用类的构造函数,传入必要的参数来初始化对象。每次都要通过构造函数为对象设置所有初始值…...
MySQL 数据备份与恢复指南
本文将介绍如何通过命令行对 MySQL 数据库进行备份与恢复操作,适用于日常开发和生产环境中的数据管理需求。 1. MySQL 数据备份 MySQL 提供了 mysqldump 工具来执行数据库的备份操作,可以备份单个数据库、多个数据库或整个数据库实例。 1.1 备份单个数…...
NGINX 保护 Web 应用安全之基于 IP 地址的访问
根据客户端的 IP 地址控制访问 使用 HTTP 或 stream 访问模块控制对受保护资源的访问: location /admin/ { deny 10.0.0.1; allow 10.0.0.0/20; allow 2001:0db8::/32; deny all; } } 给定的 location 代码块允许来自 10.0.0.0/20 中的任何 IPv4 地址访问…...
数据结构——顺序表的基本操作
前言 介绍 🍃数据结构专区:数据结构 参考 该部分知识参考于《数据结构(C语言版 第2版)》24~28页 补充 此处的顺序表创建是课本中采用了定义方法为SqList Q来创建,并没有使用顺序表指针的方法,具体两个…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
