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

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 配置信息

未完待续

相关文章:

docker 安装部署 canal

1 mysql 安装 1.1 拉取镜像 docker pull mysql:8.4.41.2 创建挂载目录 mkdir -p /user/lzl/tool/docker/mysql/mysql_8.4.4/home/confmkdir -p /user/lzl/tool/docker/mysql/mysql_8.4.4/home/datamkdir -p /user/lzl/tool/docker/mysql/mysql_8.4.4/home/log1.3 编辑配置文…...

flowable适配达梦7 (2.1)

经过第一版的问题解决&#xff0c;后端项目可以启动&#xff0c;前端页面也集成进去。 前端在流程设计页面报错 之后发现主要是组件中modelerStore这个值没有 解决方法:在data增加对象 给component/process/designer.vue 中涉及到的每个子组件传入 :modelerStore“modeler…...

优化 Docker 镜像 技巧

优化 Docker 镜像可以提高构建速度、减少镜像大小、提高安全性和效率。以下是一些优化 Docker 镜像的方法&#xff1a; 使用适当的基础镜像 选择合适的基础镜像可以减小镜像大小&#xff0c;并确保基础镜像的安全性和更新性。Alpine、Ubuntu Minimal 等轻量级基础镜像是常用选…...

Spring Boot框架中常用注解

以下是Spring Boot框架中常用注解的详细说明&#xff0c;包括名称、用途、用法、使用位置及扩展示例&#xff0c;按功能模块分类整理&#xff1a; 一、核心启动与配置注解 1. SpringBootApplication 用途&#xff1a;主启动类注解&#xff0c;整合了 Configuration、EnableAu…...

Linux笔记之Ubuntu22.04安装IBus中文输入法教程

Linux笔记之Ubuntu22.04安装IBus中文输入法教程 code review&#xff01; 文章目录 Linux笔记之Ubuntu22.04安装IBus中文输入法教程安装 IBus 并配置中文输入法步骤 1: 安装 IBus 和拼音插件步骤 2: 设置 IBus 为默认输入法框架步骤 3: 重启会话步骤 4: 添加中文输入法步骤 5: …...

(UI自动化测试web端)第二篇:元素定位的方法_xpath属性定位

看代码里的【driver.find_element_by_xpath( )】()里的路径怎么写&#xff1f; xpath元素定位有多种写法&#xff0c;那我们现在说的就是在元素定位时&#xff0c;根据网页的实际情况来选择适合的xpath元素定位的写法。 文章主要介绍了xpath属性定位的方法和属性扩展使用的方法…...

Linux中执行 ifconfig 命令时提示 “未找到命令”

在 Linux 系统里&#xff0c;若执行 ifconfig 命令时提示 “未找到命令” 通常是由于系统没有安装 net-tools 包&#xff0c;或者该命令不在系统的 PATH 环境变量所包含的路径中 安装 net-tools 包 # Ubuntu/Debian sudo apt update sudo apt install net-tools# CentOS 7 及以…...

UE4学习笔记 FPS游戏制作15修正可以换枪中可以继续换枪和开火的Bug

现在存在的问题是换枪动作没完成时&#xff0c;可以继续换枪或者开枪 因为换枪这个动作是由玩家进行的&#xff0c;所以应该修改FppShooter脚本 我们添加两个参数 最后一次换枪的时间和换枪动画的长度 EquipmentLength 设置默认值0.6秒 添加一个新函数IsInEquip&#xff0c;返…...

SSL/TLS 和 SSH 介绍以及他们的区别

目录 SSL/TLS SSL/TLS工作原理的核心步骤握手阶段&#xff08;Handshake Protocol&#xff09;加密通信阶段&#xff08;Encrypted Communication Phase&#xff09;会话恢复&#xff08;Session Resumption&#xff09; SSH SSH 加密机制的核心步骤 SSH 和 SSL 区别 SSL/TLS …...

AudioTrack

AudioTrack是Android Audio系统提供给应用开发者&#xff08;java/C&#xff09;的API&#xff0c;用于操作音频播放的数据通路。MeidaPlayer在播放音乐时用到的是它&#xff0c;我们可以也可以直接使用AudioTrack进行音频播放。它是最基本的音频数据输出类。 AudioTrack.java…...

Windows安装Rust环境(详细教程)

一、 安装mingw64(C语言环境) Rust默认使用的C语言依赖Visual Studio&#xff0c;但该工具占用空间大安装也较为麻烦&#xff0c;可以选用轻便的mingw64包。 1.1 安装地址 (1) 下载地址1-GitHub&#xff1a;Releases niXman/mingw-builds-binaries GitHub (2) 下载地址2-W…...

监控IP,网站将异常情况通过飞书机器人发至指定群内

界面如下&#xff0c;丑是丑了点&#xff0c;但主打一个实用。 主要就是通过ping&#xff0c;就是一直在ping&#xff0c;当不通的时候&#xff0c;就根据你设置的报警时间&#xff0c;主要是利用飞书机器人来给飞书指定群里发异常信息报警。 直接上代码 import subprocess i…...

JVM 02

今天是2025/03/23 19:07 day 10 总路线请移步主页Java大纲相关文章 今天进行JVM 3,4 个模块的归纳 首先是JVM的相关内容概括的思维导图 3. 类加载机制 加载过程 加载&#xff08;Loading&#xff09; 通过类全限定名获取类的二进制字节流&#xff08;如从JAR包、网络、动态…...

局域网设备访问虚拟机 挂载NFS

目录 引言&#xff1a;网络IP问题配置虚拟机网络有线网络&#xff1a;无线网络&#xff1a; NFS文件挂载服务端配置客户端连接 引言&#xff1a; 需求&#xff1a;局域网下树莓派设备想要访问电脑主机上的虚拟机。这样可以通过nfs挂载网络设备&#xff0c;有利于交叉编译环境调…...

零、ubuntu20.04 安装 anaconda

1.anaconda下载 地址&#xff1a;Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 选择&#xff1a;Anaconda3-2023.07-2-Linux-x86_64.sh 2.anaconda安装 选择下载目录&#xff0c;选在在终端中打开&#xff0c;然后在终端输入安装命…...

IntelliJ IDEA 将 Spring Boot 项目远程部署到服务器

使用 IntelliJ IDEA 将 Spring Boot 项目远程部署到服务器的详细步骤&#xff0c;涵盖多种常见方法&#xff1a; 方法一&#xff1a;通过 SSH Maven 插件直接部署 1. 服务器环境准备 确保服务器已安装&#xff1a; Java 运行环境&#xff08;与项目 JDK 版本一致&#xff0…...

利用dify打造命令行助手

利用dify打造命令行助手 前言 我是mac os 的使用者。 如果说macos哪个工具我使用最频繁&#xff0c;最能提高效率的工作工具非zsh莫属(当然&#xff0c;我安装了iterm)。前不久&#xff0c;我要扩容线上的k8s集群。便想统计一下每个node上运行的pod数量。我不知道合适的命令&…...

前端面试整理

一、csshtml 二、js 三、vue 四、react 1.React 类组件与函数式组件核心区别 定义方式的不同&#xff0c;类组件用ES6的class&#xff0c;继承React.Component&#xff0c;而函数式组件用函数声明‌。 状态管理方面&#xff0c;类组件用this.state和setState&#xff0c;函…...

Perl语言的计算机网络

Perl语言在计算机网络中的应用 引言 在计算机科学的众多领域中&#xff0c;网络编程是一个极具挑战性和广泛应用的领域。在这其中&#xff0c;Perl语言以其强大的文本处理能力和简洁的语法&#xff0c;成为了网络编程的重要工具之一。自从1987年Larry Wall创造Perl以来&#…...

数据结构初阶-二叉树的应用

1.单值二叉树 题目链接&#xff1a;https://leetcode.cn/problems/univalued-binary-tree/description/ 题目思路&#xff1a;我们把根结点与左孩子和右孩子进行比较&#xff0c;只有左右子树都是单值二叉树的时候才为单值二叉树。但是我们需要先返回的是false&#xff0c;最…...

【赵渝强老师】在Docker中运行达梦数据库

Docker是一个客户端服务器&#xff08;Client-Server&#xff09;架构。Docker客户端和Docker守护进程交流&#xff0c;而Docker的守护进程是运作Docker的核心&#xff0c;起着非常重要的作用&#xff08;如构建、运行和分发Docker容器等&#xff09;。达梦官方提供了DM 8在Doc…...

掌握C#循环:for、while、break与continue详解及游戏案例

Langchain系列文章目录 01-玩转LangChain&#xff1a;从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块&#xff1a;四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain&#xff1a;从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…...

备份比赛数据【算法赛】

0备份比赛数据【算法赛】 - 蓝桥云课 问题描述 蓝桥杯大赛的组委会最近遇到了一个棘手的问题。他们有 N 台电脑需要备份比赛数据&#xff0c;每台电脑所需的备份时间分别为 A1​,A2​,…,AN​ 分钟。 备份必须按编号顺序依次进行&#xff0c;即先第 1 台&#xff0c;再第 2 …...

【算法笔记】图论基础(二):最短路、判环、二分图

目录 最短路松弛操作Dijkstra朴素Dijkstra时间复杂度算法过程例题 堆优化Dijkstra时间按复杂度算法过程例题 bellman-ford时间复杂度为什么dijkstra不能处理负权边&#xff1f;dijkstra的三个步骤&#xff1a;反例失效的原因 算法过程例题 spfa时间复杂度算法过程例题spfa求最短…...

【性能优化点滴】odygrd/quill 中一个简单的标记位作用--降低 IO 次数

在 StreamSink 类中&#xff0c;成员变量 _write_occurred 的作用是 跟踪自上次刷新&#xff08;Flush&#xff09;以来是否有写入操作发生&#xff0c;其核心目的是 优化 I/O 性能。以下是详细解析&#xff1a; _write_occurred 的作用 1. 避免不必要的刷新&#xff08;Flush…...

Unity2022发布Webgl2微信小游戏部分真机黑屏

复现规律&#xff1a; Unity PlayerSetting中取消勾选ShowSplashScreen 分析&#xff1a; 在Unity中&#xff0c;Splash Screen&#xff08;启动画面&#xff09; 不仅是视觉上的加载动画&#xff0c;还承担了关键的引擎初始化、资源预加载和渲染环境准备等底层逻辑。禁用后导…...

TDengine 3.3.2.0 集群报错 Post “http://buildkitsandbox:6041/rest/sql“

原因&#xff1a; 初始化时处于内网环境下&#xff0c;Post “http://buildkitsandbox:6041/rest/sql“ 无法访问 修复&#xff1a; vi /etc/hosts将buildkitsandbox映射为本机节点 外网环境下初始化时没有该问题...

基于yolov11的中空圆柱形缺陷检测系统python源码+pytorch模型+评估指标曲线+精美GUI界面

【背景介绍】 中空圆柱形缺陷检测在多个领域具有深远意义。在石油、天然气及化工行业&#xff0c;缺陷检测可预防泄漏事故&#xff0c;避免火灾、爆炸及环境污染&#xff0c;保障人员与财产安全。建筑、桥梁及航空航天领域则依赖此技术确保中空圆柱形结构的稳定性&#xff0c;…...

Python爬虫-爬取AliExpress商品搜索词排名数据

前言 本文是该专栏的第49篇,后面会持续分享python爬虫干货知识,记得关注。 本文,笔者以AliExpress平台为例。基于Python爬虫,通过某个指定的“搜索关键词”,批量获取该“搜索关键词”的商品排名数据。 具体实现思路和详细逻辑,笔者将在正文结合完整代码进行详细介绍。废…...

20250321在荣品的PRO-RK3566开发板的buildroot系统下使用ll命令【直接编译进IMG】

./buildroot/system/skeleton/etc/profile # some more ls aliases alias llls -alF alias lals -A alias lls -CF 20250321在荣品的PRO-RK3566开发板的buildroot系统下使用ll命令【直接编译进IMG】 2025/3/21 16:53 cd /etc/ echo "" >> # some more ls ali…...

Flink 自定义数据源:从理论到实践的全方位指南

目录 第一章:自定义数据源的基础概念 数据源是什么?它在 Flink 中扮演什么角色? Flink 的内置数据源:开箱即用的 “标配” 为什么需要自定义数据源?它的杀手锏在哪? 第二章:自定义数据源的实现之道 接口选择:从简单到高级,选对工具事半功倍 SourceFunction:入门…...

如何在 Java 中查找 PDF 页面大小(教程)

PDF 文件并未被 Java 直接支持。本教程将向您展示如何使用 JPedal Java PDF 库 以简单的步骤提取 PDF 文件的页面大小&#xff08;高度和宽度&#xff09;。页面大小可以以 厘米、英寸或像素 为单位获取。 为什么要使用第三方库处理 PDF 文件&#xff1f; PDF 文件是一种复杂…...

java版嘎嘎快充玉阳软件互联互通中电联云快充协议充电桩铁塔协议汽车单车一体充电系统源码uniapp

演示&#xff1a; 微信小程序&#xff1a;嘎嘎快充 http://server.s34.cn:1888/ 系统管理员 admin/123456 运营管理员 yyadmin/Yyadmin2024 运营商 operator/operator2024 系统特色&#xff1a; 多商户、汽车单车一体、互联互通、移动管理端&#xff08;开发中&#xff09; 另…...

使用Mastra.ai构建AI智能体:一次动手实践

Mastra框架提供了一种简洁高效的AI智能体构建方式。 本文将分享我使用Mastra.ai的实践经历。 我们将逐步完成环境搭建、探索框架核心功能,并构建一个能与工具交互的基础智能体。 过程中我会总结成功经验、遇到的问题以及收获的启示。 如果你对AI开发感兴趣,或正在寻找一个…...

Redis之大key问题

BigKey 常见面试题目 你会么&#xff1f; MoreKey 案例 大批量往redis里面插入2000W测试数据key Linux Bash下面执行&#xff0c;批量插入100W for((i1;i<100*10000;i)); do echo "set k$i v$i" >> /tmp/redisTest.txt ;done;生成100W条redis批量设置kv的…...

Excel第41套全国人口普查

2. 导入网页中的表格&#xff1a;数据-现有链接-考生文件夹&#xff1a;网页-找到表格-点击→变为√-导入删除外部链接关系&#xff1a;数据-点击链接-选中连接-删除-确定&#xff08;套用表格格式-也会是删除外部链接&#xff09;数值缩小10000倍&#xff08;除以10000即可&am…...

深度学习驱动的车牌识别:技术演进与未来挑战

一、引言 1.1 研究背景 在当今社会&#xff0c;智能交通系统的发展日益重要&#xff0c;而车牌识别作为其关键组成部分&#xff0c;发挥着至关重要的作用。车牌识别技术广泛应用于交通管理、停车场管理、安防监控等领域。在交通管理中&#xff0c;它可以用于车辆识别、交通违…...

PageHiOffice网页组件(WebOffice文档控件)开发集成技巧专题一

PageHiOffice网页组件作为最新一代的WebOffice文档控件&#xff0c;这是目前市场上唯一能做到在Chrome等最新版浏览器中实现内嵌网页运行的商用文档控件&#xff0c;是OA及ERP等系统处理各种文档的福音。从发布到完善已经超过3年&#xff0c;不管是功能性还是稳定性都已经有了长…...

A2 最佳学习方法

记录自己想法的最好理由是发现自己的想法&#xff0c;并将其组织成可传播的形式 (The best reason for recording what one thinks is to discover what one thinks and to organize it in transmittable form.) Prof Ackoff 经验之谈&#xff1a; 做培训或者写文章&#xff…...

从JVM底层揭开Java方法重载与重写的面纱:原理、区别与高频面试题突破

&#x1f31f;引言&#xff1a;一场由方法调用引发的"血案" 2018年&#xff0c;某电商平台在"双十一"大促期间遭遇严重系统故障。 技术团队排查发现&#xff0c;问题根源竟是一个继承体系中的方法重写未被正确处理&#xff0c;导致订单金额计算出现指数级…...

线程控制与线程操作

目录 线程的创建 tid pthread_self() 线程的退出 pthread_join 传参问题和返回值问题 pthread_exit 线程取消 线程分离 我们来学习线程的控制与线程操作 线程的创建 我们之前在线程的概念中就讲过了&#xff0c;我们可以通过pthread_create来创建一个或者多个子线程…...

Spring相关API

1是相对路径 2 是绝对路径 3 在注解时使用...

【GoLang】调用llm时提示词prompt的介绍以及使用方式

介绍 提示词是一种与大模型交互的对话格式&#xff0c;它以 JSON 格式定义了一个消息列表&#xff08;messages&#xff09;&#xff0c;包含了系统消息和用户消息。 我们向AI提问时&#xff0c;其实发给AI的都是提示词&#xff0c;别看我们只是简单输入了一句话&#xff0c;…...

[杂学笔记]锁为什么影响效率、I/O多路复用、三种I/O多路复用模型的区别、atomic原子操作类、MySQL的持久性是如何实现的

目录 1.锁为什么影响效率 2.I./O多路复用 3.三种I/O多路复用模型的区别 4.atomic原子操作类 介绍 常用函数 内存顺序含义 5.MySQL持久性的实现 1.锁为什么影响效率 线程阻塞与上下文切换&#xff1a;在多线程并发访问的场景下&#xff0c;只有一个线程能够进入临界区…...

AI Agent开发大全第八课-Stable Diffusion 3的本地安装全步骤

前言 就像我们前面几课所述,本系列是一门体系化的教学,它不像网上很多个别存在的单篇博客走“吃快餐”模式,而是从扎实的基础来带领大家一步步迈向AI开发高手。所以我们的AI课程设置是相当全面的,除了有牢固的基础知识外还有外面互联网上也搜不到的生产级实战。 前面讲过…...

Leetcode 刷题笔记 图论part05

卡码网 107 寻找存在的路径 初识并查集 并查集功能&#xff1a; 寻找根节点&#xff0c;函数: find(int u)&#xff0c;也就是判断这个节点的祖先节点是哪个将两个节点接入到同一个集合&#xff0c;函数: join(int u, int v)&#xff0c;将两个节点连在同一个根节点上判断两…...

NSSRound(持续更新)

了解过PHP特性吗 这个题相当于是php特性大杂烩 先看源代码 <?php error_reporting(0); highlight_file(__FILE__); include("rce.php"); $checker_1 FALSE; $checker_2 FALSE; $checker_3 FALSE; $checker_4 FALSE; $num $_GET[num]; if (preg_match(&qu…...

Python虚拟环境:从入门到实战指南

目录 一、为什么需要Python虚拟环境&#xff1f; 二、如何创建Python虚拟环境&#xff1f; 1. 使用venv&#xff08;Python 3.3内置&#xff09; 2. 使用virtualenv&#xff08;第三方工具&#xff09; 3. 使用conda&#xff08;适合数据科学项目&#xff09; 三、虚拟环…...

Python实现小红书app版爬虫

简介&#xff1a;由于数据需求的日益增大&#xff0c;小红书网页版已经不能满足我们日常工作的需求&#xff0c;为此&#xff0c;小编特地开发了小红书手机版算法&#xff0c;方便大家获取更多的数据&#xff0c;提升工作效率。 手机版接口主要包括&#xff1a;搜素&#xff0…...

注册中心之Nacos相较Eureka的提升分析

1. 传统拉取模式的缺陷&#xff08;如Eureka&#xff09; 在类似Eureka的注册中心中&#xff0c;消费者需要定时&#xff08;如每30秒&#xff09;主动拉取服务列表&#xff08;Pull模式&#xff09;。如果此时某个服务突然宕机&#xff0c;消费者可能无法立即感知&#xff0c…...