docker 安装部署 canal

1 mysql 安装

1.1 拉取镜像

docker pull mysql:8.4.4

1.2 创建挂载目录

mkdir -p /user/lzl/tool/docker/mysql/mysql_8.4.4/home/conf
mkdir -p /user/lzl/tool/docker/mysql/mysql_8.4.4/home/data
mkdir -p /user/lzl/tool/docker/mysql/mysql_8.4.4/home/log

1.3 编辑配置文件

在配置文件挂载目录 /user/lzl/tool/docker/mysql/mysql_8.4.4/home/conf 编写配置文件 my.cnf 内容如下:

[client]
default-character-set = utf8mb4[mysql]
default-character-set = utf8mb4[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
init_connect = 'SET NAMES utf8mb4'max_connections = 5000
wait_timeout = 20000
max_user_connections = 5000
max_allowed_packet = 128M
thread_stack = 262144# 时区设置
default-time-zone = '+08:00'# 允许创建函数(防止报错)
log_bin_trust_function_creators = 1# 开启慢查询日志
slow_query_log = ON
slow_query_log_file = /var/lib/mysql/slow-query.log
long_query_time = 3
log_output = FILE# 开启主从复制(Canal 需要用到)
log-bin = mysql-bin
binlog-format = ROW
server_id = 1

在这里插入图片描述

以下是对该 MySQL 配置文件的按功能分析:

字符集设置
  • 配置项
    [client]
    default-character-set = utf8mb4[mysql]
    default-character-set = utf8mb4[mysqld]
    character-set-server = utf8mb4
    collation-server = utf8mb4_general_ci
    init_connect = 'SET NAMES utf8mb4'
    
  • 分析
    • utf8mb4 字符集:支持存储所有 Unicode 字符,避免了 utf8 的三字节限制,适用于多语言和表情符号等。
    • utf8mb4_general_ci 排序规则:不区分大小写,适合大部分应用场景,但对于某些语言,可能有更精确的排序规则(例如 utf8mb4_unicode_ci)。
    • init_connect:每次连接时都会执行 SET NAMES utf8mb4,确保客户端连接使用 UTF-8 编码。
连接数和性能配置
  • 配置项
    max_connections = 5000
    wait_timeout = 20000
    max_user_connections = 5000
    max_allowed_packet = 128M
    thread_stack = 262144
    
  • 分析
    • 最大连接数 (max_connections = 5000):允许最多 5000 个并发连接,适合高并发应用。
    • 等待超时 (wait_timeout = 20000):连接最大空闲时间为 20000 秒(大约 5.5 小时),适用于长时间运行的会话或连接。
    • 每个用户最大连接数 (max_user_connections = 5000):限制每个用户的最大并发连接数为 5000,避免某个用户占用过多连接资源。
    • 最大数据包大小 (max_allowed_packet = 128M):允许最大数据包为 128MB,适用于大数据量传输。
    • 线程栈大小 (thread_stack = 262144):增加线程栈大小,防止在执行复杂查询或存储过程时栈溢出。
时区设置
  • 配置项
    default-time-zone = '+08:00'
    
  • 分析
    • 设置时区为 UTC+08:00,通常用于中国和东南亚,确保时间存储和显示的一致性。
函数创建权限
  • 配置项
    log_bin_trust_function_creators = 1
    
  • 分析
    • 允许创建存储函数和触发器,即使启用了二进制日志功能。这个设置解决了在启用二进制日志时,无法创建涉及存储过程或触发器的函数的问题。
慢查询日志
  • 配置项
    slow_query_log = ON
    slow_query_log_file = /var/lib/mysql/slow-query.log
    long_query_time = 3
    log_output = FILE
    
  • 分析
    • 开启慢查询日志 (slow_query_log = ON):记录执行时间超过指定阈值的查询,帮助识别性能瓶颈。
    • 日志文件路径 (slow_query_log_file = /var/lib/mysql/slow-query.log):慢查询日志将写入到指定文件,便于后续分析。
    • 慢查询阈值 (long_query_time = 3):超过 3 秒的查询被认为是慢查询并记录下来。
    • 日志输出方式 (log_output = FILE):慢查询日志输出到文件,而非其他方式(例如表格或系统日志)。
主从复制配置
  • 配置项
    log-bin = mysql-bin
    binlog-format = ROW
    server_id = 1
    
  • 分析
    • 二进制日志 (log-bin = mysql-bin):启用二进制日志,通常用于主从复制和数据恢复。
    • 日志格式 (binlog-format = ROW):行模式二进制日志记录,确保数据变化的精确记录,比语句模式更稳定,适用于复杂的数据变动。
    • 服务器 ID (server_id = 1):设置服务器唯一标识符,在主从复制或集群环境中,每个 MySQL 实例都需要一个唯一的 server_id

1.4 运行镜像

docker run -p 3308:3306 --name mysql_8.4.4 -v /user/lzl/tool/docker/mysql/mysql_8.4.4/home/conf/my.cnf:/etc/mysql/my.cnf -v /user/lzl/tool/docker/mysql/mysql_8.4.4/home/data:/var/lib/mysql -v /user/lzl/tool/docker/mysql/mysql_8.4.4/home/log:/var/log/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.4.4

1.5 检查二进制日志开启情况

进入容器

docker exec -it 容器id /bin/bash

进入容器后输入命令,登陆mysql

 mysql -uroot -p123456

输入命令查看二进制日志是否开启

show variables like 'log_bin';

在这里插入图片描述

1.6 创建账号供 canal 使用

1.6.1 创建用户

create user 'canal'@'mysqlIP' identified by 'canal';

1.6.2 授予权限

grant select, replication slave, replication client on *.* to 'canal'@'mysqlIP';

1.6.3 刷新权限

FLUSH PRIVILEGES;

1.6.4 删除用户命令

drop user '用户名'@'主机';

1.6.5 命令分析

这两条命令用来给用户 canal(只允许从 localhost 连接)赋予以下权限:

  • select:允许查询数据库内容;
  • replication slave:允许该用户从主服务器复制数据(在主从复制中常用);
  • replication client:允许该用户查看主从复制相关状态信息,如主服务器的状态和从服务器连接状态。

同时,通过 identified by 'canal' 指定了该用户的密码为 canal

在这里插入图片描述

2 canal 安装

2.1 拉取镜像

docker pull canal/canal-server:v1.1.8

2.2 配置文件介绍

2.2.1 /home/admin/canal-server/conf/canal.properties

canal.properties 是 canal 的主要配置文件,用于配置 canal 实例的各项参数。该文件包含了连接 MySQL 数据库、消息队列、数据同步等相关的配置项。

例如 canal.destinations = examplecanal 可以有多个 instance,每个实例有独立的配置文件,默认只 有一个example实例。如果需要处理多个mysql数据的话,可以复制出多个example,对其重新命名, 命令和配置文件中指定的名称一致。然后修改canal.properties 中的 canal.destinations,canal.destinations=实例 1,实例 2,实例 3

2.2.2 /home/admin/canal-server/conf/example/instance.properties

instance.properties 是 canal 中的实例配置文件,用于配置单个 canal 实例的行为。每个 canal 实例对应一个 MySQL 数据库或一个逻辑数据库的同步任务。

2.2.2.1 MySQL 连接配置

这些配置项用于 Canal 连接 MySQL 数据库,从 binlog 中获取数据。

# MySQL serverId(一般设置为不同的唯一值,避免与 MySQL 主库的 server_id 冲突)
# v1.0.26+ 版本会自动生成
# canal.instance.mysql.slaveId=0
  • canal.instance.mysql.slaveId:如果 MySQL 只有一个实例,可以不配置这个参数,或者设置一个唯一的 slaveId(如 2)。
# MySQL 主库地址
canal.instance.master.address=127.0.0.1:3306
  • canal.instance.master.address:指定 Canal 连接的 MySQL 主库的地址。
# MySQL 账号信息(需要具备 REPLICATION SLAVE 权限)
canal.instance.dbUsername=canal
canal.instance.dbPassword=canal
  • canal.instance.dbUsername & canal.instance.dbPassword:用于 Canal 访问 MySQL 读取 binlog 数据。
# MySQL 连接字符集(一般使用 UTF-8)
canal.instance.connectionCharset = UTF-8
  • canal.instance.connectionCharset:设置 MySQL 连接的字符集。

2.2.2.2 GTID 相关配置
# 是否启用 GTID(全局事务 ID),默认为 false
canal.instance.gtidon=false
  • canal.instance.gtidon:是否启用 MySQL 的 GTID(适用于 MySQL 5.6+),一般不需要启用。
# GTID 相关参数(一般不需要配置)
canal.instance.master.gtid=
  • canal.instance.master.gtid:如果使用 GTID,可以在这里指定初始 GTID。

2.2.2.3 Binlog 读取位置
# binlog 读取位置(如果为空,会从 MySQL 最新的 binlog 开始读取)
canal.instance.master.journal.name=
canal.instance.master.position=
canal.instance.master.timestamp=
  • canal.instance.master.journal.name & canal.instance.master.position:用于指定从哪个 binlog 开始读取数据(如果为空,则从最新的 binlog 位置开始)。

2.2.2.4 数据表过滤
# 允许同步的表(正则表达式,默认匹配所有数据库和表)
canal.instance.filter.regex=.*\\..*
  • canal.instance.filter.regex:默认匹配 所有数据库所有表.*\..* 表示 所有库.所有表)。
# 黑名单(不需要同步的表)
canal.instance.filter.black.regex=mysql\\.slave_.*
  • canal.instance.filter.black.regex:排除 mysql 系统库中的 slave_* 相关表。

2.2.2.5 备库(Standby)配置
# 如果 Canal 需要连接备份数据库(备用数据库)
# canal.instance.standby.address=
# canal.instance.standby.journal.name=
# canal.instance.standby.position=
# canal.instance.standby.timestamp=
# canal.instance.standby.gtid=
  • canal.instance.standby.address:如果 Canal 需要连接一个备用 MySQL 实例(主库故障时可切换到备用库)。

2.2.2.6 时序数据库(TSDB)支持
# 是否启用 table meta tsdb(用于存储表结构变更历史)
canal.instance.tsdb.enable=true
  • canal.instance.tsdb.enable:启用表结构变更的存储功能,防止因表结构变化导致 binlog 解析失败。

2.2.2.7 SSL 相关配置
# MySQL SSL 连接配置(默认禁用)
# canal.instance.master.sslMode=DISABLED
# canal.instance.master.tlsVersions=
# canal.instance.master.trustCertificateKeyStoreType=
# canal.instance.master.trustCertificateKeyStoreUrl=
# canal.instance.master.trustCertificateKeyStorePassword=
  • SSL 相关配置:如果需要 MySQL 使用 SSL 连接,可配置证书路径。

2.2.2.8 Canal 消息队列(MQ)配置

Canal 支持对接 Kafka、RocketMQ、RabbitMQ 等消息队列。

# MQ 的 topic 名称
canal.mq.topic=example
  • canal.mq.topic:指定 Canal 发送数据到消息队列的 Topic 名称。
# MQ 分区
canal.mq.partition=0
  • canal.mq.partition:指定 Canal 数据写入到 Kafka/RocketMQ 的分区。
# 是否启用动态队列分区
# canal.mq.enableDynamicQueuePartition=false
# canal.mq.partitionsNum=3
  • canal.mq.enableDynamicQueuePartition:是否启用 动态队列分区(Kafka/RocketMQ 支持)。
# 根据表的哈希值进行分区
# canal.mq.partitionHash=test.table:id^name,.*\\..*
  • canal.mq.partitionHash:用于指定某些表按照 idname 进行分区。

2.2.2.9 其他高级配置
# 是否启用 Druid 解析数据库密码(加密存储密码)
canal.instance.enableDruid=false
  • canal.instance.enableDruid:是否启用 Druid 数据源解析数据库密码。
# canal.instance.pwdPublicKey=...
  • canal.instance.pwdPublicKey:如果 enableDruid=true,可以配置公钥进行加密。

2.2.2.10 总结

instance.properties 配置文件主要包括:

  1. MySQL 连接信息canal.instance.master.address)。
  2. Binlog 读取控制canal.instance.master.journal.nameposition)。
  3. 数据库表过滤canal.instance.filter.regex)。
  4. 备库切换canal.instance.standby.address)。
  5. 时序数据库(TSDB)支持canal.instance.tsdb.enable)。
  6. SSL 安全连接canal.instance.master.sslMode)。
  7. 消息队列(MQ)支持canal.mq.topiccanal.mq.partition)。
  8. Druid 数据源密码加密canal.instance.enableDruid)。

这些配置可以根据实际需求进行调整,比如:

  • 如果 Canal 需要对接 Kafka,则要调整 canal.mq.topic
  • 如果 Canal 只同步特定表,需要修改 canal.instance.filter.regex
  • 如果 MySQL 启用了 GTID,需要配置 canal.instance.gtidon=true

2.3 创建挂载目录

mkdir -p /user/lzl/tool/docker/canal-server/canal-server_v1.1.8/home/logs
mkdir -p /user/lzl/tool/docker/canal-server/canal-server_v1.1.8/home/conf
mkdir -p /user/lzl/tool/docker/canal-server/canal-server_v1.1.8/home/conf/example

授权:

chmod 777 /user/lzl/tool/docker/canal-server/canal-server_v1.1.8/home

运行容器:

docker run -p 11111:11111 --name canal_server_v1.8.8 -d canal/canal-server:v1.1.8

复制配置文件到挂载目录:

docker cp canal_server_v1.1.8:/home/admin/canal-server/conf/canal.properties /user/lzl/tool/docker/canal-server/canal-server_v1.1.8/home/conf/canal.propertiesls
docker cp canal_server_v1.1.8:/home/admin/canal-server/conf/example/instance.properties /user/lzl/tool/docker/canal-server/canal-server_v1.1.8/home/conf/example/instance.properties

卸载容器:

docker rm -f  canal_server_v1.8.8

2.4 修改配置文件

修改 canal.properties,如果使用默认配置不用修改

# 默认端口 11111
# 默认输出model为tcp, mysql就使用tcp
# tcp, kafka, RocketMQ
#canal.serverMode = tcp#################################################
######### destinations ############# 
#################################################
# canal可以有多个instance,每个实例有独立的配置文件,默认只 有一个example实例。
# 如果需要处理多个mysql数据的话,可以复制出多个example,对其重新命名,
# 命令和配置文件中指定的名称一致。然后修改canal.properties 中的 canal.destinations
# canal.destinations=实例 1,实例 2,实例 3
#canal.destinations = example

修改 instance.properties,只需要修改mysql地址即可

# 不能和mysql master重复
canal.instance.mysql.slaveId=2
# 使用mysql的虚拟ip和端口 需要改
canal.instance.master.address=172.17.0.2:3306
# 使用已创建的canal用户 默认就有
canal.instance.dbUsername=canal
canal.instance.dbPassword=canal
canal.instance.connectionCharset = UTF-8
# canal.instance.defaultDatabaseName =test# 表示匹配所有的库所有的表 默认就是
canal.instance.filter.regex =.*\\..*

2.5 重启 canal 容器

docker run --name canal_server_v1.8.8 -p 11111:11111 -d \
-v /user/lzl/tool/docker/canal-server/canal-server_v1.1.8/home/conf/canal.properties:/home/admin/canal-server/conf/canal.properties \
-v /user/lzl/tool/docker/canal-server/canal-server_v1.1.8/home/conf/example/instance.properties:/home/admin/canal-server/conf/example/instance.properties \
-v /user/lzl/tool/docker/canal-server/canal-server_v1.1.8/home/logs/:/home/admin/canal-server/logs/ \
canal/canal-server:v1.1.8

2.7 检测是否连接成功

查看实例日志(日志:/user/lzl/tool/docker/canal-server/canal-server_v1.1.8/home/logs/example/example.log),发现报错如下:

Caused by: java.io.IOException: Error When doing Client Authentication:ErrorPacket [errorNumber=1524, fieldCount=-1, message=Plugin 'mysql_native_password' is not loaded, sqlState=HY000, sqlStateMarker=#]at com.alibaba.otter.canal.parse.driver.mysql.MysqlConnector.negotiate(MysqlConnector.java:332)at com.alibaba.otter.canal.parse.driver.mysql.MysqlConnector.connect(MysqlConnector.java:81)... 4 common frames omitted

根本原因是 canal 使用 mysql_native_password 认证插件,而 mysqlc使用的认证插件为 caching_sha2_password

mysql 查询用户认证插件:

SELECT user, host, plugin FROM mysql.user WHERE user = 'canal';

在这里插入图片描述

由于高版本 mysql 默认禁用 mysql_native_password ,所以需要修改 mysql 配置文件:

vim /user/lzl/tool/docker/mysql/mysql_8.4.4/home/conf/my.cnf

在这里插入图片描述

[client]
default-character-set = utf8mb4[mysql]
default-character-set = utf8mb4[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
init_connect = 'SET NAMES utf8mb4'max_connections = 5000
wait_timeout = 20000
max_user_connections = 5000
max_allowed_packet = 128M
thread_stack = 262144# 时区设置
default-time-zone = '+08:00'# 允许创建函数(防止报错)
log_bin_trust_function_creators = 1# 开启慢查询日志
slow_query_log = ON
slow_query_log_file = /var/lib/mysql/slow-query.log
long_query_time = 3
log_output = FILE# 开启主从复制(Canal 需要用到)
log-bin = mysql-bin
binlog-format = ROW
server_id = 1mysql_native_password=ON

重启 mysql 容器:

docker restart mysql_8.4.4

进入mysql 容器修改用户认证插件:

docker exec -it mysql_8.4.4 /bin/bash
mysql -uroot -p123456
ALTER USER 'canal'@'mysqlIP' IDENTIFIED WITH mysql_native_password BY 'canal';

刷新权限:

FLUSH PRIVILEGES;

下面的图只是实例,‘canal’@‘mysqlIP’ 改成实际 ip
在这里插入图片描述

运行成功命令 example.log:

2025-03-24 03:17:20.549 [main] INFO  c.a.otter.canal.instance.spring.CanalInstanceWithSpring - start CannalInstance for 1-example 
2025-03-24 03:17:21.220 [main] WARN  c.a.o.canal.parse.inbound.mysql.dbsync.LogEventConvert - --> init table filter : ^.*\..*$
2025-03-24 03:17:21.220 [main] WARN  c.a.o.canal.parse.inbound.mysql.dbsync.LogEventConvert - --> init table black filter : ^mysql\.slave_.*$
2025-03-24 03:17:21.226 [main] INFO  c.a.otter.canal.instance.core.AbstractCanalInstance - start successful....
2025-03-24 03:17:21.388 [destination = example , address = /113.45.38.93:3308 , EventParser] WARN  c.a.o.c.p.inbound.mysql.rds.RdsBinlogEventParserProxy - ---> begin to find start position, it will be long time for reset or first position
2025-03-24 03:17:21.388 [destination = example , address = /113.45.38.93:3308 , EventParser] WARN  c.a.o.c.p.inbound.mysql.rds.RdsBinlogEventParserProxy - prepare to find start position just show master status
2025-03-24 03:17:21.453 [destination = example , address = /113.45.38.93:3308 , EventParser] WARN  c.a.otter.canal.parse.inbound.mysql.MysqlConnection - load MySQL @@version_comment : MySQL Community Server - GPL
2025-03-24 03:17:22.963 [destination = example , address = /113.45.38.93:3308 , EventParser] WARN  c.a.o.c.p.inbound.mysql.rds.RdsBinlogEventParserProxy - ---> find start position successfully, EntryPosition[included=false,journalName=mysql-bin.000004,position=4,serverId=1,gtid=<null>,timestamp=1742785681000] cost : 1555ms , the next step is binlog dump
2025-03-24 03:17:23.065 [destination = example , address = /113.45.38.93:3308 , EventParser] WARN  c.a.otter.canal.parse.inbound.mysql.MysqlConnection - load MySQL @@version_comment : MySQL Community Server - GPL

提示:mysql 创建 canal 用户时 不要用 localhost 直接用实际 ip ,网上有的博客使用的时 localhost,但是我的是失败的。

3 canal 同步数据到 ES

3.1 引入依赖

<!-- https://mvnrepository.com/artifact/com.alibaba.otter/canal.client -->
<dependency><groupId>com.alibaba.otter</groupId><artifactId>canal.client</artifactId><version>1.1.8</version>
</dependency><dependency><groupId>com.alibaba.otter</groupId><artifactId>canal.protocol</artifactId><version>1.1.8</version>
</dependency> 

3.2 配置信息

未完待续

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

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

相关文章

基于SpringBoot的图书借阅小程序+LW参考示例

系列文章目录 1.基于SSM的洗衣房管理系统原生微信小程序LW参考示例 2.基于SpringBoot的宠物摄影网站管理系统LW参考示例 3.基于SpringBootVue的企业人事管理系统LW参考示例 4.基于SSM的高校实验室管理系统LW参考示例 5.基于SpringBoot的二手数码回收系统原生微信小程序LW参考示…

ElasticSearch快速入门--实现分词搜索

分词题目搜索 使用Elasticsearch实现题目数据的存储和分词搜索&#xff0c;需要将数据库的数据同步到 Elasticsearch。 ElasticSearch入门 ElasticSearch&#xff08;简称ES&#xff09;是一个开源的分布式搜索和数据分析引擎&#xff0c;用Java开发并且是当前最流行的开源的…

debug - 安装.msi时,为所有用户安装程序

文章目录 debug - 安装.msi时&#xff0c;为所有用户安装程序概述笔记试试在目标.msi后面直接加参数的测试 备注备注END debug - 安装.msi时&#xff0c;为所有用户安装程序 概述 为了测试&#xff0c;装了一个test.msi. 安装时&#xff0c;只有安装路径的选择&#xff0c;没…

Skyeye 云智能制造办公系统 VUE 版本 v3.15.14 发布

Skyeye 云智能制造&#xff0c;采用 Springboot winUI 的低代码平台、移动端采用 UNI-APP。包含 30 多个应用模块、50 多种电子流程&#xff0c;CRM、PM、ERP、MES、ADM、EHR、笔记、知识库、项目、门店、商城、财务、多班次考勤、薪资、招聘、云售后、论坛、公告、问卷、报表…

深度学习PyTorch之动态计算图可视化 - 使用 torchviz 生成计算图

序号系列文章1深度学习训练中GPU内存管理2深度学习PyTorch之数据加载DataLoader3深度学习 PyTorch 中 18 种数据增强策略与实现4深度学习pytorch之简单方法自定义9类卷积即插即用5深度学习PyTorch之13种模型精度评估公式及调用方法6深度学习pytorch之4种归一化方法&#xff08;…

ZW3D二次开发_非模板表单_输入框类控件_逐字符回调

ZW3D的非模板表单的控件中有一些输入框类的控件&#xff0c;比如“ZsCc::LineEditBtn”,"ZsCc::LineEditEx"等&#xff0c;按照“ZW3D二次开发_非模板表单_控件_添加回调-CSDN博客”介绍的方法添加函数命令时&#xff0c;发现输入框在用户输入字符时不能动态地触发回…

Mysql--日志(错误日志、二进制日志、查询日志、慢查询日志)

四种日志对比总结 日志类型作用记录内容特点常见用途错误日志记录 MySQL 运行过程中的错误、警告及启动、关闭信息MySQL 系统错误、故障信息、警告等较少占用磁盘空间故障排查、系统监控二进制日志记录所有更改数据库数据的操作及事务执行情况DML、DDL 操作&#xff0c;不记录…

AI对软件工程(software engineering)的影响在哪些方面?

AI对软件工程&#xff08;software engineering&#xff09;的影响是全方位且深远的&#xff0c;它不仅改变了传统开发流程&#xff0c;还重新定义了工程师的角色和软件系统的构建方式。以下是AI影响软件工程的核心维度&#xff1a; 一、开发流程的智能化重构 需求工程革命 • …

ElementPlus 快速入门

目录 前言 为什么要学习 ElementPlus&#xff1f; 正文 步骤 1 创建 一个工程化的vue 项目 ​2 安装 element-Plus :Form 表单 | Element Plus 1 点击 当前界面的指南 2 点击左边菜单栏上的安装&#xff0c;选择包管理器 3 运行该命令 demo(案例1 &#xff09; 步骤 …

stable diffusion本地安装

1. 基本环境准备 安装conda 环境 pytorch基础学习-CSDN博客 创建虚拟环境&#xff1a; conda create -n sd python3.10 一定要指定用3.10&#xff0c;过高的版本会提示错误&#xff1a; 激活启用环境&#xff1a; conda activate sd 设置pip国内镜像源&#xff1a; pip conf…

使用 Go 构建 MCP Server

一个互联网技术玩家&#xff0c;一个爱聊技术的家伙。在工作和学习中不断思考&#xff0c;把这些思考总结出来&#xff0c;并分享&#xff0c;和大家一起交流进步。 一、MCP 介绍 1. 基本介绍 MCP&#xff08;Model Context Protocol&#xff0c;模型上下文协议&#xff09;是…

Python----计算机视觉处理(Opencv:模板匹配)

一、 概念 模板匹配就是用模板图&#xff08;通常是一个小图&#xff09;在目标图像&#xff08;通常是一个比模板图大的图片&#xff09;中不断的滑动 比较&#xff0c;通过某种比较方法来判断是否匹配成功。 二、应用场景 1. 目标检测与识别&#xff1a;在计算机视觉领域&am…

【stm32】用从模式控制器 完成PWM的测量

&#x1f31e;学习视频还是来自于 铁头山羊 &#x1f33f;主要是回顾一下他讲的这一章的定时器的部分&#xff0c;具体的话 还是看一下具体铁头山羊的视频&#xff0c;讲的很清楚~~ 整体流程是这样的&#xff0c;首先通过定时器的输出比较功能&#xff0c;配置好PA6产生一个特定…

【C#】CS学习之Modbus通讯

摘要 本文详细描述了如何在在C#的Winform应用程序中使用NModbus库实现Modbus通讯&#xff0c;包括读取保持寄存器、以及相应的UI界面设计和事件处理。 前言 ​应用场景 Modbus 从站广泛应用于工业自动化领域&#xff1a; 1、传感器数据采集&#xff08;如温度、压力等&#xf…

Pycharm社区版创建Flask项目详解

一、创建工程项目 二、配置工程目录 新建的空项目下创建目录。 1、新建app.py文件 2、app.py代码如下&#xff1a; from flask import Flask, render_templateapp Flask(__name__)app.route("/") def root():"""主页:return: Index.html"&qu…

Linux 基础入门操作 第十二章 TINY Web 服务器

1 服务器基础架构 1.1 背景知识 Web 服务器使用 HTTP 协议与客户端&#xff08;即浏览器&#xff09;通信&#xff0c;而 HTTP 协议又基于 TCP/IP 协议。因此我们要做的工作就是利用 Linux 系统提供的 TCP 通信接口来实现 HTTP 协议。 而 Linux 为我们提供了哪些网络编程接口…

RAG优化:python从零实现[吃一堑长一智]循环反馈Feedback

本文将介绍一种有反馈循环机制的RAG系统,让当AI学会"吃一堑长一智",给传统RAG装了个"后悔"系统,让AI能记住哪些回答被用户点赞/拍砖,从此告别金鱼记忆: 每次回答都像在玩roguelike:失败结局会强化下次冒险悄悄把优质问答变成新知识卡牌,实现"以…

基于SpringBoot的名著阅读网站

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

[AI建模] 使用Pinokio本地化部署混元2D到3D AI建模服务

近年来,AI驱动的2D转3D建模技术发展迅猛,而Pinokio作为一个强大的AI模型管理与部署平台,使得在本地部署这些复杂的AI模型变得更加简单高效。本文将介绍如何使用Pinokio在本地部署混元2D到3D AI建模服务,并快速生成带或不带Texture的3D模型。 1. 在Pinokio Discover页面找到…

Qt 导入TagLib库

文章目录 0. 前言和环境介绍1. 下载TagLib2. 下载zlib3. 修改.pro文件4. 测试代码 0. 前言和环境介绍 最近在使用Qt写一个播放器&#xff0c;需要解析mp3文件&#xff0c;于是研究了一下如何导入TagLib库 Qt构建套件:Desktop Qt6.8.2 MinGW64-bit Qt Creator安装目录: D:\bit…