MySQL 主从复制搭建全流程:基于 Docker 与 Harbor 仓库
一、引言
在数据库管理中,MySQL 主从复制是一种非常重要的技术,它可以实现数据的备份、读写分离,减轻主数据库的压力。本文将详细介绍如何使用 Docker 和 Harbor 仓库来搭建 MySQL 主从复制环境,适合刚接触数据库和 Docker 的新手学习。
二、MySQL 主从复制原理
2.1 基本概念
主从复制是指一台服务器充当主数据库服务器(Master),另一台或多台服务器充当从数据库服务器(Slave),主服务器中的数据会自动复制到从服务器之中。对于多级复制,数据库服务器既可以充当主机,也可以充当从机。MySQL 主从复制的基础是主服务器对数据库修改记录二进制日志,从服务器通过主服务器的二进制日志自动执行更新。
2.2 角色职责
- 主数据库(Master):负责处理写操作和更新数据,是业务操作的主要入口。
- 从数据库(Slave):复制主数据库的数据,通常用于读操作和数据备份,以减轻主数据库的压力。
2.3 复制流程
- 主库记录并发送日志:
- 当主库发生更新事件(如
UPDATE
、INSERT
、DELETE
、CREATE
)时,这些操作会被顺序地写入二进制日志(binlog
)中。 - 主库会开启一个
binlog dump
线程,负责将binlog
日志中的事件发送给从库。
- 当主库发生更新事件(如
- 从库接收并写入中继日志:
- 从库通过
IO
线程连接到主库,并请求binlog
日志的内容。 - 主库的
binlog dump
线程将binlog
日志中的事件发送给从库的IO
线程。 - 从库的
IO
线程接收这些事件,并将其写入到从库的中继日志(relay log
)中。
- 从库通过
- 从库同步数据:
- 从库开启一个
SQL
线程,实时监控relay log
的内容是否有更新。 SQL
线程解析relay log
中的SQL
语句,并在从库上执行这些语句,从而实现数据的同步。
- 从库开启一个
三、拉取 MySQL 镜像
3.1 从 Harbor 仓库拉取镜像
可以使用以下命令从 Harbor 仓库拉取 MySQL 9.3.0 版本的镜像:
[root@mysql docker]# docker pull harbor.registry.com/library/mysql:9.3.0
参数解释:
docker pull
:用于从镜像仓库中拉取镜像。harbor.registry.com/library/mysql:9.3.0
:指定要拉取的镜像的地址和版本,harbor.registry.com
是 Harbor 仓库的地址,library/mysql
是镜像的名称,9.3.0
是镜像的版本号。
如果没有仓库,可以直接执行这个命令:
docker pull mysql:9.3.0
尝试从 Docker Hub(官方 Docker 镜像仓库)拉取 mysql
镜像的 9.3.0
版本。Docker Hub 是 Docker 官方的公共镜像仓库,当你使用 docker pull
命令并且不指定具体仓库地址时,Docker 客户端默认会从 Docker Hub 拉取镜像。
3.2 检查镜像是否拉取成功
使用以下命令查看本地镜像列表:
[root@mysql docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
harbor.registry.com/library/mysql 9.3.0 2c849dee4ca9 5 weeks ago 859MB
参数解释:
docker images
:用于列出本地所有的镜像,显示镜像的仓库名、标签、镜像 ID、创建时间和大小等信息。
3.3 处理拉取镜像时的 TLS 证书验证失败问题
如果在使用 docker pull
命令拉取镜像时,由于 TLS 证书验证失败导致报错,例如:
[root@mysql docker]# docker pull harbor.registry.com/library/mysql:9.3.0
Error response from daemon: Get "https://harbor.registry.com/v2/": tls: failed to verify certificate: x509: certificate signed by unknown authority
可以创建 /etc/docker/daemon.json
文件,并写入以下内容:
{"default-ipc-mode": "shareable","data-root": "/data/docker","exec-opts": ["native.cgroupdriver=systemd"],"log-driver": "json-file","log-opts": {"max-size": "100m","max-file": "50"},"insecure-registries": ["https://harbor.registry.com"],"registry-mirrors": ["https://docker.m.daocloud.io","https://docker.imgdb.de","https://docker-0.unsee.tech","https://docker.hlmirror.com","https://docker.1ms.run","https://func.ink","https://lispy.org","https://docker.xiaogenban1993.com"]
}
参数解释:
default-ipc-mode
:设置默认的 IPC(进程间通信)模式为shareable
。data-root
:指定 Docker 数据存储的根目录为/data/docker
。exec-opts
:设置容器执行时的选项,native.cgroupdriver=systemd
表示使用systemd
作为 cgroup 驱动。log-driver
:指定日志驱动为json-file
,将容器日志以 JSON 文件的形式存储。log-opts
:设置日志的选项,max-size
表示单个日志文件的最大大小为100m
,max-file
表示最多保留50
个日志文件。insecure-registries
:添加不安全的镜像仓库地址,允许从该仓库拉取镜像,这里是https://harbor.registry.com
。registry-mirrors
:设置镜像加速地址,提高镜像拉取的速度。
3.4 添加 Harbor 仓库映射
在 /etc/hosts
文件中添加 Harbor 仓库的映射:
[root@mysql docker]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.220.20 harbor.registry.com harbor
参数解释:
/etc/hosts
:是一个本地的域名解析文件,通过添加192.168.220.20 harbor.registry.com harbor
这一行,将harbor.registry.com
域名映射到192.168.220.20
这个 IP 地址。
注意:
四、启动 MySQL 容器
4.1 启动初始容器
使用以下命令启动一个 MySQL 容器:
[root@mysql docker]# docker run --name mysql -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD="123456" harbor.registry.com/library/mysql:9.3.0
参数解释:
docker run
:用于创建并启动一个新的容器。--name mysql
:为容器指定一个名称为mysql
。-d
:表示在后台运行容器。-p 3306:3306
:将宿主机的3306
端口映射到容器内部的3306
端口,这样可以通过宿主机的3306
端口访问容器内的 MySQL 服务。-e MYSQL_ROOT_PASSWORD="123456"
:设置容器内 MySQL 的 root 用户密码为123456
。harbor.registry.com/library/mysql:9.3.0
:指定要使用的镜像。
4.2 检查容器是否启动成功
使用以下命令查看正在运行的容器:
[root@mysql docker]# docker ps
参数解释:
docker ps
:用于列出正在运行的容器,显示容器的 ID、镜像、命令、创建时间、状态、端口映射和名称等信息。
4.3 查看容器日志
如果容器启动报错,可以使用以下命令查看容器的日志,以寻找出错原因:
[root@mysql docker]# docker logs mysql
参数解释:
docker logs
:用于查看指定容器的日志信息,mysql
是容器的名称。
4.4 进入容器
使用以下命令进入正在运行的容器:
[root@mysql docker]# docker exec -it mysql /bin/bash
参数解释:
docker exec
:用于在运行的容器中执行命令。-it
:表示以交互模式进入容器,-i
保持标准输入打开,-t
分配一个伪终端。mysql
:是容器的名称。/bin/bash
:指定要执行的命令,即进入容器的bash
终端。
bash-5.1# cd etc
bash-5.1# ls
# 找到my.cnf文件
五、配置主从服务器
5.1 复制配置文件
在新的会话窗口中创建两个目录:
[root@mysql docker]# mkdir /data/master/conf -p
[root@mysql docker]# mkdir /data/slave/conf -p
参数解释:
mkdir
:用于创建目录。-p
:表示如果父目录不存在,则先创建父目录。
将刚刚找到的 my.cnf
配置文件,并将其拷贝到 /data/master/conf
目录下:
[root@mysql docker]# cd /data/master/conf/
[root@mysql conf]# docker cp mysql:/etc/my.cnf .
参数解释:
cd etc
:进入容器的etc
目录。ls
:列出当前目录下的文件和文件夹。exit
:退出容器。docker cp
:用于在宿主机和容器之间复制文件,mysql:/etc/my.cnf
表示容器mysql
内的/etc/my.cnf
文件,.
表示当前目录。
5.2 修改配置文件
编辑 /data/master/conf/my.cnf
文件,添加 server-id=1
:
[root@mysql conf]# vim /data/master/conf/my.cnf
参数解释:
vim
:是一个文本编辑器,用于编辑文件内容。server-id=1
:为 MySQL 服务器指定一个唯一的 ID,主服务器的 ID 通常为1
。
将修改后的 my.cnf
文件拷贝到 /data/slave/conf
文件夹下面,并将 server-id
的值改为 2
:
[root@mysql conf]# cp my.cnf ../../slave/conf/
[root@mysql conf]# vim /data/slave/conf/my.cnf
参数解释:
cp
:用于复制文件,my.cnf
是要复制的文件,../../slave/conf/
是目标目录。server-id=2
:从服务器的 ID 需要与主服务器不同,这里设置为2
。
5.3 停止并删除初始容器
退出容器后,停掉并删除初始容器:
bash-5.1# exit
[root@mysql docker]# docker stop mysql
[root@mysql docker]# docker rm mysql
参数解释:
docker stop
:用于停止正在运行的容器,mysql
是容器的名称。docker rm
:用于删除容器,mysql
是容器的名称。
查看发现,容器已经删除,没有任何容器了:
[root@mysql docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
六、创建主服务器
使用以下命令创建主服务器容器:
[root@mysql docker]# docker run -d \
--name mysql-master \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /data/master/conf/my.cnf:/etc/my.cnf \
-p 3306:3306 \
harbor.registry.com/library/mysql:9.3.0 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci
参数解释:
-d
:在后台运行容器。--name mysql-master
:为容器指定名称为mysql-master
。-e MYSQL_ROOT_PASSWORD=123456
:设置容器内 MySQL 的 root 用户密码为123456
。-v /data/master/conf/my.cnf:/etc/my.cnf
:将宿主机的/data/master/conf/my.cnf
文件挂载到容器内的/etc/my.cnf
文件,实现配置文件的持久化。-p 3306:3306
:将宿主机的3306
端口映射到容器内部的3306
端口。harbor.registry.com/library/mysql:9.3.0
:指定要使用的镜像。--character-set-server=utf8mb4
:设置服务器的字符集为utf8mb4
。--collation-server=utf8mb4_unicode_ci
:设置服务器的排序规则为utf8mb4_unicode_ci
。
6.1 进入主服务器容器
使用以下命令进入主服务器容器:
[root@mysql docker]# docker exec -it mysql-master /bin/bash
bash-5.1# mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 9.3.0 MySQL Community Server - GPLCopyright (c) 2000, 2025, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
参数解释:
docker exec -it mysql-master /bin/bash
:以交互模式进入mysql-master
容器的bash
终端。mysql -uroot -p123456
:使用 root 用户和密码123456
登录 MySQL。
6.2 创建用户并授权
在主服务器的 MySQL 中创建一个用于同步的用户,并授予其复制从服务器的权限:
# 创建用户:
mysql> create user 'backups'@'%' identified by '123456';
Query OK, 0 rows affected (0.021 sec)# 给权限:
mysql> grant replication slave on *.* to 'backups'@'%';
Query OK, 0 rows affected (0.003 sec)# 刷新权限:
mysql> flush privileges;
Query OK, 0 rows affected, 1 warning (0.003 sec)
参数解释:
create user 'backups'@'%' identified by '123456'
:创建一个名为backups
的用户,允许从任何主机连接,密码为123456
。grant replication slave on *.* to 'backups'@'%'
:授予backups
用户在所有数据库和所有表上的复制从服务器的权限。flush privileges
:刷新权限,使新的权限设置生效。
6.3 查看同步起始位置
使用以下命令查看主服务器的二进制日志状态,获取同步的起始位置:
mysql> show binary log status;
-- 或者
mysql> show binary log status\G;例如:
mysql> show binary log status;
+---------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000002 | 863 | | | |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.000 sec)mysql> show binary log status\G;
*************************** 1. row ***************************File: binlog.000002Position: 863Binlog_Do_DB: Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.001 sec)ERROR:
No query specified
参数解释:
show binary log status
:显示主服务器的二进制日志状态,包括当前正在使用的二进制日志文件、位置等信息。\G
:以垂直格式显示查询结果,方便查看。
七、创建从服务器
7.1 创建从服务器容器
在新的窗口中使用以下命令创建从服务器容器:
[root@mysql conf]# docker run -d \
--name mysql-slave \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /data/slave/conf/my.cnf:/etc/my.cnf \
-p 3307:3306 \
harbor.registry.com/library/mysql:9.3.0 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci
参数解释:
- 大部分参数与创建主服务器容器的参数相同,不同之处在于:
--name mysql-slave
:为容器指定名称为mysql-slave
。-p 3307:3306
:将宿主机的3307
端口映射到容器内部的3306
端口,避免与主服务器的端口冲突。
7.2 进入从服务器容器
使用以下命令进入从服务器容器:
[root@mysql conf]# docker exec -it mysql-slave /bin/bash
bash-5.1# mysql -uroot -p123456
参数解释:
- 与进入主服务器容器的命令和参数解释相同。
7.3 配置主从复制
在从服务器的 MySQL 中配置主从复制:
mysql> CHANGE REPLICATION SOURCE TO \
SOURCE_HOST='192.168.220.198',SOURCE_USER='backups',SOURCE_PASSWORD='123456', \
SOURCE_LOG_FILE='binlog.000002',SOURCE_LOG_POS=863,GET_SOURCE_PUBLIC_KEY=1;
参数解释:
CHANGE REPLICATION SOURCE TO
:用于配置从服务器的复制源。SOURCE_HOST='192.168.220.198'
:指定主服务器的 IP 地址。SOURCE_USER='backups'
:指定用于复制的用户。SOURCE_PASSWORD='123456'
:指定用于复制的用户的密码。SOURCE_LOG_FILE='binlog.000002'
:指定主服务器的二进制日志文件。SOURCE_LOG_POS=863
:指定主服务器二进制日志的起始位置。GET_SOURCE_PUBLIC_KEY=1
:表示获取主服务器的公钥。
7.4 启动复制并查看状态
执行以下命令启动复制,并查看复制状态:
mysql> start replica;
mysql> show replica status\G;
参数解释:
start replica
:启动从服务器的复制进程。show replica status\G
:显示从服务器的复制状态,以垂直格式显示结果,方便查看各个参数的值。
八、验证主从复制
8.1 在主服务器创建测试数据库和表
进入主服务器容器并登录 MySQL:
[root@mysql docker]# docker exec -it mysql-master /bin/bash
bash-5.1# mysql -uroot -p123456
在 MySQL 中创建一个测试数据库和表,并插入一些数据:
mysql> CREATE DATABASE test_db;
Query OK, 1 row affected (0.00 sec)mysql> USE test_db;
Database changedmysql> CREATE TABLE test_table (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255));
Query OK, 0 rows affected (0.01 sec)mysql> INSERT INTO test_table (name) VALUES ('test_value');
Query OK, 1 row affected (0.00 sec)
8.2 在从服务器验证数据同步
进入从服务器容器并登录 MySQL:
[root@mysql docker]# docker exec -it mysql-slave /bin/bash
bash-5.1# mysql -uroot -p123456
在 MySQL 中检查是否能看到主服务器创建的数据库和表,以及插入的数据:
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test_db |
+--------------------+mysql> USE test_db;
Database changedmysql> SELECT * FROM test_table;
+----+------------+
| id | name |
+----+------------+
| 1 | test_value |
+----+------------+
如果能在从服务器看到主服务器创建的数据库、表和插入的数据,说明主从复制配置成功。
九、总结
通过以上步骤,我们成功地使用 Docker 和 Harbor 仓库搭建了 MySQL 主从复制环境,并完成了验证。主从复制可以提高数据库的可用性、读写性能和数据安全性,在实际的生产环境中有着广泛的应用。希望本文对刚接触 MySQL 和 Docker 的新手有所帮助。
以上就是完整的 MySQL 主从复制搭建及验证过程,每一步都有详细的命令参数解释,相信新手也能轻松理解和操作。
相关文章:

MySQL 主从复制搭建全流程:基于 Docker 与 Harbor 仓库
一、引言 在数据库管理中,MySQL 主从复制是一种非常重要的技术,它可以实现数据的备份、读写分离,减轻主数据库的压力。本文将详细介绍如何使用 Docker 和 Harbor 仓库来搭建 MySQL 主从复制环境,适合刚接触数据库和 Docker 的新手…...
vscode打开vue + element项目
好嘞,我帮你详细整理一个用 VS Code 来可视化开发 Vue Element UI 的完整步骤,让你能舒服地写代码、预览界面、调试和管理项目。 用 VS Code 可视化开发 Vue Element UI 全流程指南 一、准备工作 安装 VS Code 官网下载安装:https://code…...

Django框架的前端部分使用Ajax请求一
Ajax请求 目录 1.ajax请求使用 2.增加任务列表功能(只有查看和新增) 3.代码展示集合 这篇文章, 要开始讲关于ajax请求的内容了。这个和以前文章中写道的Vue框架里面的axios请求, 很相似。后端代码, 会有一些细节点, 跟前几节文章写的有些区别。 一、ajax请求使用 我们先…...

cmd如何从C盘默认路径切换到D盘某指定目录
以从C盘cmd打开后的默认目录切换到目录"D:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld"为例 打开cmd 首先点击开始键,搜索cms,右键以管理员身份运行打开管理员端的命令行提示符 1、首先要先切换到D盘 直接输入D:然后回车就可以&…...
693SJBH基于.NET的题库管理系统
计算机与信息学院 本科毕业论文(设计)开题报告 论文中文题目 基于asp.net的题库管理系统设计与实现 论文英文题目 Asp.net based database management system design and Implementation 学生姓名 专业班级 XXXXXX专业08 班 ⒈选题的背景和意…...
[Vue]跨组件传值
父子组件传值 详情可以看文章 跨组件传值 Vue 的核⼼是单向数据流。所以在父子组件间传值的时候,数据通常是通过属性从⽗组件向⼦组件,⽽⼦组件通过事件将数据传递回⽗组件。多层嵌套场景⼀般使⽤链式传递的⽅式实现provideinject的⽅式适⽤于需要跨层级…...

每日Prompt:实物与手绘涂鸦创意广告
提示词 一则简约且富有创意的广告,设置在纯白背景上。 一个真实的 [真实物体] 与手绘黑色墨水涂鸦相结合,线条松散而俏皮。涂鸦描绘了:[涂鸦概念及交互:以巧妙、富有想象力的方式与物体互动]。在顶部或中部加入粗体黑色 [广告文案…...

学习笔记:黑马程序员JavaWeb开发教程(2025.4.8)
12.11 登录校验-Filter-详解(过滤器链) 过滤器链及其执行顺序,一个Filter一个过滤器链,类名排名越靠前(按照ABC这样的顺序),就先执行谁 12.12 登录校验-Filter-登录校验过滤器 获取请求参数&…...
vue3 在线播放语音 mp3
播放、暂停、停止 <template><div><button click"togglePlay">{{ isPlaying ? "暂停" : "播放" }}</button><button click"stopAudio">停止</button><p>播放进度:{{ Math.rou…...

Ubuntu部署私有Gitlab
这个东西安装其实挺简单的,但是因为我这边迁移了数据目录和使用自己安装的 nginx 代理还是踩了几个坑,所以大家可以注意下 先看下安装 # 先安装必要组件 sudo apt update sudo apt install -y curl openssh-server ca-certificates tzdata perl# 添加gi…...

genicamtl_lmi_gocator_objectmodel3d
目录 一、在halcon中找不到genicamtl_lmi_gocator_objectmodel3d例程二、在halcon中运行genicamtl_lmi_gocator_objectmodel3d,该如何配置三、代码分段详解(一)传感器连接四、代码分段详解(二)采集图像并显示五、代码分段详解(三)坐标变换六、常见问题一、在halcon中找不…...

[LevelDB]LevelDB版本管理的黑魔法-为什么能在不锁表的情况下管理数据?
文章摘要 LevelDB的日志管理系统是怎么通过双链表来进行数据管理为什么LevelDB能够在不锁表的情况下进行日志新增 适用人群: 对版本管理机制有开发诉求,并且希望参考LevelDB的版本开发机制。数据库相关从业者的专业人士。计算机狂热爱好者,对计算机的…...

bisheng系列(二)- 本地部署(前后端)
一、导读 环境:Ubuntu 24.04、open Euler 23.03、Windows 11、WSL 2、Python 3.10 、bisheng 1.1.1 背景:需要bisheng二开商用,故而此处进行本地部署,便于后期调试开发 时间:20250519 说明:bisheng前后…...

【网络编程】十二、两万字详解 IP协议
文章目录 Ⅰ. 基本概念1、网络层解决的问题2、保证数据可靠的从一台主机送到另一台主机的前提3、路径选择4、主机和路由器的区别 Ⅱ. IP协议格式IP如何将报头与有效载荷进行分离?IP如何决定将有效载荷交付给上层的哪一个协议?理解socket编程 Ⅲ. 分片与组…...

Linux探秘:驾驭开源,解锁高效能——基础指令
♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥ ♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥ ♥♥♥我们一起努力成为更好的自己~♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥ ✨✨✨✨✨✨ 个…...

WebSocket解决方案的一些细节阐述
今天我们来看看WebSocket解决方案的一些细节问题: 实际上,集成WebSocket的方法都有相关的工程挑战,这可能会影响项目成本和交付期限。在最简单的层面上,构建 WebSocket 解决方案似乎是添加接收实时更新功能的前进方向。但是&…...
大数据量下Redis分片的5种策略
随着业务规模的增长,单一Redis实例面临着内存容量、网络带宽和计算能力的瓶颈。 分片(Sharding)成为扩展Redis的关键策略,它将数据分散到多个Redis节点上,每个节点负责整个数据集的一个子集。 本文将分享5种Redis分片策略。 1. 取模分片(M…...
muduo库TcpServer模块详解
Muduo库核心模块——TcpServer Muduo库的TcpServer模块是一个基于Reactor模式的高性能TCP服务端实现,负责管理监听端口、接受新连接、分发IO事件及处理连接生命周期。 一、核心组件与职责 Acceptor 监听指定端口,接受新连接,通过epoll监听l…...

Java 代码生成工具:如何快速构建项目骨架?
Java 代码生成工具:如何快速构建项目骨架? 在 Java 项目开发过程中,构建项目骨架是一项繁琐但又基础重要的工作。幸运的是,Java 领域有许多代码生成工具可以帮助我们快速完成这一任务,大大提高开发效率。 一、代码生…...

Nginx核心服务
一.正向代理 正向代理(Forward Proxy)是一种位于客户端和原始服务器之间的代理服务器,其主要作用是将客户端的请求转发给目标服务器,并将响应返回给客户端 Nginx 的 正向代理 充当客户端的“中间人”,代…...

第22天-Python ttkbootstrap 界面美化指南
环境安装 pip install ttkbootstrap 示例1:基础主题切换器 import ttkbootstrap as ttk from ttkbootstrap.constants import *def create_theme_switcher():root = ttk.Window(title="主题切换器", themename="cosmo")def change_theme():selected = t…...

Kubernetes控制平面组件:Kubelet详解(七):容器网络接口 CNI
云原生学习路线导航页(持续更新中) kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计(一)Kubernetes架构原则和对象设计(二)Kubernetes架构原则和对象设计(三)Kubernetes控…...

web应用技术第6次课---Apifox的使用
Apifox - API 文档、调试、Mock、测试一体化协作平台。拥有接口文档管理、接口调试、Mock、自动化测试等功能,接口开发、测试、联调效率,提升 10 倍。最好用的接口文档管理工具,接口自动化测试工具。 第一个问题:为什么需要用Apif…...
Flutter与Kotlin Multiplatform(KMP)深度对比及鸿蒙生态适配解析
Flutter 与 Kotlin Multiplatform(KMP)深度对比及鸿蒙生态适配解析 在跨平台开发领域,Flutter 与 Kotlin Multiplatform(KMP)代表了两种不同的技术路线:前者以 “统一 UI 体验” 为核心,后者以…...
Predict Podcast Listening Time-(回归+特征工程+xgb)
Predict Podcast Listening Time 题意: 给你每个播客的信息,让你预测观众的聆听时间。 数据处理: 1.构造新特征收听效率进行分组 2.对数据异常处理 3.对时间情绪等进行数值编码 4.求某特征值求多项式特征 5.生成特征组合 6.交叉验证并enc…...

Redis队列与Pub/Sub方案全解析:原理、对比与实战性能测试
一、为什么选择Redis实现消息队列? Redis凭借其内存级操作(微秒级响应)、丰富的数据结构以及持久化能力,成为构建高性能消息队列的热门选择。相比传统消息队列(如Kafka/RabbitMQ),Redis在以下场…...
深度估计中为什么需要已知相机基线(known camera baseline)?
在计算机视觉和立体视觉的上下文中,“已知相机基线”(known camera baseline)的解释 1. 相机基线的定义 相机基线是指两个相机中心之间的距离。在立体视觉系统中,通常有两个相机(或一个相机在不同位置拍摄两张图像&a…...
显卡、Cuda和pytorch兼容问题
这里写目录标题 驱动与CUDA版本兼容性问题1. **驱动与CUDA版本兼容性问题**2. **任务特性与硬件适配差异**3. **优化策略与框架配置差异**4. **散热与功耗限制**5. **数据传输与CPU瓶颈**排查建议总结 查询PyTorch中实际使用的CUDA版本**1. 查询PyTorch中实际使用的CUDA版本***…...
SseEmitter是什么
SseEmitter 是 Spring Framework 中用于实现 Server-Sent Events (SSE) 的一个类。SSE 是一种允许服务器向客户端推送实时更新的技术,特别适合需要从服务器到客户端的单向消息传递场景,如股票价格更新、社交媒体的新消息通知等。 Server-Sent Events (S…...

OBOO鸥柏丨AI数字人触摸屏查询触控人脸识别语音交互一体机上市
OBOO鸥柏丨AI数字人触摸屏查询触控人脸识别语音交互一体机上市分析 OBOO鸥柏品牌推出的AI数字人触摸屏查询触控人脸识别语音交互一体机,是其在智能交互设备领域的又一创新产品。该一体机整合了触摸屏查询、AI人脸识别、AI声源定位语音麦克风,触控交互以…...