【mysql】mysql 数据备份与恢复使用详解

news2024/11/23 11:30:52

一、前言

对一个运行中的线上系统来说,定期对数据库进行备份是非常重要的,备份不仅可以确保数据的局部完整性,一定程度上也为数据安全性提供了保障,设想如果某种极端的场景下,比如磁盘损坏导致某个时间段数据丢失,或者误操作导致数据表数据被删等...

这种情况在现实中可以说无处不在,为了避免数据丢失或损坏带来的巨大损失,有必要对线上系统的数据定期做备份,而备份的直接好处就是,一旦数据需要做恢复的时候就可以利用这些备份数据快速恢复,从而最大程度减少损失。

二、数据备份策略

根据实际的业务需求,经验参考可以据数据规模大小,服务器磁盘容量,大致可分为下面几种:

1、全备

备份完整的数据库,全量数据就是数据库中所有的数据(或某一个库的全部数据);

  • 全量备份就是把数据库中所有的数据进行备份;
  • mysqldump会取得一个时刻的一致性数据

2、增备

​ 增量数据就是指上一次全量备份数据之后到下一次全备之前数据库所更新的数据,对于mysqldump,binlog就是增量数据;

3、差异备份

  •  备份自上一次完全备份后的全部改动和新文件;
  • 备份速度较快,恢复速度较快,对磁盘空间有要求;
  • 能够更快且简单的恢复(相比较增量);
  • 需要最近一次完全备份和最后一次差异备份就能快速恢复;

三、数据备份类型

根据数据备份时对生产系统的影响,可以做如下分类:

1、冷备

停库,停服务,备份

这些备份操作在用户不能访问数据的时候进行,因此无法读取或修改数据。这些脱机备份会阻止执行任何使用数据的行为。这些类型的备份不会干扰正常运行的系统的性能。但是,对于某些应用程序,会无法接受必须在一段较长的时间里锁定或完全阻止用户访问数据。

2、热备

不停库,不停服务,备份,也不会(锁表)阻止用户的写入

这些动态备份在读取或修改数据的过程中进行,很少中断或者不中断传输或处理数据的功能。使用热备份时,系统仍可供读取和修改数据的操作访问。

3、温备

不停库,不停服务,备份,会(锁表) 阻止用户的写入

这些备份在读取数据时进行,但在多数情况下,在进行备份时不能修改数据本身。这种中途备份类型的优点是不必完全锁定最终用户。但其不足之处在于无法在进行备份时修改数据集,这可能使这种类型的备份不适用于某些应用程序。在备份过程中无法修改数据可能产生性能问题。

四、前置准备

提前搭建好mysql服务(本文以mysql5.7为例进行说明),并创建一个测试使用的数据库,若干数据表;

 

五、mysqldump 数据备份命令使用

mysqldump是mysql自带的数据备份命令,使用该命令可以完成数据库,数据表等多种备份策略,下面针对该命令的使用做详细的说明;

1、命令格式

mysqldump [选项] 数据库名 [表名] > 脚本名
或
mysqldump [选项] --数据库名 [选项 表名] > 脚本名
或
mysqldump [选项] --all-databases [选项] > 脚本名

关于选项部分,包含的参数是比较多的,下面列举常用的一些参数选项

参数名							缩写	含义
--host							-h		服务器IP地址
--port							-P		服务器端口号
--user							-u		MySQL 用户名
--pasword						-p		MySQL 密码
--databases								指定要备份的数据库
--all-databases							备份mysql服务器上的所有数据库
--compact								压缩模式,产生更少的输出
--comments								添加注释信息
--complete-insert						输出完成的插入语句
--lock-tables							备份前,锁定所有数据库表
--no-create-db/--no-create-info			禁止生成创建数据库语句
--force									当出现错误时仍然继续备份操作
--default-character-set					指定默认字符集
--add-locks								备份数据库表时锁定数据库表

--no-create-db,  ---取消创建数据库sql(默认存在)
--no-create-info,---取消创建表sql(默认存在)
--no-data         ---不导出数据(默认导出)
--add-drop-database ---增加删除数据库sql(默认不存在)
--skip-add-drop-table  ---取消每个数据表创建之前添加drop数据表语句(默认每个表之前存在drop语句)
--skip-add-locks       ---取消在每个表导出之前增加LOCK TABLES(默认存在锁)
--skip-comments        ---注释信息(默认存在)

2、案例演示

1)备份全库

mysqldump -uroot -pXXX --all-databases > /usr/local/mysql/full.sql

或者

mysqldump -uroot -pXXX -A > /usr/local/mysql/full.sql

2)备份数据库【一个或多个】

使用 -- databases - B 参数,该参数后面跟数据库名,多个库间中间用空格,如果指定
databases 参数,备份文件中会存在创建数据库的语句,如果不指定参数,则不存在;

mysqldump –u user –h host –p -- databases [ 数据库的名称 1 [ 数据库的名称 2...]] > 备份文件名称 .sql
mysqldump -uroot -pXXX --databases shake_date > /usr/local/mysql/shake_date_01.sql

或者

mysqldump -uroot -pXXX -B shake_date shake_flow > /usr/local/mysql/combine.sql

 

3)备份数据表

如果业务中不需要对全库做备份,只想备份部分表的时候,

mysqldump –u user –h host –p密码   数据库名  [ 表名 1 [ 表名 2...]] > 备份文件名称 .sql

备份shake_date 下面的t_user表

4)只备份表结构

mysqldump -u用户名 -pXXX --no-data 数据库 数据表名称 > 备份sql文件名.sql

备份shake_date下面的t_user表,只备份表结构

mysqldump -uroot -pXXX --no-data shake_date t_user > /usr/local/mysql/t_user_bk2.sql

 

可以打开备份的文件检查下,可以发现这里就只剩下表结构;

 

5)只备份表的部分数据

有时候一张表数据量很大,只需要部分数据,这时就可以使用 --where 选项了,where后面附
带需要满足的条件;

如下,备份t_user表中age大于12岁的用户

mysqldump -uroot -pXXX shake_date t_user --where="age > 12 " > t_user_bk3.sql

 

 

6)排除某些表的备份

如果备份某个库,但某些表数据量很大或与业务关联不大,这时候可以考虑排除这些表的备份,适用选项 --ignore-table ;

如下备份shake库下的表,排除t_no这个表

mysqldump -uroot -pXXX shake_date --ignore-table=shake_date.t_no > /usr/local/mysql/t_user_bk5.sql

 

3、其他重要参数选项补充

在实际生产中,备份数据需要考虑的因素其实更多,考虑的越细致,在后续在数据恢复的时候就越精确,下面列举一些实际生产备份中可能用得上的额外的参数选项;

-R 备份存储过程及函数
--triggers 备份触发器
-E 备份事件
-F 在备份开始时,刷新一个新binlog日志
--master-data=2  以注释的形式,保存备份开始时间点的binlog的状态信息
--single-transaction   innodb 存储引擎开启热备(快照备份)功能
--set-gtid-purged=auto

更多的参数,可以通过命令: mysqldump --help 进行查看和学习,每一项都有详细的介绍,可以结合官网一起学习;

 

在以上罗列的参数中,有下面三个参数选项这里做一下补充说明,也是备份过程中常常会涉及到的

  • --master-data;
  • --single-transaction;
  • --set-gtid-purged;

1)--master-data

可选值 : 1 ,2

 

通过mysqldump --help 命令可以清楚查看官方对该命令的解释,这里简单说下这个参数的作用

  • 加上该选项之后,会在备份的sql中添加并记录备份时间点binlog中的偏移量,利用这个偏移的位置,结合完整的binlog日志,可以全量恢复从这个时间点之前的数据 + 这个时间点之后的数据;
  • 在mysql的主从模式中可以用到;
  • 该值设置为1或2,在不同的参数值设置时,备份中带来的结果不一样,通常结合--single-transaction;一起使用,可以在备份期间进行锁表,防止期间外部数据的读写造成备份数据的不一致;

--master-data=2为例进行说明

以注释的形式,保存备份开始时间点的binlog的状态信息

  • 在备份时,会自动记录,二进制日志文件名和位置号;
  • 自动锁表(FTWRL);
  • 如果配合--single-transaction,只对非InnoDB表进行锁表备份,InnoDB表进行“热“”备,实际上是实现快照备份;

2)--single-transaction

innodb 存储引擎开启热备(快照备份)功能

 

直观上理解,使用该参数,可以在数据备份期间开启类似于事务的操作,这样的话可以避免外部的DDL操作带来备份时的数据上的影响,比如有如下场景,在mysql5.6版本中可能出现的情况:
  • 100+G 有MyISAM表,做大批量DML,mysqldump备份数据库出现hang住;
  • 3000w表做DDL,改数据类型,备份期间,锁表情况严重;

如果配合上面的master-data可以自动实现加锁

  • 不加--single-transaction ,启动所有表的温备份,所有表都锁定;
  • 加上--single-transaction , 对innodb进行快照备份, 对非innodb表可以实现自动锁表功能;

3)--set-gtid-purged

此为默认参数,即使在命令中不写,依旧生效,它的效果是在mysqldump输出的备份文件中生成  SET@@GLOBAL.GTID_PURGED语句;备份文件中的这条语句记录了GTID号, 可选值:auto , on

 

使用场景

  • 在构建主从模式时,主库上有许多数据需要先备份出来并恢复到从库上,以此来保持两个库没有差异,然后再去配置主从,在这种场景下,需要将参数设置为 on,对于想要基于GTID实现主从复制的从库来说,从库是基于MASTER_AUTO_POSITION=1自动获取并应用GTID的,因此如果再主库导出的备份文件中没有GTID,那么从库无法自动获取并应用GTID;
  • 设为off时,在mysqldump输出中不包含SET@@GLOBAL.GTID_PURGED语句;

4)--max-allowed-packet=#

适当调大该参数,可以避免在备份数据量过大时因数据落盘时数据包过大的备份失败问题

5)-R -E --triggers

备份数据时连同触发器函数等也一同进行备份

操作演示

--set-gtid-purged=OFF
mysqldump -uroot -pXXX -A --master-data=2 --single-transaction --set-gtid-purged=OFF >/usr/local/mysql/shake_user_empty.sql

 

--set-gtid-purged=on

 设置该参数之后,最明显的效果就是打开备份脚本文件,可以看到下面的信息,开启这个参数后在构建主从复制的时候会用上

 

--max-allowed-packet=#

在一些数据量比较大的备份情况下,建议适当的调大该参数

mysqldump -uroot -pXXX -B shake_date -R -E --triggers --master-data=2 --single-transaction --set-gtid-purged=OFF --max-allowed-packet=256M >/usr/local/mysql/shake_full_10.sql

 

六、mysqldump 数据恢复

使用mysqldump可以对备份的数据进行恢复,基本语法

mysql –u root –p [dbname] < backup .sql

1、全量恢复

如果备份文件中包含了创建数据库的语句,则恢复的时候不需要指定数据库名称

删除shake_date数据库

 

执行数据恢复,再次查看发现数据就回来了;

mysql -uroot -pXXX < /usr/local/mysql/full.sql

 

2、全量备份中恢复单库

有整个实例的备份,但只想恢复某个数据库,这时可以从全量备份中分理出单个库的备份,可以参考下面的命令,比如将shake_date数据库从full.sql中分离出来;

sed -n '/^-- Current Database: `shake_date`/,/^-- Current Database: `/p' full.sql> /usr/local/mysql/shake_full.sql

 

3、从某个数据库中恢复单表数据

这也是一种比较常见的需求了,比如业务中某些表的数据非常重要,优先恢复这些表,就可以用到这个功能,操作步骤如下:

  • 用shell语法分离出创建表的语句及插入数据的语句;
  • 再依次导出完成数据恢复;

cat shake_full.sql | sed -e '/./{H;$!d;}' -e 'x;/CREATE TABLE `t_user`/!d;q' > t_user_structure.sql


cat shake_full.sql | grep --ignore-case 'insert into `t_user`' > t_user_data.sql

首先,将shake_date库中的t_user表删除

 

依次执行上面的sql,即建表sql以及insert的数据sql从全库的sql备份中分离出来

 

可以打开一个看看

然后再执行数据的恢复

source /usr/local/mysql/t_user_structure.sql;
source /usr/local/mysql/t_user_data.sql;

 

4、使用dump + binlog进行数据恢复

下面说一个具体的场景,在生产环境下,假如定期对某个数据库进行全备,比如每周2的晚上进行全备,但现在发生了一件事,即在周三的时候,某位同事不小心将某张表的数据删除了,这该怎么办呢?

可以这么考虑,从周二全备那天来看,备份的数据是截止到那个时间点的全量数据,备份的时候可以将 master-data参数加进去,这样备份出来的数据中就有了那一刻binlog中的数据位置点,而在binlog日志中,记录了完整的操作记录行,那么就可以结合起来对数据进行快速恢复;

操作步骤如下:

1)创建一个数据库和数据表

给t1表随机插入几条数据

 

 

2)模拟周2对当前数据库进行全备

mysqldump -uroot -pXXX --databases mydb --master-data=2 --single-transaction --set-gtid-purged=ON >/usr/local/mysql/mydb.sql

注意:

--master-data=2 这个参数一定要开启,这个参数会记录备份那一刻的位置

 

 3)模拟周3又对t1表做了相关的数据操作

 

 4)模拟周3不小心将数据库删了

 

 5)执行数据恢复

恢复步骤

  • 恢复截止到周1的备份数据;
  • 寻找binlog的起始位置;
  • 根据binlog恢复周1到周2之间的数据;

将备份的sql中的下面的信息定位到,CHANGE 开头的表示在binlog中记录的位置号为4001,这就是说,剩下的待恢复的数据从4001开始截取就可以了;

 

 

SET @@GLOBAL.GTID_PURGED='c38a5f35-67ac-11ed-aefa-525400633661:1-16';
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=4001;

定位到mysql的binlog位置,结合上述的gtid,通过binlog进行恢复,使用下面的命令检查最后删除的位置点;

show binlog events in 'mysql-bin.000002';

 

在上面我们定位到备份中的sql文件中的gtid是1~16,这里最后drop的时候是20这个位置,则需要截取的那部分就是17 ~ 20;

mysqlbinlog --skip-gtids --include-gtids='c38a5f35-67ac-11ed-aefa-525400633661:17-20' mysql-bin.000002 > /usr/local/mysql/mydb_extend.sql

 

执行恢复

 

检查全备恢复后的数据,这样就恢复到了周一的数据;

 接下来再恢复周2的数据;

source /usr/local/mysql/mydb_extend.sql;

 

七、物理备份

所谓物理备份,最直接的就是MySQL中的数据库文件复制出来,这种方式简单粗暴,速度也快,比较省事,

比如在上面创建了一个mydb的数据库,在mysql的数据目录下就存在下面几个数据文件; 

但是这种方式并不是特别推荐,一方面在不同的操作系统下,数据目录有所不同,其次,这种备份的操作往往需要停服和锁表,以避免外部的操作给备份数据时带来的不一致的影响,另外,与mysql所使用的数据库引擎也很有关系;

八、表的导出与导入

在一些场景下,直接将数据库数据被分成sql文件可能并不是一个特别好的选择,因为导出来的文件格式不够通用,比如还有其他的数据分析平台需要使用这些数据的话,就比较麻烦了,这时候就可以考虑将数据库以文件的形式导出;

表的导出操作

1、 使用SELECT…INTO OUTFILE导出文本文件

将shake_date库下的t_user表数据导出到文件

SELECT * FROM t_user INTO OUTFILE "/var/lib/mysql-files/tuser.txt";

打开该文件检查下

 

 

2. 使用mysqldump命令导出文本文件

 使用mysqldump命令将将shake_date数据库中tuser表中的记录导出到文本文件:

mysqldump -uroot -pXXX -T "/var/lib/mysql-files/" shake_date t_user

 

检查下文件

 

使用mysqldump将shake_date数据库中的t_user表导出到文本文件,使用FIELDS选项,要求字段之间使用逗号“,”间隔,所有字符类型字段值用双引号括起来;
mysqldump -uroot -pXXX -T "/var/lib/mysql-files/" shake_date t_user --fields-terminated-by=',' --fields-optionally-enclosed-by='\"'

 

可以检查下txt文件 ,这种格式的数据在很多大数据处理业务场景中是一种比较好的数据格式

3、 使用mysql命令导出文本文件

mysql -uroot -pXXX --execute="SELECT * FROM t_user;" shake_date> "/var/lib/mysql-files/tuser1.txt"
导出的结果格式如下

 

使用  --veritcal  参数将该条件记录分为多行显示
mysql -uroot -pXXX --vertical --execute="SELECT * FROM t_user;" shake_date > "/var/lib/mysql-files/tuser2.txt"

得到的数据格式如下

 

使用 --xml参数将数据导出为xml格式

mysql -uroot -pXXX --xml --execute="SELECT * FROM t_user;" shake_date>"/var/lib/mysql-files/tuser3.xml"

 

表的导入操作

上面演示了将表以各自类型格式的文件导入,下面再看看如何将不同格式的表的数据进行导入操作;

1. 使用LOAD DATA INFILE方式导入文本文件

使用 SELECT...INTO OUTFILE shake_date 数据库中 t_user 表的记录导出到文本文件

执行下面的语句导出

SELECT * FROM shake_date.t_user INTO OUTFILE '/var/lib/mysql-files/tuser1.txt';

 

删除t_user表的数据

从文本文件tuser1.txt中恢复数据 

LOAD DATA INFILE '/var/lib/mysql-files/tuser1.txt' INTO TABLE shake_date.t_user;

 

2、将上面以逗号分割的文件导入到数据表

使用如下语句

LOAD DATA INFILE '/var/lib/mysql-files/t_user.txt' INTO TABLE shake_date.t_user FIELDS TERMINATED BY ',' ENCLOSED BY '\"';

导入之前先清理下表的数据

 

3、使用mysqlimport方式导入文本文件 

仍然以上面的那个以逗号分割的文件为例进行说明

先清理数据表

 

执行下面的语句进行数据导入

mysqlimport -uroot -pXXX shake_date '/var/lib/mysql-files/t_user.txt' --fields-terminated-by=',' --fields-optionally-enclosed-by='\"'

执行完成后,可以看到数据又恢复了;

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是Spring,Spring的核心和设计思想你了解吗?

目录 1.初识Spring 1.1 什么是容器 1.2 什么是IoC 2.什么是IoC容器. 2.1 什么是DI 哈喽呀,你好呀,欢迎呀,快来看一下这篇宝藏博客吧~~~ 1.初识Spring Srping指的是Spring Framework(Spring 框架).我们经常会听见框架二字,其中java中最最主流的框架当属Spring.Spring是一…

SAP S4 FI后台详细配置教程- PART4 (科目及税费相关配置篇)

目录 1、总帐科目 1.1编辑科目表清单 1.2 科目表分配给公司代码 1.3 定义科目组 1.4 定义留存收益科目 2、销售/购置税 2.1 维护销售/购置税务代码税率 2.2 配置销项/销项税会计科目 大家好本篇是&#xff1a;SAP S4 FI后台详细配置教程- PART4 &#xff08;科目及税…

Fiddler的安装和使用

文章目录1、Fiddler的安装2、Fiddler的使用3、抓包工具的原理1、Fiddler的安装 官网链接&#xff1a;https://www.telerik.com/fiddler 进入官网首页 页面跳转后 2、Fiddler的使用 下载好后直接安装&#xff0c;安装后打开&#xff0c;它就会自动抓取HTTP包&#xff0c;在左…

[附源码]SSM计算机毕业设计-东湖社区志愿者管理平台JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

力扣113题引发的关于DFS和回溯的一点思考

最近刚学回溯和DFS&#xff0c;刷力扣遇到一道题&#xff08;113题&#xff09;&#xff0c;如下&#xff1a; 我们不细究回溯和DFS的区别联系。关于这道题的2种写法&#xff0c;我把第一种称为回溯。 class Solution {List<List<Integer>> res new LinkedList&l…

29.Nacos的简介与安装(springcloud)

1.Nacos 简介官网&#xff1a; https://nacos.io/zh-cn/Nacos 致力于发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集&#xff0c;帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。 Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是…

【Android Studio Gradle】发布aar到私有Artifactory仓库

1. 前言 在【Android Studio Gradle】使用Artifactory构建本地仓库中介绍了如何利用工具配置一个maven私有库&#xff0c;那么在开发library的时候为了方便难免会用到需要将该库发布到这个仓库的功能。经过测试和配置&#xff0c;确实在Artifactory仓库中也可以通过gradlew命令…

【MySQL基础】为什么大部分人选择使用MySQL数据库?

目录 一、为什么大部分人选择使用MySQL数据库&#xff1f; 二、MySQL简介 1.MySQL介绍 2.MySQL的特点 3. MySQL的版本 从用户的角度&#xff0c;针对不同的用户 从单纯的版本数字区分 &#x1f49f; 创作不易&#xff0c;不妨点赞&#x1f49a;评论❤️收藏&#x1f49…

我把皮小浪の的 蓝色妖姬系列做进了java窗口

— &#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 秩沅 原创 收录于专栏 unity实战入门 ⭐效果图如下 ⭐⭐涉及的相关类的包含关系图 ⭐# 视频入口&#xff1a;请点击 文章目录一…

比 O(nlog(n)) 做得更好——2.改变问题以及排序和填充数组

改变问题&#xff0c;以及对键进行排序和填充数组。 目录 【第1篇】比 O(nlog(n)) 做得更好——1.创造合适的条件 长按关注《Python学研大本营》&#xff0c;加入读者群&#xff0c;分享更多精彩 扫码关注《Python学研大本营》&#xff0c;加入读者群&#xff0c;分享更多精彩 …

【Redis-04】Redis两种持久化方式

Redis是基于内存的数据结构服务器&#xff0c;保存了大量的键值对数据&#xff0c;所以持久化到磁盘是非常必要的&#xff0c;Redis提供了两种持久化的方式&#xff0c;分别是RDB和AOF。下面我们看下这两种持久化方式的具体实现原理。 1.RDB持久化 首先&#xff0c;RDB持久化方…

【Spring(二)】java对象属性的配置(Bean的配置)

有关Spring的所有文章都收录于我的专栏&#xff1a;&#x1f449;Spring&#x1f448; 目录 一、前言 二、通过Setter方法配置Bean 三、通过构造器配置Bean   1. 通过属性名配置   2. 通过索引配置   3. 通过属性类型配置 四、通过p命名空间配置bean 五、引用/注入其他bean…

openEuler快速入门-openEuler系统安装openGauss数据库安装

文章目录前言一、安装openEuler系统安装二、运行虚拟机&#xff0c;配置三、安装openGauss数据库总结前言 openEuler&#xff1a;openEuler 是一款开源操作系统。当前 openEuler 内核源于 Linux&#xff0c;支持鲲鹏及其它多种处理器&#xff0c;能够充分释放计算芯片的潜能&a…

[附源码]java毕业设计网络身份认证技术及方法

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

_001_Zotero入门

Zetoro大纲一、安装Zotero二、收集题录2.1 浏览器插件2.2 通过标识符添加2.3 拖拽文献2.4 从剪切板导入2.5 批量导入2.6 手动添加&#xff08;不建议使用&#xff09;2.7 方法总结三、管理题录3.1 移动分类3.2 查重3.3 关联3.4 标签3.5 笔记3.6 RSS订阅3.7 快捷键3.8 总结四、在…

Verilog 时序逻辑 UDP

时序逻辑 UDP 与组合逻辑 UDP 在定义形式和行为功能上均有不同&#xff0c;主要区别如下&#xff1a; 1、时序逻辑 UDP 的输出端必须声明为 reg 型。2、时序逻辑 UDP 可以用 initial 语句初始化。3、状态表格式也稍有不同&#xff1a; ... : <current_state> : &l…

RabbitMQ初步到精通-第七章-RabbitMQ之延迟队列

目录 第七章-RabbitMQ之延迟队列 1. 延迟队列概念 2. 应用场景 3. 架构模式 3.1 队列TTL实现 3.2 消息TTL实现 3.3 插件实现 4. 代码验证 5. 总结 第七章-RabbitMQ之延迟队列 1. 延迟队列概念 延迟-意即 非实时&#xff0c;之前我们讨论大部分的案例都是生产者将消息发…

【毕业设计】61-基于单片机的超声波测距仪设计(原理图、仿真工程、低重复率参考设计文档、PPT、开题报告、任务书)

【毕业设计】61-基于单片机的超声波测距仪设计&#xff08;原理图、仿真工程、低重复率参考设计文档、PPT、开题报告、任务书&#xff09;[toc] 资料下载链接 资料下载链接 资料链接&#xff1a;https://www.cirmall.com/circuit/33762/ 包含此题目毕业设计全套资料&#xff…

UDS应用场景

诊断协议那些事儿 本文为诊断协议那些事儿专栏文章&#xff0c;旨在介绍诊断的应用场景&#xff0c;其本质就是一个用于汽车行业通信的需求规范&#xff0c;用于诊断功能数据的解析&#xff01;让读者对诊断有一个深入的认识。 关联文章&#xff1a;UDS协议发展历史 文章目录…

idea如何设置代理实现管理突破呢

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是「奇点」&#xff0c;江湖人称 singularity。刚工作几年&#xff0c;想和大家一同进步&#x1f91d;&#x1f91d; 一位上进心十足的【Java ToB端大厂…