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

Require:利用MySQL binlog实现闪回操作

1,闪回原理

【binlog】MySQL binlog以event的形式,记录了MySQL server从启用binlog以来所有的变更信息,能够帮助重现这之间的所有变化。MySQL引入binlog主要有两个目的:一是为了主从复制;二是某些备份还原操作后需要重新应用binlog。

有三种可选的binlog格式,各有优缺点:

  • statement:基于SQL语句的模式,binlog数据量小,但是某些语句和函数在复制过程可能导致数据不一致甚至出错;
  • row:基于行的模式,记录的是行的完整变化。很安全,但是binlog会比其他两种模式大很多;
  • mixed:混合模式,根据语句来选用是statement还是row模式;

利用binlog闪回,需要将binlog格式设置为row。row模式下,一条使用innodb的insert会产生如下格式的binlog:

# at 1129
#161225 23:15:38 server id 3773306082  end_log_pos 1197         Query   thread_id=1903021       exec_time=0     error_code=0
SET TIMESTAMP=1482678938/*!*/;
BEGIN
/*!*/;
# at 1197
#161225 23:15:38 server id 3773306082  end_log_pos 1245         Table_map: `test`.`user` mapped to number 290
# at 1245
#161225 23:15:38 server id 3773306082  end_log_pos 1352         Write_rows: table id 290 flags: STMT_END_FBINLOG '
muJfWBPiFOjgMAAAAN0EAAAAACIBAAAAAAEABHRlc3QABHVzZXIAAwMPEQMeAAAC
muJfWB7iFOjgawAAAEgFAAAAACIBAAAAAAEAAgAD//gBAAAABuWwj+i1tVhK1hH4AgAAAAblsI/p
krFYStYg+AMAAAAG5bCP5a2ZWE/onPgEAAAABuWwj+adjlhNeAD4BQAAAAJ0dFhRYJM=
'/*!*/;
# at 1352
#161225 23:15:38 server id 3773306082  end_log_pos 1379         Xid = 5327954
COMMIT/*!*/;

【闪回原理】既然binlog以event形式记录了所有的变更信息,因此闪回就是把需要回滚的event,从后往前回滚回去即可。对于单个event的回滚,以表test.user为例:

mysql> show create table test.user\G
*************************** 1. row ***************************Table: user
Create Table: CREATE TABLE `user` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(10) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8
  • 对于delete操作,从binlog提取出delete信息,生成的回滚语句是insert。(注:为了方便解释,用binlog2sql将原始binlog转化成了可读SQL)
 原始:DELETE FROM `test`.`user` WHERE `id`=1 AND `name`='小赵';回滚:INSERT INTO `test`.`user`(`id`, `name`) VALUES (1, '小赵');
  • 对于insert操作,回滚SQL是delete。
 原始:INSERT INTO `test`.`user`(`id`, `name`) VALUES (2, '小钱');回滚:DELETE FROM `test`.`user` WHERE `id`=2 AND `name`='小钱';
  • 对于update操作,回滚sql应该交换SET和WHERE的值。
 原始:UPDATE `test`.`user` SET `id`=3, `name`='小李' WHERE `id`=3 AND `name`='小孙';回滚:UPDATE `test`.`user` SET `id`=3, `name`='小孙' WHERE `id`=3 AND `name`='小李';

2,闪回工具

【第一类】以patch形式集成到官方工具mysqlbinlog中。以彭提交的patch为代表。

  • 上手成本低。mysqlbinlog原有的选项都能直接利用,只是多加了一个闪回选项。闪回特性未来有可能被官方收录。
  • 支持离线解析。
  • 兼容性差、项目活跃度不高。由于binlog格式的变动,如果闪回工具作者不及时对补丁升级,则闪回工具将无法使用。目前已有多位人员分别针对mysql5.5,5.6,5.7开发了patch,部分项目代码公开,但总体上活跃度都不高。
  • 难以添加新功能,实战效果欠佳。在实战中,经常会遇到现有patch不满足需求的情况,比如要加个表过滤,很简单的一个需求,代码改动也不会大,但对大部分DBA来说,改mysql源码还是很困难的事。
  • 安装稍显麻烦。需要对mysql源码打补丁再编译生成。

【第二类】独立工具,通过伪装成slave拉取binlog来进行处理。以binlog2sql为代表。

  • 兼容性好。伪装成slave拉binlog这项技术在业界应用的非常广泛,多个开发语言都有这样的活跃项目,MySQL版本的兼容性由这些项目搞定,闪回工具的兼容问题不再突出。
  • 添加新功能的难度小。更容易被改造成DBA自己喜欢的形式。更适合实战。
  • 安装和使用简单。
  • 必须开启MySQL server。

【第三类】简单脚本。先用mysqlbinlog解析出文本格式的binlog,再根据回滚原理用正则进行匹配并替换。

  • 脚本写起来方便,往往能快速搞定某个特定问题。
  • 安装和使用简单。
  • 支持离线解析。
  • 通用性不好。
  • 可靠性不好。

【关于DDL的闪回】如果误操作是DDL的话,是无法利用binlog做快速回滚的,因为即使在row模式下,binlog对于DDL操作也不会记录每行数据的变化。要实现DDL快速回滚,必须修改MySQL源码,使得在执行DDL前先备份老数据。目前有多个mysql定制版本实现了DDL闪回特性,阿里林晓斌团队提交了patch给MySQL官方,MariaDB预计在不久后加入包含DDL的flashback特性。DDL闪回的副作用是会增加额外存储。

3,使用方式

真实的闪回场景中,最关键的是能快速筛选出真正需要回滚的SQL。使用开源工具binlog2sql来进行实战演练。binlog2sql由美团点评DBA团队(上海)出品。

https://github.com/danfengcao/binlog2sql

MySQL server必须设置以下参数:

[mysqld]
server_id = 1
log_bin = /var/log/mysql/mysql-bin.log
max_binlog_size = 1G
binlog_format = row
binlog_row_image = full
systemctl restart mysqld

user需要的最小权限集合:

select, super/replication client, replication slave建议授权
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 
  • select:需要读取server端information_schema.COLUMNS表,获取表结构的元信息,拼接成可视化的sql语句。
  • super/replication client:两个权限都可以,需要执行'SHOW MASTER STATUS', 获取server端的binlog列表。
  • replication slave:通过BINLOG_DUMP协议获取binlog内容的权限。

【解析出标准SQL】

shell> python binlog2sql.py -h127.0.0.1 -P3306 -uadmin -p'admin' -dtest -t test3 test4 --start-file='mysql-bin.000002'输出:
INSERT INTO `test`.`test3`(`addtime`, `data`, `id`) VALUES ('2016-12-10 13:03:38', 'english', 4); #start 570 end 736
UPDATE `test`.`test3` SET `addtime`='2016-12-10 12:00:00', `data`='中文', `id`=3 WHERE `addtime`='2016-12-10 13:03:22' AND `data`='中文' AND `id`=3 LIMIT 1; #start 763 end 954
DELETE FROM `test`.`test3` WHERE `addtime`='2016-12-10 13:03:38' AND `data`='english' AND `id`=4 LIMIT 1; #start 981 end 1147
  • mysql连接配置:
-h host; -P port; -u user; -p password
  • 解析模式:
--stop-never 持续解析binlog。可选。默认False,同步至执行命令时最新的binlog位置。-K, --no-primary-key 对INSERT语句去除主键。可选。默认False-B, --flashback 生成回滚SQL,可解析大文件,不受内存限制。可选。默认False。与stop-never或no-primary-key不能同时添加。--back-interval -B模式下,每打印一千行回滚SQL,加一句SLEEP多少秒,如不想加SLEEP,请设为0。可选。默认1.0。
  • 解析范围控制:
--start-file 起始解析文件,只需文件名,无需全路径 。必须。--start-position/--start-pos 起始解析位置。可选。默认为start-file的起始位置。--stop-file/--end-file 终止解析文件。可选。默认为start-file同一个文件。若解析模式为stop-never,此选项失效。--stop-position/--end-pos 终止解析位置。可选。默认为stop-file的最末位置;若解析模式为stop-never,此选项失效。--start-datetime 起始解析时间,格式'%Y-%m-%d %H:%M:%S'。可选。默认不过滤。--stop-datetime 终止解析时间,格式'%Y-%m-%d %H:%M:%S'。可选。默认不过滤。
  • 对象过滤:
-d, --databases 只解析目标db的sql,多个库用空格隔开,如-d db1 db2。可选。默认为空。-t, --tables 只解析目标table的sql,多张表用空格隔开,如-t tbl1 tbl2。可选。默认为空。--only-dml 只解析dml,忽略ddl。可选。默认False。--sql-type 只解析指定类型,支持INSERT, UPDATE, DELETE。多个类型用空格隔开,如--sql-type INSERT DELETE。可选。默认为增删改都解析。用了此参数但没填任何类型,则三者都不解析。

【解析出回滚SQL】


shell> python binlog2sql.py --flashback -h127.0.0.1 -P3306 -uadmin -p'admin' -dtest -ttest3 --start-file='mysql-bin.000002' --start-position=763 --stop-position=1147输出:
INSERT INTO `test`.`test3`(`addtime`, `data`, `id`) VALUES ('2016-12-10 13:03:38', 'english', 4); #start 981 end 1147
UPDATE `test`.`test3` SET `addtime`='2016-12-10 13:03:22', `data`='中文', `id`=3 WHERE `addtime`='2016-12-10 12:00:00' AND `data`='中文' AND `id`=3 LIMIT 1; #start 763 end 954

4,闪回实战

背景:小明在 17:00 时误删了ry库sys_dict_type表的全部数据,需要紧急回滚。

mysql> select * from sys_config;
...
10 rows in set (0.00 sec)
mysql> delete from sys_config;
Query OK, 10 rows affected (0.01 sec)
mysql> select * from sys_config;
Empty set (0.00 sec)
  • 直接查看二进制日志内容,发现乱码。
mysqlbinlog --no-defaults mysql-bin.000001
  • 登录mysql,查看目前的binlog文件。
mysql> show master logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |       154 |
+------------------+-----------+
1 row in set (0.00 sec)
  • 最新的binlog文件是mysql-bin.000001。目标是筛选出需要回滚的SQL,由于误操作人只知道大致的误操作时间,首先根据时间做一次过滤。只需要解析test库user表。(注:如果有多个sql误操作,则生成的binlog可能分布在多个文件,需解析多个文件)。
python binlog2sql/binlog2sql.py -h127.0.0.1 -P3306 -uroot -p'12345678' -dry -tsys_config --start-file='mysql-bin.000001' --start-datetime='2025-01-13 11:44:00' --stop-datetime='2025-01-13 18:00:00' > sql.log
DELETE FROM `ry`.`sys_config` WHERE `config_id`=1 AND `config_name`='主框架页-默认皮肤样式名称' AND `config_key`='sys.index.skinName' AND `config_value`='skin-blue' AND `config_type`='Y' AND `create_by`='admin' AND `create_time`='2018-03-16 11:33:00' AND `update_by`='ry' AND `update_time`='2018-03-16 11:33:00' AND `remark`='蓝色 skin-blue、绿色 skin-green、紫色 skin-purple、红色 skin-red、黄色 skin-yellow' LIMIT 1; #start 4 end 1014 time 2025-01-13 17:37:02
DELETE FROM `ry`.`sys_config` WHERE `config_id`=2 AND `config_name`='用户管理-账号初始密码' AND `config_key`='sys.user.initPassword' AND `config_value`='123456' AND `config_type`='Y' AND `create_by`='admin' AND `create_time`='2018-03-16 11:33:00' AND `update_by`='ry' AND `update_time`='2018-03-16 11:33:00' AND `remark`='初始化密码 123456' LIMIT 1; #start 4 end 1014 time 2025-01-13 17:37:02
DELETE FROM `ry`.`sys_config` WHERE `config_id`=3 AND `config_name`='主框架页-侧边栏主题' AND `config_key`='sys.index.sideTheme' AND `config_value`='theme-dark' AND `config_type`='Y' AND `create_by`='admin' AND `create_time`='2018-03-16 11:33:00' AND `update_by`='ry' AND `update_time`='2018-03-16 11:33:00' AND `remark`='深黑主题theme-dark,浅色主题theme-light,深蓝主题theme-blue' LIMIT 1; #start 4 end 1014 time 2025-01-13 17:37:02
  • 着重关注上面的 #start 4 end 1014,执行转换操作:
python binlog2sql/binlog2sql.py -h127.0.0.1 -P3306 -uroot -p'12345678' -dry -tsys_config --start-file='mysql-bin.000001' --start-position=4 --stop-position=1014 -B > rollback.sql
INSERT INTO `ry`.`sys_config`(`config_id`, `config_name`, `config_key`, `config_value`, `config_type`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (4, '账号自助-是否开启用户注册功能', 'sys.account.registerUser', 'false', 'Y', 'admin', '2018-03-16 11:33:00', 'ry', '2018-03-16 11:33:00', '是否开启注册用户功能'); #start 4 end 1014 time 2025-01-13 17:37:02
INSERT INTO `ry`.`sys_config`(`config_id`, `config_name`, `config_key`, `config_value`, `config_type`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (3, '主框架页-侧边栏主题', 'sys.index.sideTheme', 'theme-dark', 'Y', 'admin', '2018-03-16 11:33:00', 'ry', '2018-03-16 11:33:00', '深黑主题theme-dark,浅色主题theme-light,深蓝主题theme-blue'); #start 4 end 1014 time 2025-01-13 17:37:02
INSERT INTO `ry`.`sys_config`(`config_id`, `config_name`, `config_key`, `config_value`, `config_type`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (2, '用户管理-账号初始密码', 'sys.user.initPassword', '123456', 'Y', 'admin', '2018-03-16 11:33:00', 'ry', '2018-03-16 11:33:00', '初始化密码 123456'); #start 4 end 1014 time 2025-01-13 17:37:02
  • 与业务方确认回滚sql没问题,执行回滚语句。登录mysql,确认回滚成功。
mysql -h127.0.0.1 -P3306 -uroot -p'12345678' < /root/rollback.sql
mysql> select * from sys_config;
...
10 rows in set (0.00 sec)

相关文章:

Require:利用MySQL binlog实现闪回操作

1&#xff0c;闪回原理 【binlog】MySQL binlog以event的形式&#xff0c;记录了MySQL server从启用binlog以来所有的变更信息&#xff0c;能够帮助重现这之间的所有变化。MySQL引入binlog主要有两个目的&#xff1a;一是为了主从复制&#xff1b;二是某些备份还原操作后需要重…...

黑马linux笔记(03)在Linux上部署各类软件 MySQL5.7/8.0 Tomcat(JDK) Nginx RabbitMQ

文章目录 实战章节&#xff1a;在Linux上部署各类软件tar -zxvf各个选项的含义 为什么学习各类软件在Linux上的部署 一 MySQL数据库管理系统安装部署【简单】MySQL5.7版本在CentOS系统安装MySQL8.0版本在CentOS系统安装MySQL5.7版本在Ubuntu&#xff08;WSL环境&#xff09;系统…...

FFmpeg入门

在音视频处理领域&#xff0c;有一款神器级的工具横扫开发者圈&#xff0c;那就是 FFmpeg。它被誉为“音视频处理的瑞士军刀”&#xff0c;凭借强大的功能和开源的特性成为众多开发者和媒体从业者的首选。今天&#xff0c;我们就来聊聊 FFmpeg 的入门使用&#xff0c;带你轻松开…...

如何将 sqlserver 数据迁移到 mysql

文章目录 前言一、导出SQL Server 数据二、转换数据格式为MySQL兼容格式三、导入数据到MySQL数据库五、使用ETL工具六、通过 navicat 工具七、总结 前言 将 SQL Server 数据迁移到 MySQL 是一个常见的数据库迁移任务&#xff0c;通常涉及以下几个关键步骤&#xff1a;导出 SQL…...

【leetcode 13】哈希表 242.有效的字母异位词

原题链接 题解链接 一般哈希表都是用来快速判断一个元素是否出现集合里。 当我们想使用哈希法来解决问题的时候&#xff0c;我们一般会选择如下三种数据结构。 数组 set &#xff08;集合&#xff09; map(映射) 如果在做面试题目的时候遇到需要判断一个元素是否出现过的场景…...

git - 用SSH方式迁出远端git库

文章目录 git - 用SSH方式迁出远端git库概述笔记以gitee为例产生RSA密钥对 备注githubEND git - 用SSH方式迁出远端git库 概述 最近一段时间&#xff0c;在网络没问题的情况下&#xff0c;用git方式直接迁出git库总是会失败。 失败都是在远端, 显示RPC错误。 但是git服务器端…...

21天学通C++——9.5复制构造函数

浅复制 复制类对象时只是单纯的复制所有的值&#xff0c;如指针只会复制指针的大小&#xff0c;而不会再开辟同一空间大小的内存&#xff0c;即两个指针指向同一片内存空间。 伪代码&#xff1a; class MyString { private:char*buffer; public:MyString(const char* initStri…...

GPT 系列论文精读:从 GPT-1 到 GPT-4

学习 & 参考资料 前置文章 Transformer 论文精读 机器学习 —— 李宏毅老师的 B 站搬运视频 自监督式学习(四) - GPT的野望[DLHLP 2020] 來自猎人暗黑大陆的模型 GPT-3 论文逐段精读 —— 沐神的论文精读合集 GPT&#xff0c;GPT-2&#xff0c;GPT-3 论文精读【论文精读】…...

【python】OpenCV—Local Translation Warps

文章目录 1、功能描述2、原理分析3、代码实现4、效果展示5、完整代码6、参考 1、功能描述 利用液化效果实现瘦脸美颜 交互式的液化效果原理来自 Gustafsson A. Interactive image warping[D]. , 1993. 2、原理分析 上面描述很清晰了&#xff0c;鼠标初始在 C&#xff0c;也即…...

elasticsearch集群部署

一、创建 elasticsearch-cluster 文件夹 创建 elasticsearch-7.6.2-cluster文件夹 修改服务es服务文件夹为node-001 修改config/elasticsearch.yml 配置文件 # Elasticsearch Configuration # # NOTE: Elasticsearch comes with reasonable defaults for most settings. # …...

python调用window库全屏截图生成bmp位图学习

import io import time import struct import ctypes s time.time() gdi32 ctypes.windll.gdi32 user32 ctypes.windll.user32# 定义常量 SM_CXSCREEN 0 SM_CYSCREEN 1# 缩放比例 zoom 1 screenWidth int(user32.GetSystemMetrics(SM_CXSCREEN) * zoom) screenHeight i…...

Wireshark使用

1.抓包过滤器--BPF语法 类型Type&#xff1a;主机&#xff08;host&#xff09;、网段&#xff08;net&#xff09;、端口&#xff08;port&#xff09; 方向Dir&#xff1a;源地址&#xff08;src&#xff09;、目标地址&#xff08;dst&#xff09; 协议Proto&#xff1a;各种…...

FLASK 上传文件

HTML form enctype"multipart/form-data" 编码类型说明application/x-www-form-urlencoded表单数据编码为名称/值对。 这是标准编码格式。multipart/form-data表单数据编码为消息&#xff0c;页面上每个控件都有单独的部分。text/plain表单数据以纯文本编码&#x…...

卷积神经网络

卷积神经网络 随着输入数据规模的增大&#xff0c;计算机视觉的处理难度也大幅增加。 64 64 3 64 \times 64 \times 3 64643 的图片特征向量维度为12288&#xff0c;而 1000 1000 3 1000 \times 1000 \times 3 100010003 的图片数据量达到了300万。随着数据维度的增加&am…...

SparrowRTOS系列:链表版本内核

前言 Sparrow RTOS是笔者之前写的一个极简性RTOS&#xff0c;初代版本只有400行&#xff0c;后面笔者又添加了消息队列、信号量、互斥锁三种IPC机制&#xff0c;使之成为一个较完整、堪用的内核&#xff0c;初代版本以简洁为主&#xff0c;使用数组和表作为任务挂载的抽象数据…...

【redis初阶】环境搭建

​​​​​​​ 目录 ​​​​​​​ 一、Ubuntu 安装 redis 二、Centos7 安装 redis 三、Centos8 安装 redis 四、redis客户端介绍 redis学习&#x1f973; 一、Ubuntu 安装 redis 使用 apt 安装 apt install redis -y 查看redis版本 redis-server --version 支持远程连接…...

OpenCV相机标定与3D重建(54)解决透视 n 点问题(Perspective-n-Point, PnP)函数solvePnP()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 根据3D-2D点对应关系找到物体的姿态。 cv::solvePnP 是 OpenCV 库中的一个函数&#xff0c;用于解决透视 n 点问题&#xff08;Perspective-n-Po…...

shell脚本回顾1

1、shell 脚本写出检测 /tmp/size.log 文件如果存在显示它的内容&#xff0c;不存在则创建一个文件将创建时间写入。 一、 ll /tmp/size.log &>/dev/null if [ $? -eq 0 ];then cat /tmp/size.log else touch /tmp/size.log echo date > /tmp/size.log fi二、 if …...

HarmonyOS命令行工具

作为一个从Android转过来的鸿蒙程序猿&#xff0c;在开发过程中不由自主地想使用类似adb命令的命令行工具去安装/卸载应用&#xff0c;往设备上推或者拉去文件&#xff0c;亦或是抓一些日志。但是发现在鸿蒙里边&#xff0c;华为把命令行工具分的很细&#xff0c;种类相当丰富 …...

V少JS基础班之第四弹

一、 前言 第四弹内容是操作符。 本章结束。第一个月的内容就完成了&#xff0c; 是一个节点。 下个月我们就要开始函数的学习了。 我们学习完函数之后。很多概念就可以跟大家补充说明了。 OK&#xff0c;那我们就开始本周的操作符学习 本系列为一周一更&#xff0c;计划历时6…...

从前端视角看设计模式之创建型模式篇

设计模式简介 "设计模式"源于GOF&#xff08;四人帮&#xff09;合著出版的《设计模式&#xff1a;可复用的面向对象软件元素》&#xff0c;该书第一次完整科普了软件开发中设计模式的概念&#xff0c;他们提出的设计模式主要是基于以下的面向对象设计原则&#xff…...

网络应用技术 实验七:实现无线局域网

一、实验简介 在 eNSP 中构建无线局域网&#xff0c;并实现全网移动终端互相通信。 二、实验目的 1 、理解无线局域网的工作原理&#xff1b; 2 、熟悉无线局域网的规划与构建过程&#xff1b; 3 、掌握无线局域网的配置方法&#xff1b; 三、实验学时 2 学时 四、实…...

Kotlin 循环语句详解

文章目录 循环类别for-in 循环区间整数区间示例1&#xff1a;正向遍历示例2&#xff1a;反向遍历 示例1&#xff1a;遍历数组示例2&#xff1a;遍历区间示例3&#xff1a;遍历字符串示例4&#xff1a;带索引遍历 while 循环示例&#xff1a;计算阶乘 do-while 循环示例&#xf…...

B+树的原理及实现

文章目录 B树的原理及实现一、引言二、B树的特性1、结构特点2、节点类型3、阶数 三、B树的Java实现1、节点实现2、B树操作2.1、搜索2.2、插入2.3、删除2.4、遍历 3、B树的Java实现示例 四、总结 B树的原理及实现 一、引言 B树是一种基于B树的树形数据结构&#xff0c;它在数据…...

ArkTS 基础语法:声明式 UI 描述与自定义组件

1. ArkTS 简介 ArkTS 是 HarmonyOS 应用开发中的一种编程语言&#xff0c;它结合了 TypeScript 的类型检查和声明式 UI 描述方式&#xff0c;帮助开发者更高效地构建用户界面。 2. 声明式 UI 描述 ArkTS 使用声明式语法来定义 UI 结构&#xff0c;通过组件、属性和事件配置实…...

list的模拟实现详解

文章目录 list的模拟实现list的迭代器begin()和end() list的模拟实现 #pragma once #include<iostream> #include<list>using namespace std;namespace wbc {// 类模版template<class T>struct list_node // 链表的节点{T _data;list_node<T>* _next;…...

图解Git——分支的新建与合并《Pro Git》

⭐分支的新建与合并 先引入一个实际开发的工作流&#xff1a; 开发某个网站。为实现某个新的需求&#xff0c;创建一个分支。在这个分支上开展工作。 正在此时&#xff0c;你突然接到一个电话说有个很严重的问题需要紧急修补。你将按照如下方式来处理&#xff1a; 切换到你…...

SQLite 语法快速入门

SQLite 是一个软件库&#xff0c;实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。 提供一个免费的在线SQLite编辑器 &#xff08;0&#xff09;常用命令 # 格式化 .header on .mode column .timer on# 查看表格 .tables# 查看表结构(建表语句) .schema …...

高速光电探测器设计 PIN APD铟镓砷TIA放大脉冲误码测试800-1700nm

高速光电探测器PIN APD铟镓砷TIA放大脉冲误码测试800-1700nm &#xff08;对标:索雷博APD431A&#xff09; &#xff08;对标:索雷博APD431A&#xff09; &#xff08;对标:索雷博APD431A&#xff09; 规格参数: 波长范围:800-1700nm 输出带宽:DC-400MHz&#xff08;-3dB&…...

【Linux】【内存】Buddy内存分配基础 NUMA架构

【Linux】【内存】Buddy内存分配基础 NUMA架构 NUMA架构 在 NUMA 架构中&#xff0c;计算机的多个 CPU 被划分为不同的处理单元&#xff0c;每个处理单元有一个本地内存。这些内存被称为内存节点&#xff08;memory node&#xff09;。处理器尽量访问自己的本地内存 node_da…...

【机器学习:十九、反向传播】

1. 计算图和导数 计算图的概念 计算图&#xff08;Computation Graph&#xff09;是一种有向无环图&#xff0c;用于表示数学表达式中的计算过程。每个节点表示一个操作或变量&#xff0c;每条边表示操作的依赖关系。通过计算图&#xff0c;可以轻松理解和实现反向传播。 计算…...

使用中间件自动化部署java应用

为了实现你在 IntelliJ IDEA 中打包项目并通过工具推送到两个 Docker 服务器&#xff08;172.168.0.1 和 172.168.0.12&#xff09;&#xff0c;并在推送后自动或手动重启容器&#xff0c;我们可以按照以下步骤进行操作&#xff1a; 在 IntelliJ IDEA 中配置 Maven 或 Gradle 打…...

Vue.js开发入门:从零开始搭建你的第一个项目

前言 嘿&#xff0c;小伙伴们&#xff01;今天咱们来聊聊 Vue.js&#xff0c;一个超火的前端框架。如果你是编程小白&#xff0c;别怕&#xff0c;跟着我一步步来&#xff0c;保证你能轻松上手&#xff0c;搭建起属于自己的第一个 Vue 项目。Vue.js 可能听起来有点高大上&#…...

基于大语言模型的组合优化

摘要&#xff1a;组合优化&#xff08;Combinatorial Optimization, CO&#xff09;对于提高工程应用的效率和性能至关重要。随着问题规模的增大和依赖关系的复杂化&#xff0c;找到最优解变得极具挑战性。在处理现实世界的工程问题时&#xff0c;基于纯数学推理的算法存在局限…...

mySQL安装(LINUX)

一、1. 下载并安装MySQL官方的 Yum Repository 1、连接云服务器&#xff0c;进入opt 2、下载安装包 wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm 3、解压 rpm -ivh mysql-community-release-el7-5.noarch.rpm 4、安装 yum install mysql-commu…...

【机器学习】农业 4.0 背后的智慧引擎:机器学习助力精准农事决策

我的个人主页 我的领域&#xff1a;人工智能篇&#xff0c;希望能帮助到大家&#xff01;&#xff01;&#xff01;&#x1f44d;点赞 收藏❤ 在当今数字化浪潮汹涌澎湃之际&#xff0c;农业领域正经历着一场前所未有的深刻变革&#xff0c;大踏步迈向农业 4.0时代。这一时代…...

在 Azure 100 学生订阅中新建一台 Ubuntu VPS,并通过 Docker 部署 Nginx 服务器

今天来和大家分享一下如何在 Azure 100 学生订阅中创建一台 Ubuntu VPS&#xff0c;并在其上通过 Docker 部署 Nginx 服务器。在这个过程中&#xff0c;我们将一步步走过每一个细节&#xff0c;希望能帮助到大家。 Docker 和 Nginx 简介 Docker 是一个开源的容器化平台&#…...

快速、可靠且高性价比的定制IP模式提升芯片设计公司竞争力

作者&#xff1a;Karthik Gopal&#xff0c;SmartDV Technologies亚洲区总经理 智权半导体科技&#xff08;厦门&#xff09;有限公司总经理 无论是在出货量巨大的消费电子市场&#xff0c;还是针对特定应用的细分芯片市场&#xff0c;差异化芯片设计带来的定制化需求也在芯片…...

Linux常用命令大全

mv详解目录 Linux 常用命令大全 1. ls 指令 2. touch 指令 3. pwd 指令 4. mkdir 指令 5. cd 指令 6. rmdir 和 rm 指令 7. man 指令 8. cp 指令 9. mv 指令 10. cat 指令 11. more 指令 12. less 指令 13. head 指令 14. tail 指令 15. find 指令 16. grep 指…...

K-均值聚类算法

K-均值聚类算法是一种常用的无监督学习算法&#xff0c;用于将数据集划分为K个不同的簇。它的基本思想是通过迭代将样本点划分到最相邻的簇中&#xff0c;以最小化各个簇内的平均距离。下面我们来详细讲解K-均值聚类算法的步骤及其优缺点。 步骤&#xff1a; 1. 随机选择K个质…...

Windows 环境下安装和启动 Redis 服务

在 Windows 环境下安装和启动 Redis 服务可以通过多种方式实现&#xff0c;下面将详细介绍几种常见的方法。我们将重点介绍通过 Chocolatey 包管理器、Docker 容器以及 MSOpenTech 提供的官方移植版来安装 Redis。 方法一&#xff1a;使用 Chocolatey 安装 Redis Chocolatey …...

关于在windows系统中编译ffmpeg并导入到自己项目中这件事

关于在windows系统中编译ffmpeg并导入到自己项目中这件事 前因&#xff08;可跳过不看&#xff09; 前阵子由于秋招需求&#xff0c;写了一个简易的安卓播放器&#xff0c;最终因为时间问题还有一些功能没有实现着实可惜&#xff0c;如&#xff1a;倍速播放&#xff0c;快进操…...

实战开发:基于用户反馈筛选与分析系统的实现

引言 在当今的数字化社会中&#xff0c;用户反馈是企业决策的重要依据。无论是电商平台、社交网络&#xff0c;还是产品服务&#xff0c;收集用户反馈并加以分析&#xff0c;有助于提升用户体验&#xff0c;改善服务质量。然而&#xff0c;面对海量的用户反馈&#xff0c;如何有…...

Android SystemUI——服务启动流程(二)

在 Andorid 系统源码中&#xff0c;package/apps下放的是系统内置的一些 APP&#xff0c;例如 Settings、Camera、Phone、Message 等等。而在 framework/base/package 下&#xff0c;它们也是系统的 APP&#xff0c;SystemUI 就在此目录下。它控制着整个 Android 系统的界面&am…...

拷贝构造函数

文章目录 一、4. 拷贝构造函数 今天我们来学习拷贝构造函数。 一、4. 拷贝构造函数 如果⼀个构造函数的第⼀个参数是自身类型的引用&#xff0c;且任何额外的参数都有默认值&#xff0c;则此叫做拷贝构造函数&#xff0c;也就是说拷贝构造是⼀个特殊的构造函数。 它的形式是这…...

解析OVN架构及其在OpenStack中的集成

引言 随着云计算技术的发展&#xff0c;虚拟化网络成为云平台不可或缺的一部分。为了更好地管理和控制虚拟网络&#xff0c;Open Virtual Network (OVN) 应运而生。作为Open vSwitch (OVS) 的扩展&#xff0c;OVN 提供了对虚拟网络抽象的支持&#xff0c;使得大规模部署和管理…...

面试加分项:Android Framework PMS 全面概述和知识要点

在Android面试时,懂得越多越深android framework的知识,越为自己加分。 目录 第一章:PMS 基础知识 1.1 PMS 定义与工作原理 1.2 PMS 的主要任务 1.3 PMS 与相关组件的交互 第二章:PMS 的核心功能 2.1 应用安装与卸载机制 2.2 应用更新与版本管理 2.3 组件管理 第…...

征服Windows版nginx(2)

1.配置Nginx 编辑Nginx的配置文件&#xff08;通常是nginx.conf&#xff09;&#xff0c;找到安装Nginx位置&#xff0c;如下路径&#xff1a; D:\nginx-1.26.2\conf 双击打开nginx.CONF编辑&#xff0c;在http块中添加一个新的server块&#xff0c;用于指定Vue项目的静态文件…...

QML states和transitions的使用

一、介绍 1、states Qml states是指在Qml中定义的一组状态&#xff08;States&#xff09;&#xff0c;用于管理UI元素的状态转换和属性变化。每个状态都包含一组属性值的集合&#xff0c;并且可以在不同的状态间进行切换。 通过定义不同的状态&#xff0c;可以在不同的应用场…...

flask_sqlalchemy relationship 子表排序

背景&#xff1a; 使用flask_sqlalchemy 的orm 时总不可避免的遇到子表排序问题 材料&#xff1a; 省略 制作&#xff1a; 直接看下面2段代码片段&#xff08;一对多关系组合&#xff09;&#xff0c;自行理解&#xff1a; 1、多的一方实体 from .exts import db from f…...