DM 的断点续传测试
作者: 大鱼海棠 原文来源: https://tidb.net/blog/4540ae34
一、概述
DM有all、full、incremental三种数据迁移同步方式(task-mode),在all同步模式下,因一些特殊情况,需要变更上游MySQL的数据源IP,一般有如下几种处理方式:
- 放弃已同步的数据,重新用all模式同步(适合数据量比较小的场景,操作简单)
- 记录同步到的位点信息,停掉task和数据源,将同步模式改为incremental并在task配置中指定MySQL示例的位点信息重新拉起任务
task中meta配置下游数据库的 checkpoint 不存在时 binlog 迁移开始的位置; 如果 checkpoint 存在,则以 checkpoint 为准。如果 meta 项和下游数据库的 checkpoint 都不存在,则从上游当前最新的 binlog 位置开始迁移
- 不修改task-mode的情况下,基于检查点断点续传, 本文主要基于该场景测试
二、MySQL环境准备
mysql
set global validate_password_mixed_case_count=0;
set global validate_password_policy='LOW';
set global validate_password_number_count=0;
set global validate_password_special_char_count=0;
set global validate_password_length=4;
alter user root@'localhost' identified by 'dm_test';
配置文件
[mysqld]
datadir=/mysql57/data
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
binlog_format=ROW
log_bin=/mysql57/logbin/logbin
log-error=/mysql57/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
gtid_mode=ON
enforce_gtid_consistency=ON
# 主从使用不同的server_id
server_id=2
# 从库开启binlog记录
log-slave-updates = 1
主从搭建
reset master;
change master to master_host='172.1.1.4', master_user='root', master_password='dm_test', master_port=3306, master_auto_position=1;
start slave;
show slave status\G
三、DM任务创建
1. 创建数据源
创建数据源配置文件
[tidb@vm10-2-103-112 ~]$ cat source-01.yaml
source-id: "mysql-01"
enable-gtid: true from: host: "172.1.1.2" port: 3306 user: "root" password: "dm_test"
上游数据源账户所需权限
上游数据源用户所需权限:
- information_schem和需要同步的表的select权限
- reload权限
- REPLICATION CLIENT、REPLICATION SLAVE
创建数据源
tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 operate-source create ./source-01.yaml
查看创建的数据源
tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 config source mysql-01
2. 创建同步任务
task配置文件准备
vim task01.yamlname: test1
task-mode: all
shard-mode: "pessimistic" meta-schema: "dm_meta1"
# timezone: "Asia/Shanghai" case-sensitive: false
online-ddl: true
clean-dump-file: true # 是否清理 dump 阶段产生的文件,包括 metadata 文件、建库建表 SQL 文件以及数据导入 SQL 文件
collation_compatible: "loose" # 同步 CREATE 语句中缺省 Collation 的方式,可选 "loose" 和 "strict",默认为 "loose"。"loose" 模式不会显式补充上游缺省的 Collation,"strict" 会显式补充上游缺省的 Collation。当使用 "strict" 模式,但下游不支持上游缺省的 Collation 时,下游可能会报错。
ignore-checking-items: [] target-database:host: "172.1.1.4"port: 4000user: "dm_test"password: "dm_test" block-allow-list: bw-rule-1: do-dbs: ["dm_test.*"]mydumpers: global: threads: 4 chunk-filesize: 64 extra-args: "--consistency auto" loaders: global: pool-size: 16dir: "./dumped_data"import-mode: "logical"on-duplicate-logical: "replace"syncers: global: worker-count: 16 batch: 100 safe-mode: falsesafe-mode-duration: "60s"compact: falsemultiple-rows: false
# ----------- 实例配置 -----------
mysql-instances:-source-id: "mysql-01"block-allow-list: "bw-rule-1"mydumper-config-name: "global"loader-config-name: "global"syncer-config-name: "global"
下游tidb同步用户所需权限:
- 待同步库表的SELECT、INSERT、UPDATE、DELETE、CREATE、DROP、ALTER、INDEX权限
- dm元数据库表的 ALL 权限
前置检查
tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 check-task ./task01.yaml
创建task
tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 start-task ./task01.yaml
查看同步状态
tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 query-status test1
四、单实例更换数据源IP
验证不修改task配置,直接更换数据源IP
1. 不修改source-id
Stop 任务和数据源
tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 stop-task test1
tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 operate-source stop mysql-01
仅修改数据源IP
source-id: "mysql-01"
enable-gtid: true from: host: "120.1.1.115" port: 3306 user: "root" password: "dm_test"
创建数据源和task
tiup dmctl:v7.1.3 --master-addr 172.16.201.4:8261 operate-source create ./source-01.yaml
tiup dmctl:v7.1.3 --master-addr 172.16.201.4:8261 start-task ./task01.yaml
tiup dmctl:v7.1.3 --master-addr 172.16.201.4:8261 query-status test1
验证同步无异常
不改变source-id的情况下,dm会去元数据表中找到断点,进行断点续传,不会重新dump数据
2. 修改source-id
tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 stop-task test1
tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 operate-source stop mysql-01
修改数据源IP和source-id
source-id: "mysql-02"
enable-gtid: true from: host: "172.1.1.2" port: 3306 user: "root" password: "dm_test"
创建数据源和task
需要修改task01.yaml的数据源
tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 operate-source create ./source-01.yaml
tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 start-task ./task01.yaml
tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 query-status test1
验证同步无异常
修改了source-id的情况下,会触发重新dump全量数据
3. 更换IP期间新增了表
在停掉task和数据源后,模拟MySQL增加表和数据(只修改数据源IP)
mysql> create table t3(id int primary key,b int);
Query OK, 0 rows affected (0.04 sec) mysql> insert into t3 values (1,1);
Query OK, 1 row affected (0.01 sec) mysql> insert into t3 values (2,1);
Query OK, 1 row affected (0.01 sec)
修改数据源IP后,创建task
tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 operate-source create ./source-01.yaml
tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 start-task ./task01.yaml
tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 query-status test1
同步无异常,未dump全量数据
检查点分为针对单表的同步位点和数据源的同步位点,如果存在当前表的位点,则基于位点继续同步,如不存在,基于数据源位点往后同步
五、分片集群修改数据源IP
环境准备
基于单实例的环境,新增MySQL节点来测试
数据源配置
source-id: "mysql-04"
enable-gtid: true from: host: "172.1.1.4" port: 3306 user: "root" password: "dm_test"
task配置
name: test2
task-mode: all
shard-mode: "pessimistic" meta-schema: "dm_meta2"
# timezone: "Asia/Shanghai" case-sensitive: false
online-ddl: true
clean-dump-file: false # 是否清理 dump 阶段产生的文件,包括 metadata 文件、建库建表 SQL 文件以及数据导入 SQL 文件
collation_compatible: "loose" # 同步 CREATE 语句中缺省 Collation 的方式,可选 "loose" 和 "strict",默认为 "loose"。"loose" 模式不会显式补充上游缺省的 Collation,"strict" 会显
式补充上游缺省的 Collation。当使用 "strict" 模式,但下游不支持上游缺省的 Collation 时,下游可能会报错。
ignore-checking-items: [] target-database: host: "172.1.1.4" port: 4000 user: "dm_test" password: "dm_test" block-allow-list: bw-rule-1: do-dbs: ["dm_test"] mydumpers: global: threads: 4 chunk-filesize: 64 extra-args: "--consistency auto" loaders: global: pool-size: 16 dir: "./dumped_data" import-mode: "logical" on-duplicate-logical: "replace" syncers: global: worker-count: 16 batch: 100 safe-mode: false safe-mode-duration: "60s" compact: false multiple-rows: false
# ----------- 实例配置 -----------
mysql-instances: - source-id: "mysql-04" block-allow-list: "bw-rule-1" mydumper-config-name: "global" loader-config-name: "global" syncer-config-name: "global"
创建数据源和任务
tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 operate-source create ./source-02.yaml
tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 start-task ./task01.yaml
tiup dmctl:v7.1.3 --master-addr 172.1.1.4:8261 query-status test2
重复单实例数据源IP修改过程,验证结果与单实例一致
六、总结
断点续传来源于dm元数据信息(dm_meta库的表记录信息),主要包含以下几点
- task.yaml的name的值
- task.yaml的meta-schema是否改变
- 数据源配置中source-id是否改变
如有其他变更项,可结合检查点进行分析,通过检查点信息是否改变来判断是否可以断点续传
前提:
-
使用
query-status
命令获取当前 binlog replication 处理单元已复制到下游的 binlog 对应的 GTID sets (syncerBinlogGtid
),记为gtid-S
。 -
在将要切换到的 MySQL 实例上使用
SELECT @@GLOBAL.gtid_purged;
获取已经被 purged 的 binlog 对应的 GTID sets,记为gtid-P
。 -
在将要切换到的 MySQL 实例上使用
SELECT @@GLOBAL.gtid_executed;
获取所有已经执行成功的事务对应的 GTID sets,记为gtid-E
。 -
确保满足以下关系,否则不支持将 DM-worker 连接切换到相应的 MySQL 实例:
-
gtid-S
包含gtid-P
(gtid-P
可以为空) -
gtid-E
包含gtid-S
-
七、附加测试
1. 测试一
数据源的配置文件默认 enable-gtid: false
,现验证同步过程中,是否可修改该参数
验证修改后同步正常,在 enable-gtid: false
情况下,检查点会同时携带position信息和gitd信息,修改后可基于位点断点续传
2. 测试二
DM配置文件 extra-args: "--consistency none"
默认值为none,none的官网解释是不做一致性保障
none模式下
2024-06-21T08:23:44.159963Z 18511 Query SELECT @@max_allowed_packet
2024-06-21T08:23:44.160052Z 18511 Query SET time_zone = '+08:00'
2024-06-21T08:23:44.160149Z 18511 Query SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
2024-06-21T08:23:44.160242Z 18511 Query START TRANSACTION /*!40108 WITH CONSISTENT SNAPSHOT */
2024-06-21T08:23:44.160343Z 18511 Query SHOW MASTER STATUS
2024-06-21T08:23:44.160534Z 18511 Query SHOW SLAVE STATUS
2024-06-21T08:23:44.160731Z 18511 Query SHOW DATABASES 2024-06-21T08:23:44.161956Z 18511 Query SELECT COUNT(1) as c FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='SEQUENCE'
2024-06-21T08:23:44.171027Z 18511 Query SHOW TABLE STATUS FROM `dm_test`
2024-06-21T08:23:44.174675Z 18511 Query SHOW MASTER STATUS
2024-06-21T08:23:44.174826Z 18511 Query SHOW CREATE DATABASE `dm_test`
2024-06-21T08:23:44.174981Z 18511 Query SHOW COLUMNS FROM `dm_test`.`customer`
2024-06-21T08:23:44.175584Z 18511 Query SELECT `c_id`,`c_d_id`,`c_w_id`,`c_first`,`c_middle`,`c_last`,`c_street_1`,`c_street_2`,`c_city`,`c_state`,`c_zip`,`c_phone`,`c_
since`,`c_credit`,`c_credit_lim`,`c_discount`,`c_balance`,`c_ytd_payment`,`c_payment_cnt`,`c_delivery_cnt`,`c_data` FROM `dm_test`.`customer` LIMIT 1
2024-06-21T08:23:44.178285Z 18511 Query SHOW CREATE TABLE `dm_test`.`customer`
2024-06-21T08:23:44.178529Z 18511 Query SHOW INDEX FROM `dm_test`.`customer`
2024-06-21T08:23:44.178805Z 18511 Query EXPLAIN SELECT `c_w_id` FROM `dm_test`.`customer`
2024-06-21T08:23:44.179002Z 18511 Query SHOW INDEX FROM `dm_test`.`customer`
2024-06-21T08:23:44.179269Z 18511 Query SHOW INDEX FROM `dm_test`.`customer`
2024-06-21T08:23:44.179510Z 18511 Query EXPLAIN SELECT `c_w_id` FROM `dm_test`.`customer`
2024-06-21T08:23:44.179748Z 18511 Query SELECT MIN(`c_w_id`),MAX(`c_w_id`) FROM `dm_test`.`customer` 2024-06-21T08:23:44.173952Z 18512 Query SELECT @@max_allowed_packet
2024-06-21T08:23:44.174104Z 18512 Query SET time_zone = '+08:00'
2024-06-21T08:23:44.174281Z 18512 Query SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
2024-06-21T08:23:44.174546Z 18512 Query START TRANSACTION /*!40108 WITH CONSISTENT SNAPSHOT */
2024-06-21T08:23:44.182494Z 18512 Query SELECT `c_id`,`c_d_id`,`c_w_id`,`c_first`,`c_middle`,`c_last`,`c_street_1`,`c_street_2`,`c_city`,`c_state`,`c_zip`,`c_phone`,`c_
2024-06-21T08:23:45.888538Z 18512 Query SELECT `d_id`,`d_w_id`,`d_name`,`d_street_1`,`d_street_2`,`d_city`,`d_state`,`d_zip`,`d_tax`,`d_ytd`,`d_next_o_id` FROM `dm_test`.`district` ORDER BY `d_w_id`,`d_id`
2024-06-21T08:23:45.889394Z 18512 Query SELECT `h_c_id`,`h_c_d_id`,`h_c_w_id`,`h_d_id`,`h_w_id`,`h_date`,`h_amount`,`h_data` FROM `dm_test`.`history` WHERE `h_w_id` IS NULL OR (`h_w_id` >= 1 AND `h_w_id` < 11)
2024-06-21T08:23:46.281664Z 18512 Query SELECT `i_id`,`i_im_id`,`i_name`,`i_price`,`i_data` FROM `dm_test`.`item` ORDER BY `i_id`
2024-06-21T08:23:46.352202Z 18512 Query SELECT `no_o_id`,`no_d_id`,`no_w_id` FROM `dm_test`.`new_order` ORDER BY `no_w_id`,`no_d_id`,`no_o_id`
none模式使用 SESSION RR
隔离级别 和 START TRANSACTION /*!40108 WITH CONSISTENT SNAPSHOT */
来构建一致性视图,不存在非事务引擎表的时候,操作比FTWRL轻量
注意:
- 备份期间有DDL的话,有几率触发锁等待,原因为DM开启了两个
START TRANSACTION /*!40108 WITH CONSISTENT SNAPSHOT */ SESSION
,一个用来看表结构、构造导出执行计划、查看索引等;另外一个用来dump数据,如果期间有DDL,有几率出现等MDL锁的情况(图一) - 不开启FTWRL的话,那么backupmeta的gtid信息有可能是不准的(show master status获取的是当前值,不受
START TRANSACTION /*!40108 WITH CONSISTENT SNAPSHOT */
限制)。备份文件 metadata 记录的位点可能比 dumped data 要早,可以开启safe-mode来规避(不能完全避免),DM会自行记录两次show master status
位点信息来判断是否进入safe-mode,以及何时退出safe-mode。
auto模式下
2024-06-21T09:31:56.773773Z 18684 Connect root@vm10-2-103-3 on using SSL/TLS
2024-06-21T09:31:56.776319Z 18684 Query SELECT version()
2024-06-21T09:31:56.776529Z 18684 Query FLUSH TABLES WITH READ LOCK
2024-06-21T09:31:56.778052Z 18684 Query UNLOCK TABLES
2024-06-21T09:31:56.778166Z 18684 Query SET SESSION time_zone = '+08:00'
2024-06-21T09:31:56.778236Z 18684 Quit
2024-06-21T09:31:56.780010Z 18685 Connect root@vm10-2-103-3 on using SSL/TLS
2024-06-21T09:31:56.780202Z 18685 Query SET time_zone = '+08:00'
2024-06-21T09:31:56.780405Z 18685 Query FLUSH TABLES WITH READ LOCK
2024-06-21T09:31:56.783146Z 18686 Connect root@vm10-2-103-3 on using SSL/TLS
2024-06-21T09:31:56.783335Z 18686 Query SET time_zone = '+08:00'
2024-06-21T09:31:56.783421Z 18686 Query SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
2024-06-21T09:31:56.783518Z 18686 Query START TRANSACTION /*!40108 WITH CONSISTENT SNAPSHOT */
2024-06-21T09:31:56.783611Z 18686 Query SHOW MASTER STATUS
2024-06-21T09:31:56.783755Z 18686 Query SHOW SLAVE STATUS
2024-06-21T09:31:56.786107Z 18686 Query SHOW DATABASES
2024-06-21T09:31:56.786563Z 18686 Query SELECT COUNT(1) as c FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='SEQUENCE'
2024-06-21T09:31:56.916141Z 18686 Query SHOW TABLE STATUS FROM `dm_test`
2024-06-21T09:31:56.919220Z 18687 Connect root@vm10-2-103-3 on using SSL/TLS
2024-06-21T09:31:56.919398Z 18687 Query SET time_zone = '+08:00'
2024-06-21T09:31:56.919483Z 18687 Query SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
2024-06-21T09:31:56.919570Z 18687 Query START TRANSACTION /*!40108 WITH CONSISTENT SNAPSHOT */
2024-06-21T09:31:56.919726Z 18685 Query UNLOCK TABLES
相对于mysqldump少了flush table的步骤(mysqldump在执行FTWRL前会执行flush tables),直接执行了FTWRL,第一次做权限探测,第二次执行备份
结论
结合业务应用情况综合考虑,选择auto/none模式
相关文章:

DM 的断点续传测试
作者: 大鱼海棠 原文来源: https://tidb.net/blog/4540ae34 一、概述 DM有all、full、incremental三种数据迁移同步方式(task-mode),在all同步模式下,因一些特殊情况,需要变更上游MySQL的数…...

力扣每日一题 6/30 记忆化搜索/动态规划
博客主页:誓则盟约系列专栏:IT竞赛 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ 494.目标和【中等】 题目: 给你一个非负整数数组 nums 和一个…...

图像基础知识入门【图像概念不同图像格式】
图像基础知识入门【图像概念&不同图像格式】 最近有在处理图像转换,因此稍微补足了一下图像相关知识,特在此记录。下面汇总是我根据自己理解和网上查阅资料而来。如有错误,欢迎大家指正。 1 基础概念 像素/分辨率 像素(Pixel)ÿ…...
HP服务器基于SNMP-ilo4的硬件监控指标解读
监控易是一款功能全面的IT基础设施监控软件,它通过SNMP协议与HP服务器内置的ilo4远程管理卡进行通信,实现对HP服务器硬件状态的实时监控。本文将针对监控易中基于SNMP-ilo4的HP服务器硬件监控指标进行解读,帮助运维团队更好地理解和应用这些监…...
Android13系统导航栏添加音量加减键按钮功能
不知道为什么拿到芯片原厂发布给我们的Android13系统源码编译后,导航栏没有音量加减键,客户有反馈这个问题,所以特意加了一下,修改记录如下:frameworks/base目录下 commit 9cb2244d61a237cab03c540bfcca6e4fac2bea2c …...

普及GIS知识,推动产业发展
915 GIS节:普及GIS知识,推动产业发展 自2008年起,每年的9月15日被定为“GIS节”,这一特殊的节日由超图首次发起倡议,旨在打造一个普及和传播GIS(地理信息系统)知识的平台,促进大众对…...

第2章-Python编程基础
#本章目标 1,了解什么是计算机程序 2,了解什么是编程语言 3,了解编程语言的分类 4,了解静态语言与脚本语言的区别 5,掌握IPO程序编写方法 6,熟练应用输出函数print与输入函数input 7,掌握Python…...

LDO产品的基础知识解析
低压降稳压器 (LDO)是一种用于调节较高电压输入产生的输出电压的简单方法。在大多数情况下,低压降稳压器都易于设计和使用。然而,如今的现代应用都包括各种各样的模拟和数字系统,而有些系统和工作条件将决定哪种LDO最适合相关电路,…...

如何利用python画出AHP-SWOT的战略四边形(四象限图)
在企业或产业发展的相关论文分析中,常用到AHP-SWOT法进行定量分析,形成判断矩阵后,如何构造整洁的战略四边形是分析的最后一个环节,本文现将相关代码发布如下: import mpl_toolkits.axisartist as axisartist import …...

适用于智慧城市、智慧文旅等在线场景的轻量级3D数字人引擎MyAvatar简介
本人研发的国内首个纯面向web应用和小程序的轻量级3D虚拟人引擎MyAvatar。 功能简述 支持3D模型定制(写实或卡通风格均可,人物模型需实现绑定和变形)动画可以内置于模型中,也可以单独以glb或fbx格式导出并动态加载支持readyplay…...

Excel显示/隐藏批注按钮为什么是灰色?
在excel中,经常使用批注来加强数据信息的提示,有时候会把很多的批注显示出来,但是再想将它们隐藏起来,全选工作表后,“显示/隐藏批注”按钮是灰色的,不可用。 二、可操作方法 批注在excel、WPS表格中都是按…...

ArtTS系统能力-通知的学习(3.1)
上篇回顾: ArtTS语言基础类库-容器类库内容的学习(2.10.2) 本篇内容: ArtTS系统能力-通知的学习(3.1) 一、 知识储备 1. 基础类型通知 按内容分成四类: 类型描述NOTIFICATION_CONTENT_BASIC_TEXT普通文…...
Apollo9.0 PNC源码学习之Planning模块(三)—— public_road_planner
前面文章: (1)Apollo9.0 PNC源码学习之Planning模块(一)—— 规划概览 (2)Apollo9.0 PNC源码学习之Planning模块(二)—— planning_component 1 planning_interface_base 规划接口基类: planning\planning_interface_base\planner_base\planner.h #pragma once#in…...

【Elasticsearch】linux使用supervisor常驻Elasticsearch,centos6.10安装 supervisor
背景: linux服务器,CentOS 6操作系统,默认版本python2.6.6,避免安装过多的依赖不升级python 在网上查的资料python2.6.6兼容supervisor版本 3.1.3 安装supervisor 手动在python官网下载supervisor,并上传到服务器 下…...

推荐系统三十六式学习笔记:原理篇.模型融合14|一网打尽协同过滤、矩阵分解和线性模型
目录 从特征组合说起FM模型1.原理2.模型训练3.预测阶段4.一网打尽其他模型5.FFM 总结 在上一篇文章中,我们讲到了使用逻辑回归和梯度提升决策树组合的模型融合办法,用于CTR预估,给这个组合起了个名字,叫“辑度组合”。这对组合中&…...

如何使用mapXplore将SQLMap数据转储到关系型数据库中
关于mapXplore mapXplore是一款功能强大的SQLMap数据转储与管理工具,该工具基于模块化的理念开发,可以帮助广大研究人员将SQLMap数据提取出来,并转储到类似PostgreSQL或SQLite等关系型数据库中。 功能介绍 当前版本的mapXplore支持下列功能…...

JAVA设计模式-大集合数据拆分
背景 我们在做软件开发时,经常会遇到把大集合的数据,拆分成子集合处理。例如批量数据插入数据库时,一次大约插入5000条数据比较合理,但是有时候待插入的数据远远大于5000条。这时候就需要进行数据拆分。数据拆分基本逻辑并不复杂&…...

如何使用sr2t将你的安全扫描报告转换为表格格式
关于sr2t sr2t是一款针对安全扫描报告的格式转换工具,全称为“Scanning reports to tabular”,该工具可以获取扫描工具的输出文件,并将文件数据转换为表格格式,例如CSV、XLSX或文本表格等,能够为广大研究人员提供一个…...

ansible自动化运维,(2)ansible-playbook
三种常见的数据格式: XML:可扩展标记语言,用于数据交换和配置 JSON:对象标记法,主要用来数据交换或配置,不支持注释 YAML:不是一种标记语言,主要用来配置,大小写敏感&…...

一分钟学习数据安全—自主管理身份SSI分布式标识DID介绍
SSI标准化的两大支柱,一个是VC,之前简单介绍过,另一个就是DID。基本层次上,DID就是一种新型的全局唯一标识符,跟浏览器的URL没有什么不同。深层次上,DID是互联网分布式数字身份和PKI新层级的原子构件。 一…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...

微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...

初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...
LangFlow技术架构分析
🔧 LangFlow 的可视化技术栈 前端节点编辑器 底层框架:基于 (一个现代化的 React 节点绘图库) 功能: 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...
SpringAI实战:ChatModel智能对话全解
一、引言:Spring AI 与 Chat Model 的核心价值 🚀 在 Java 生态中集成大模型能力,Spring AI 提供了高效的解决方案 🤖。其中 Chat Model 作为核心交互组件,通过标准化接口简化了与大语言模型(LLM࿰…...
Python的__call__ 方法
在 Python 中,__call__ 是一个特殊的魔术方法(magic method),它允许一个类的实例像函数一样被调用。当你在一个对象后面加上 () 并执行时(例如 obj()),Python 会自动调用该对象的 __call__ 方法…...
HTML中各种标签的作用
一、HTML文件主要标签结构及说明 1. <!DOCTYPE html> 作用:声明文档类型,告知浏览器这是 HTML5 文档。 必须:是。 2. <html lang“zh”>. </html> 作用:包裹整个网页内容,lang"z…...

Element-Plus:popconfirm与tooltip一起使用不生效?
你们好,我是金金金。 场景 我正在使用Element-plus组件库当中的el-popconfirm和el-tooltip,产品要求是两个需要结合一起使用,也就是鼠标悬浮上去有提示文字,并且点击之后需要出现气泡确认框 代码 <el-popconfirm title"是…...