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

4.MySQL全量、增量备份与恢复

1.数据备份的重要性

在企业中数据的价值至关重要,数据保障了企业业务的正常运行。因此,数据的安全性及数据的可靠性是运维的重中之重,任何数据的丢失都可能对企业产生严重的后果。通常情况下造成数据丢失的原因有如下几种:

a.程序错误

b.人为操作失误

c.运算错误

d.磁盘故障

e.灾难(如火灾、地震)和盗窃

2.数据库备份类型

2.1从物理与逻辑的角度分类

物理备份:是对数据库操作系统物理文件(如数据文件、日志文件)的备份,这种类型的备份适用于在出现问题时需要快速恢复的大型重要数据库

     物理备份分为三种:

                冷备份:在数据库关闭状态下进行备份操作

                热备份:在数据库运行状态时进行备份操作,该备份方法依赖数据库的日志文件

                温备份:数据库锁定表格(不可写入但可读)的状态下进行备份操作

逻辑备份:是对数据库逻辑组件(如表)的备份,表示为逻辑数据库结构和内容的信息。这种类型的备份适用于可以编辑数据值或表结构较小的数据量,或者在不同的机器体系结构上重新创建数据

2.2从数据库的备份策略角度分类

完全备份:每次对数据进行完整的备份,即对整个数据库、数据库结构和文件结构的备份,保存的是备份完成时刻的数据库,是差异备份与增量备份的基础。完全备份的备份与恢复操作都非常简单方便,但是数据存在大量的重复,并且会占用大量的磁盘空间,备份的时间也很长,

差异备份:备份那些自从上次完全备份之后被修改过的所有文件,备份的时间节点是从上次完整备份起,备份数据量会越来越大。恢复数据时,只需恢复上次的完全备份与最近的一次差异备份。

增量备份:只有那些在上次完全备份或者增量备份后被修改的文件才会被备份。以上次完整备份或上次增量备份的时间为时间点,仅备份这之间的数据变化因而备份的数据量小,占用空间小,备份速度快。但恢复时,需要从上一次的完整备份开始到最后一次增量备份之间的所有增量依次恢复,如中间某次的备份数据损坏,将导致数据的丢失。

3.常见的备份方法

MySQL数据库的备份可以采用很多种方式,如直接打包数据文件(物理冷备份)、专用备份工具(mysqldump)、二进制日志增量备份、第三方工具备份等。

3.1物理冷备份

物理冷备份时需要在数据库处于关闭状态下,能够较好地保证数据库的完整性。物理冷备份一般用于非核心业务,这类业务一般都允许中断,物理冷备份的特点就是速度快,恢复时也是最为简单的。通常通过直接打包数据库文件夹(以下的数据库文件夹位于/usr/local/mysql/data)来实现备份。

3.2专用备份工具mysqldump或mysqlhotcopy

mysqldump 程序和 mysqlhotcopy 都可以做备份。mysqldump 是客户端常用逻辑备份程序,能够产生一组被执行以后再现原始数据库对象定义和表数据的SQL 语句。它可以转储一个到多个 MySQL 数据库,对其进行备份或传输到远程SQL 服务器。mysqldump 更为通用,因为它可以备份各种表。mysqlhotcopy 仅适用于某些存储引擎。
mysqlhotcopy是由TimBunce最初编写和贡献的Perl脚本。mysqlhotcopy 仅用于备份 MyISAM 和 ARCHIVE 表。它只能运行在 UNIX 或 Linux上。

3.3通过启用二进制日志进行增量备份

MySQL 支持增量备份,进行增量备份时必须启用二进制日志。二进制日志文件为用户 提供复制,对执行备份点后进行的数据库更改所需的信息进行恢复。如果进行增量备份(包含自上次完全备份或增量备份以来发生的数据修改),需要刷新二进制日志。

3.4通过第三方工具备份

Percona XtraBackup 是一个免费的 MySQL 热备份软件,支持在线热备份Innodb 和 XtraDB,也可以支持 MySQL 表备份,不过 MyISAM 表的备份要在表锁的情况下进行。本节对于 Percona XtraBackupr 的叙述是基于 2.4 版本的。Percona XtrBackup 有三个主要的工具:xtrabackup、innobackupex、xbstream。

xtrabackup:是一个编译了的二进制文件,只能备份Innodb/Xtradb 数据文件。
innodbackupex :是一个封装了 xtrabackup的Perl脚本,除了可以备份Innodb/Xtradb 之外,还可以备份 MySIAM。
xbstream:是一个新组件,能够允许将文件格式转成xbstream 格式或从xbstream 格式转到文件格式。

xtrabackup 工具可以单独使用,但推荐使用 innobackupex 来进行备份这是因为 innobackupex本身就已经包含了 xtrabackup 的所有功能。
xtrabackup 是基于 Innodb 的灾难恢复功能进行设计的,备份工具复制Innodb 的数据文件。但是,由于不锁表,这样复制出来的数据将不一致。Innodb维护了一个重做日志,包含 Innodb 数据的所有改动情况。在 xtrabackup 备份Innodb 数据的同时,xtrabackup 还有另外一个线程用来监控重做日志,一但志发生变化,就把发生变化的日志数据复制走。这样就可以利用重做日志做灾难恢复了。
以上是备份过程,如果需要恢复数据,则在准备阶段,xtrabackup 就需要使用之前复制的重做日志对备份出来的 Innodb 数据文件进行灾难恢复,此阶段完成之后,数据库就可以进行重建还原了。
Percona XtraBackup 对 MySIAM 的复制,是按这样的一个顺序进行的:首先锁定表,然后复制,再解锁表。

数据库完全备份操作

1.物理冷备份与恢复

物理冷备份一般用tar命令直接打包数据库文件夹,而在进行备份之前需要使用“systemctl stop mysqld”命令关闭mysqld服务

1.1备份数据库

创建一个/backup目录作为备份数据存储路径,使用tar创建备份文件,整个数据库文件夹备份属于完全备份

命令:

systemctl  stop  mysqld

mkdir  /backup

tar  zcf  /backup/mysql_all-$(data  +%F).tar.gz  /usr/local/mysql/data/

ls  -l  /backup/

1.2恢复数据库

先将数据库文件移至bak目录下,模拟故障

命令:

mkdir  bak

mv  /usr/local/mysql/data/  /root/bak/

mkdir  restore

tar  zxf  /backup/mysql_all-2025-03-22.tar.gz  -C  restore/

mv  restore/usr/local/mysql/data/  /usr/local/mysql/

systemctl  start  mysqld

2.mysqldump备份与恢复

通过 mysqldump 命令可以将指定的库、表或全部的库导出为 SQL 脚本,便于该命令在不同版本的 MySQL 服务器上使用。例如,当需要升级 MySQL 服务器时,可以先使用 mysqldump 命令将原有库信息导出,然后直接在升级后的 MySQI服务器中导入即可。

2.1备份数据库

使用 mysqldump 命令导出数据时,默认会直接在终端显示,若要保存到文件,还需要结合 She11 的“>”重定向输出操作,命令格式如下所示。

格式1:备份指定库中的部分表

mysqldump  [选项]  库名  [表名1]  [表名2]...   >  /备份路径/备份文件名

格式2:备份一个或多个完整的库(包括其中所有的表)

mysqldump  [选项]  --databases  库名1  [库名 2]…  >

格式3:备份MySQL服务器中所有的库

mysqldump  [选项]  --all-databases  > /备份路径/备份文件名

其中,常用的选项包括“-u”、“-p”,分别用于指定数据库用户名、密码。例如,以下操作分别使用格式1、格式2,将mysql 库中的 user 表导出为mysql-user.sql,将整个 test 库导出为 test.sql 文件,所有操作均以 root用户身份验证。

命令:

mysqldump  -uroot  -ppwd123  mysql  user  >  myql-user.sql

mysqldump  -uroot  -ppwd123 --databases  test  >  test.sql

若需要备份整个MySQL服务器中的所有库,应使用格式3。当导出的数据量较大的时候,可以添加“--opt”选项以优化执行速度。例如,执行以下操作将创建备份文件all-data.sql,其中包括MySQL服务器中的所有库

命令:mysqldump  -uroot  -ppwd123  --opt  --all-databases  >  all-data.sql

2.2查看备份文件

通过mysqldump工具导出的SQL脚本是文本文件,其中“/*...*/”部分或以“--”开头的行表示注释信息。使用grep、less、cat等文本工具可以查看脚本内容。例如,过滤出test.sql脚本中的数据库操作语句

命令:grep  -v  "^--"  test.sql  |  grep  -v  "^/"  |  grep  -v  "^$"

2.3恢复数据库

使用mysqldump命令导出的SQL备份脚本,在需要恢复时可以通过mysql命令对其进行导入操作,命令格式:mysql  [选项]  [库名]  [表名]  <  /备份路径/备份文件名  

当备份文件中只包含表的备份,而不包含创建的语句时,执行导入test库,其中“-e”选项是用于指定连接MySQL后执行的命令,命令执行完成后自动退出

mysql  -uroot  -ppwd123  test  < mysql-user.sql

mysql  -uroot  -ppwd123  -e  "show  tables  from  test;"      (验证导入结果)

若备份文件已经包含完整的库信息,则执行导入操作时无须指定库名

例如:执行以下操作可以从备份文件test.sql恢复test库

命令:mysql  -u  root  -ppwd123  -e  "drop  database  test;"    (删除test库,模拟故障)

           mysql  -uroot  -ppwd123  -e  "show  databases;"       (查看库是否存在)

           mysql  -u  root  -p  <  test.sql

除了使用mysql命令结合“<”恢复数据外,还可以使用source命令恢复数据

mysql  -u  root -ppwd123  -e "source  /root/test.sql"

3.MySQL增量备份与恢复

使用 mysqldump 进行完全备份,备份的数据中有重复数据,备份时间与恢复时间过长。而增量备份就是自上一次备份之后增加或改变的内容。

3.1MySQL增量备份概述

(1)增量备份的特点

与完全备份不同,增量备份没有重复数据,备份量不大,时间短;但其恢复麻烦,需要上次完全备份及完全备份之后所有的增量备份才能恢复,而且要对所有增量备份进行逐个反推恢复。MySQL 没有提供直接的增量备份办法,可以通过MySQL 提供的二进制日志(binary logs)间接实现增量备份。

(2)MySQL二进制日志对备份的意义

二进制日志保存了所有更新数据库的操作。二进制日志在启动 MySQL 服务器后开始记录,并在文件达到二进制日志所设置的最大值或者接收到flush logs 命令后重新创建新的日志文件,生成二进制文件序列,并及时把这些日志保存到安全的存储位置,即可完成一个时间段的增量备份。使max_binlog_size配置项可以设置二进制日志文件的最大值,如果二进制文件的大小超过了max_ binlog_ size,它就会自动创建新的二进制文件。
要进行 MySQL 的增量备份,首先要开启二进制日志功能。开启 MySQL的二进制日志功能的实现方法有很多种,最常用的是在 MySQL 配置文件的 mysqld项下加入“log-bin=/ 文件路径/文件名”前缀,如1og-bin=/usr/local/mysql/mysq1-bin,然后重启 MySQL 服务就可 以在指定路径下查看二进制日志文件了。默认情况下,二进制日志文件的扩展名是一个六位的数字,如 mysql-bin.000001。

Mysq18.0 默认已经开启 binlog,无需显示配置 binlog(默认 binlog 文件为:binlog.000001),如需自定义binlog配置,请添加如下配置项

命令:vim  /etc/my.cnf

[mysqld]

log-bin=/usr/local/mysql/data/mysql-bin            (启用二进制日志,并指定其存储路径)

binlog_format=MINED                                    (定义二进制日志的记录格式为混合模式)

server-id=1                                                       (为mysql实例分配一个唯一的服务器标识符)

           systemctl  restart  mysqld

           ls  -l  /usr/local/mysql/data/mysql-bin.*

3.2MySQL增量恢复

在维护数据库时,因为各种各样的原因可能会导致数据丢失,如:人为的 SQI语句破坏数据库、在进行下一次全备份之前发生系统故障导致数据库数据丢失、在数据库主从架构中主库的数据发生故障等。当出现以上场景时可以使用增量恢复来恢复数据。
常用的增量恢复的方法有三种:一般恢复、基于位置的恢复、基于时间点的恢复。

一般恢复:将所有备份的二进制日志内容全部恢复,命令格式如下所示。

mysqlbinlog  [--no-defaults]  增量备份文件  | mysql -u 用户名 -p 密码

基于位置的恢复:数据库管理员在操作数据库时可能在同一时间点既有错误的操作也有正确的操作,通过基于位置进行恢复可以更加精准,命令格式如下所示。

格式1:恢复数据到指定位置

mysqlbinlog  --stop-position='操作 id’  二进制日志  | mysql -u 用户名 -p密码

格式2:从指定的位置开始恢复数据

mysqlbinlog --start-position=’操作 id’  二进制日志  | mysql -u 用户名 -p密码

基于时间点的恢复:跳过某个发生错误的时间点实现数据恢复,而基于时间点的恢复可以分成三种情况。

格式1:从日志开头截止到某个时间点的恢复

mysqlbinlog  [--no-defaults]  --stop-datetime='年-月-日  小时:分钟:秒'  二进制日志  |  mysql -u 用户名 -p 密码

格式2:从某个时间点到日志结尾的恢复

mysqlbinlog  [--no-defaults]  --start-datatime='年-月-日  小时:分钟:秒'  二进制文件  | mysql -u 用户名 -p 密码

格式3:从某个时间点到某个时间点的恢复

mysqlbinlog  [--no-defaults]  --start-datatime='年-月-日  小时:分钟:秒'  --stop-datetime='年-月-日  小时:分钟:秒'  二进制日志  |  mysql -u 用户名 -p 密码

四.扩展:MySQL的GTID和XtraBackup

1.Mysql的GTID

GTID即全局事务ID,其保证为每一个在主上提交的事务在复制集群中可以生成一个唯一的ID

GTID实际上是由UUID+TID组成。其中UUID产生于auto.conf文(cat /data/mysql/data/auto.conf)

是一个MySQL示例的唯一标识。TID代表了该实例上已经提交的事务数量,并且随着事务提交单调递增,所以GTID能够保证每个mysql实例事务的执行(不会重复执行同一个事务,并且会补全没有执行的事务)。GTID在一组复制中,全局唯一

(1)配置my.cnf开启gtid

vim  /etc/my.cnf

[mysqld]

gtid_mode=ON

enforce_gtid_consistency=ON  (确保事务安全性)

mysql  -uroot  -ppwd123  -e  "show  variables  'gtid_mode';"

(2)创建基本测试库、表、数据

mysql>reset  master;               (初始化master,会清除所有binlog和gtid信息)

mysql>show  master  status;

创建测试库test,测试表user,并导入三条数据

mysql>create  database  test;

msyq>use test

mysql>create  table  user(id  int);

mysql>insert  into  user  values(1);

mysql>insert  into  user  values(2);

mysql>insert  into  user  values(3);

mysql>show  master  status;

(3)全量备份

mysqldump  -uroot -ppwd123  --databases  test  > test.sql

grep  -i  gtid  test.sql

(4)插入新数据

mysql  -uroot  -ppwd123

use  test

insert  into  user   values(4);

insert  into  user  values(5);

select  *  from  test.user;

show  master  status;

(5)模拟数据误删除

mysql>drop  database  test;

mysql>show  master  status;

(6)导入增量数据

mysqlbinlog  --include-gtids='d7................1-7'  /usr/local/mysql/data/mysql-bin.000001  > /mysqlbak.sql

这里把1-7的事务导出,也就是全量备份后,新插入的两条数据,第八个事务不能导入,因为它是drop命令的误删除语句

(7)恢复全量

mysql  -uroot  -ppwd123  -e  'reset  master;'     (清空GTID历史,不然恢复全量备份时会产生冲突)

mysql  -uroot  -p  < test.sql

mysql  -uroot  -p  -e  "select  *  from  test.user;"

(8)恢复增量

mysql  -uroot   -ppwd123  <  mysqlbak.sql

mysql  -uroot  -ppwd123  -e  "select  *  from  test.user;"

2.XtraBackup

MySQL 冷备、mysqldump、MySQL,热拷贝都无法实现对数据库进行增量备份。在实际生产环境中增量备份是非常实用的,如果数据大于50G或100G,存储空间足够的情况下,可以每天进行完整备份,如果每天产生的数据量较大,需要定制数据备份策略。例如每周实用完整备份,周一到周六实用增量备份。而Percona-Xtrabackup 就是为了实现增量备份而出现的一款主流备份工具,xtrabakackup有2个工具,分别是xtrabakup、innobakupe。
Percona-xtrabackup 是 Percona 公司开发的一个用于 MySQL 数据库物理热备的备份工具,支持MySQL、Percona server 和 MariaDB,开源免费,是目前较为受欢迎的主流备份工具。xtrabackup 只能备份 innoDB 和 xtraDB 两种数据弓警的表,而不能备份 MyISAM 数据表。

(1)安装xrabackup

wgethttps://downloads.percona.com/downloads/Percona-XtraBackup-8.0/Percona-XtraBackup-8.0.35-30/binary/tarball/percona-xtrabackup-8.0.35-30-Linux-x86 64.glibc2.17.tar.gz

tar  zxf  percona-xtrabackup-8.0.35-30-Linux-x86 64.glibc2.17.tar.gz
mv  percona-xtrabackup-8.0.35-30-Linux-x86 64.glibc2.17  /usr/local/xtrabackup

echo  'export  PATH=$PATH://usr/local/xtrabackup/bin'   >>  /etc/profile  source 

/etc/profile

(2)安装qpress

(3)完整备份与恢复

备份

bakdir="/backup/fullbackups/$(date ’+%F’)”

mkdir  -p  $backdir

(--backup 备份              --compress  压缩)

xtrabackup   --defaults-file=/etc/my.cnf  --user=bkpuser  --password=s3cret  --backup  --compress  --target-dir=$bakdir

恢复(恢复数据的时候要先关闭 MySQL,清理数据存储目录)

 解压备份数据:

xtrabackup  --defaults-file=/etc/my.cnf  --user=bkpuser --password=s3cret --decompress --target-dir=$bakdir

准备备份文件以供恢复:

xtrabackup  --prepare --target-dir=$bakdir

恢复数据:

xtrabackup  --defaults-file=/etc/my.cnf  --user=bkpuser  --password=s3cret --copy-back --target-dir=$bakdir

修改权限,替换成自己的数据存储目录:

chown-R mysql:mysql /var/lib/mysql

(5)增量备份与恢复

备份

fulldir="/backup/fullbackups/$ (date ’+%F’)"

incdir="/backup/incrementalbackups/$(date ’+%F’)”

mkdir -p $fulldir

mkdir -p $incdir

准备基础数据后进行全量备份:

xtrabackup  --defaults-file=/etc/my.cnf  --user=bkpuser  --password=s3cret  --target-dir=$fulldir --backup  --compress

插入新数据后进行增量备份:

xtrabackup
--defaults-file=/etc/my.cnf
--password=s3cret
--backup
--user=bkpuser
--compress
-target-dir=$incdir --incremental-basedir=$fulldir

在备份的目录里面会有xtrabackup_checkpoints文件

增量恢复

恢复数据的时候要先关闭 MySQL,清理数据存储目录

解压备份数据:

xtrabackup --defaults-file=/etc/my.cnf --user=root  --password=  --decompress  --target-dir=$fulldir

xtrabackup --defaults-file=/etc/my.cnf --user=root  --password=  --decompress --target-dir=$incdir

准备数据:

xtrabackup  --prepare  --apply-log-only  --target-dir=$fulldir

把增量备份的数据合并到完整备份里面:

xtrabackup  --prepare  --apply-log-only  --target-dir=$fulldir  --incremental-dir=$incdir

完整重放日志:

xtrabackup --prepare --target-dir=$fulldir

恢复数据:

xtrabackup  --defaults-file=/etc/my.cnf  --user=root  --password=  --copy-back  --target-dir=$fulldir

修改权限,替换成自己的数据存储目录:

chown -R mysql:mysql /usr/local/mysql/data

然后启动 MySQL 即可:

start  mysqld

相关文章:

4.MySQL全量、增量备份与恢复

1.数据备份的重要性 在企业中数据的价值至关重要&#xff0c;数据保障了企业业务的正常运行。因此&#xff0c;数据的安全性及数据的可靠性是运维的重中之重&#xff0c;任何数据的丢失都可能对企业产生严重的后果。通常情况下造成数据丢失的原因有如下几种&#xff1a; a.程…...

每日算法刷题Day4 5.12:leetcode数组4道题,用时1h

7. 704.二分查找 704. 二分查找 - 力扣&#xff08;LeetCode&#xff09; 思想 二分模版题 代码 c: class Solution { public:int search(vector<int>& nums, int target) {int nnums.size();int left0,rightn-1;int res-1;while(left<right){int midleft((…...

Day 15

目录 1.chika和蜜柑1.1 解析1.2 代码 2.对称之美2.1 解析2.2 代码 3.添加字符3.1 解析3.2 代码 1.chika和蜜柑 chika和蜜柑 TopK、堆、排序 1.1 解析 1.2 代码 #include <iostream> #include <vector> #include <algorithm> using namespace std; struct …...

脑机接口重点产品发展路径分析:以四川省脑机接口及人机交互产业攻坚突破行动计划(2025-2030年)为例

引言 随着人工智能和生物技术的飞速发展,脑机接口技术作为连接人类大脑与智能设备的桥梁,正在成为全球科技竞争的新焦点。2025年5月12日,四川省经济和信息化厅等8部门联合印发了《四川省脑机接口及人机交互产业攻坚突破行动计划(2025-2030年)》,为四川省在这一前沿领域的…...

leetcode 18. 四数之和

题目描述 和leetcode 15. 三数之和用同样的方法。有两个注意点。 一是剪枝的逻辑 这是和15. 三数之和 - 力扣&#xff08;LeetCode&#xff09;问题不同的地方。 无法通过这种情况&#xff1a; 二是整数溢出 最终答案 class Solution { public:vector<vector<int>…...

CentOS部署Collabora Online

1.安装Docker CentOS7安装Docker(超详细)-CSDN博客 2.拉取镜像 docker pull collabora/code:latest 3. 启动容器&#xff08;直接暴露HTTP端口&#xff09; docker run -d --name collabora -p 9980:9980 -e "usernameadmin" -e "password123456" -e …...

《Spring Boot 4.0新特性深度解析》

Spring Boot 4.0的发布标志着Java生态向云原生与开发效能革命的全面迈进。作为企业级应用开发的事实标准框架&#xff0c;此次升级在运行时性能、云原生支持、开发者体验及生态兼容性四大维度实现突破性创新。本文深度解析其核心技术特性&#xff0c;涵盖GraalVM原生镜像支持、…...

FFmpeg 与 C++ 构建音视频处理全链路实战(一)—— 环境配置与视频解封装

在数字媒体的浩瀚宇宙中&#xff0c;FFmpeg 就像一艘功能强大的星际战舰&#xff0c;承载着处理音视频数据的重任。而 C 作为一门高效、灵活的编程语言&#xff0c;犹如一位技艺精湛的星际工程师&#xff0c;能够精准操控 FFmpeg 战舰&#xff0c;完成各类复杂的音视频处理任务…...

什么是 NoSQL 数据库?它与关系型数据库 (RDBMS) 的主要区别是什么?

我们来详细分析一下 NoSQL 数据库与关系型数据库 (RDBMS) 的主要区别。 什么是 NoSQL 数据库&#xff1f; NoSQL (通常指 “Not Only SQL” 而不仅仅是 “No SQL”) 是一类数据库管理系统的总称。它们的设计目标是解决传统关系型数据库 (RDBMS) 在某些场景下的局限性&#xf…...

AI需求分析话术 | DeepSeek R1

运行环境&#xff1a;jupyter notebook (python 3.12.7) Dash 场景&#xff1a; 收集了小程序的问题点和优化建议&#xff0c;一键AI分析&#xff0c;快速排优先级 指令话术&#xff1a; 对收集的小程序问题点和建议&#xff0c;做需求分析并总结形成报告&#xff0c;报告结构…...

【Redis】键值对数据库实现

目录 1、背景2、五种基本数据类型对应底层实现3、redis数据结构 1、背景 redis是一个&#xff08;key-value&#xff09;键值对数据库&#xff0c;其中value可以是五大基本数据类型&#xff1a;string、list、hash、set、zset&#xff0c;这五大基本数据类型对应着不同的底层结…...

MySQL 8.0 OCP 英文题库解析(三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题16~25 试题16:…...

互联网大厂Java求职面试:优惠券服务架构设计与AI增强实践-1

互联网大厂Java求职面试&#xff1a;优惠券服务架构设计与AI增强实践-1 在一间简洁明亮的会议室里&#xff0c;郑薪苦正面对着一位技术总监级别的面试官&#xff0c;这位面试官拥有超过十年的大型互联网企业经验&#xff0c;以技术全面性与落地能力著称。 第一轮面试&#xf…...

object的常用方法

在面向对象编程中&#xff0c;Object 类是所有类的根类&#xff0c;它提供了一些基本的方法&#xff0c;这些方法可以被所有对象继承和使用。以下是一些在 Java 中 Object 类的常用方法&#xff0c;以及它们的作用和使用示例&#xff1a; 1. equals(Object obj) 作用&#xff…...

解决vue create 创建项目,不能使用上下键选择模板的问题

使用 git bash 创建vue项目时候&#xff0c;无法使用上下键盘按键选择创建模板 处理&#xff1a; 1.当前界面&#xff0c;按CTR C终止创建命令&#xff1b; 2.使用 alias vuewinpty vue.cmd&#xff0c;更新命令环境&#xff1b; 3.再次使用 vue create demo创建项目&#xf…...

AI Agent开发第64课-DIFY和企业现有系统结合实现高可配置的智能零售AI Agent(上)

开篇 我们之前花了将近10个篇章讲Dify的一些基础应用,包括在讲Dify之前我们讲到了几十个AI Agent的开发例子,我不知道大家发觉了没有,在AI Agent开发过程中我们经常会伴随着这样的一些问题: 需要经常改猫娘;需要经常改调用LLM的参数,甚至在一个流程中有3个节点,每个节点…...

3.Redis-set集合类型

1.用集合做差集、并集&#xff08;共同关注&#xff09;、交集...

软考 系统架构设计师系列知识点之杂项集萃(57)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之杂项集萃&#xff08;56&#xff09; 第93题 美国著名的卡内基梅隆大学软件工程学研究所针对软件工程的工程管理能力与水平进行了充分研究&#xff0c;提出了5级管理能力的模式&#xff0c;包括临时凑合阶段、简单模仿…...

Cabot:开源免费的 PagerDuty 替代品,让系统监控更简单高效

在当今复杂的IT环境中,及时发现并解决系统问题至关重要。而Cabot作为一款开源免费的监控工具,为开发和运维团队提供了强大而简单的解决方案。本文将详细介绍Cabot的核心功能、优势以及快速部署方法,帮助你更好地保障系统稳定性。 Cabot简介 Cabot是一个功能类似PagerDuty的开…...

AI中的MCP是什么?MCP的作用及未来方向预测 (使用go-zero 快速搭建MCP服务器)

AI是当下最热的风。在当今AI技术飞速发展的时代&#xff0c;AI的应用已经渗透到我们日常生活的方方面面。然而&#xff0c;随着AI系统的复杂性不断增加&#xff0c;如何让AI具备更强的自主性和灵活性成为了业界关注的焦点。这就引出了Model Context Protocol&#xff08;MCP&am…...

字节开源FlowGram与n8n 技术选型

字节跳动开源的 FlowGram 和 n8n 是两款功能强大但定位不同的工作流编排工具&#xff0c;以下是两者的技术选型对比分析&#xff0c;结合其核心特性、适用场景和优劣势&#xff1a; 一、核心特性对比 维度FlowGram&#xff08;字节开源&#xff09;n8n定位面向AI场景的可视化工…...

面试专栏-03-Git的常用命令

二、Git常用命令学习 git本质上&#xff0c;就是一个 git类型的文件夹 1、基础配置信息 git -v&#xff1a;查看 git 版本信息 git config --global user.name "dz.cn"&#xff1a;配置用户名&#xff0c;注意&#xff0c;这里配置的用户名在进行版本提交时&#xf…...

使用 Syncthing 在两台电脑之间同步文件:简单教程

&#x1f9e9; 什么是 Syncthing&#xff1f; Syncthing 是一个开源、跨平台、点对点的文件同步工具&#xff0c;类似于 Dropbox&#xff0c;但不依赖第三方服务器。它直接在你的设备之间同步文件&#xff0c;更加安全、可控&#xff0c;非常适合个人或团队内部使用。 支持操…...

spdlog日志格式化 标志全指南

一、spdlog格式化核心机制 SPDLOG通过set_pattern()函数实现灵活的日志格式定制&#xff0c;该函数解析用户提供的格式字符串&#xff0c;生成包含时间、源代码、进程等信息的结构化日志。其底层由pattern_formatter类处理&#xff0c;通过识别%标志符的组合动态生成格式化器对…...

http接口性能优化方案

设计高响应时间的HTTP查询接口&#xff08;<80ms&#xff09; 要实现跨机房调用的HTTP接口并保持响应时间在80ms以下&#xff0c;确实面临多个技术挑战。以下是关键点和解决方案&#xff1a; 主要技术难点 网络延迟&#xff1a;跨机房物理距离导致的传输延迟 TCP握手/挥手…...

Express知识框架

一、核心概念 1. Express 简介 Node.js 的 Web 框架&#xff0c;提供 HTTP 服务器封装 轻量级但灵活&#xff0c;支持中间件扩展 基于路由&#xff0c;支持 RESTful API 和传统 MVC 架构 无内置 ORM 或模板引擎&#xff0c;但可集成第三方库 2. 核心对象 express() - 创建…...

调出事件查看器界面的4种方法

方法1. 方法2. 方法3. 方法4....

Bash 执行命令的基本流程

是的&#xff0c;Bash 在执行外部命令&#xff08;如 ls、grep 等非内置命令&#xff09;时&#xff0c;确实会调用 exec 系列函数来实现进程程序替换。以下是其底层机制的分步解析&#xff1a; 1. Bash 执行命令的基本流程 当在 Bash 中键入一个命令&#xff08;例如 ls -l&a…...

我们来学mysql -- 安装8.4版本

8.4版本 下载解压用户目录&用户权限my.cnf初始化普通启动safe启动检查启动用户登录远程登录用户root% 下载 地址选择安装包 查看OS位数 getconf LONG_BIT 二进制安装包说明 二进制包的文件名会包含 linux 或 glibc 等字样如&#xff1a;mysql-8.4.4-linux-glibc2.28-x86_…...

Java MVC架构在当今时代的技术解析

一、前言 MVC&#xff08;Model-View-Controller&#xff09;架构作为经典的设计模式&#xff0c;经历了数十年的演进。尽管新兴技术层出不穷&#xff0c;Java MVC仍然在企业级开发中占据重要地位。 二、Java MVC核心优势 1. 模块化分层设计 职责分离&#xff1a;数据层&…...

FPGA----基于ZYNQ 7020实现定制化的EPICS程序开发

引言:基于前文,我们在FPGA侧实现了一些外设驱动功能,并将其导出为hdf生成了他的petalinux,借助ALINX的Debian8做了我们自己的根文件系统。现在,我们需要在petalinux下开发一个epics程序,可以调用我们FPGA的驱动。 1、整体程序架构 注意:我们基于ALINX的根文件系统是不完…...

配置hosts

打开文件 右键点击「记事本」或其他文本编辑器&#xff0c;选择「以管理员身份运行」。 打开路径&#xff1a;C:\Windows\System32\drivers\etc\hosts 添加映射 在文件末尾添加一行&#xff0c;格式为&#xff1a; plaintext IP地址 域名例如&#xff1a; plaintext 127.0.…...

Blender 入门教程(一):模型创建

一、前言 大家都知道&#xff0c;现在 AIGC 领域日新月异&#xff0c;今天 AI 大模型能生成粗糙的 3D 模型&#xff0c;明天就能做成商业级的 3D 模型&#xff0c;但是如果想要一些细节上也有的&#xff0c;还是需要自己手动对模型的布线进行调整&#xff0c;然后再蒙皮等等。…...

JVM对象头中的锁信息机制详解

JVM对象头中的锁信息机制详解 Java中的对象锁机制是高性能并发的基石&#xff0c;而这一切的底层实现都离不开对象头中的 Mark Word 字段。本文将系统梳理JVM对象头中锁信息的存储与演化机制&#xff0c;解析锁升级与批量重偏向优化原理&#xff0c;并通过JOL工具实战验证对象…...

需要低调使用的网盘小工具

周末总是过得飞快&#xff0c;转眼间周一又要来临。今天就不多说&#xff0c;直接给大家分享一款实用的小软件&#xff01; 软件介绍 今天给大家带来一款网盘转存工具——BaiduPanFilesTransfers。 这款工具是某知名网盘的批量转存利器。软件作者已经编写了一份非常详细的说明…...

js fetch流式请求 AI动态生成文本,实现逐字生成渲染效果

开启流式请求&#xff1a;向后端接口发起普通的 fetch&#xff0c;它会返回一个包含 ReadableStream 的 Response 对象获取流式读取器&#xff1a;调用 response.body.getReader() 获取一个 ReadableStreamDefaultReader 实例循环读取数据块&#xff1a;在 while(true) 循环或 …...

软考教材重点内容 信息安全工程师 第24章 工控安全需求分析与安全保护工程

24.1.1 工业控制系统概念及组成 工业控制系统是由各种控制组件、监测组件、数据处理与展示组件共同构成的对工业生产过程进行控制和监控的业务流程管控系统。工业控制系统通常简称工控系统(ICS)。工控系统通常分为离散制造类和过程控制类两大类&#xff0c;控制系统包括 SCADA…...

BGP基础实验

一、配置思路 AS200 内部路由由 OSPF 负责&#xff0c;使 AR2 ~ AR5 内部环回地址可达。 各 AS 之间通过 BGP 实现跨域路由互通。 通过 import-route ospf 语句将 OSPF 路由导入 BGP&#xff0c;再由 BGP 向外通告。 使用 network 命令通告本地环回地址。 AR1 <Huawei…...

遭遇DDoS攻击为什么不能反击回去?

遭遇DDoS&#xff08;分布式拒绝服务&#xff09;攻击时&#xff0c;不能直接“反击回去”的原因涉及技术、法律、道德和实际操作的多个层面。以下是详细分析&#xff1a; 1. 技术难题&#xff1a;难以定位真正的攻击者 分布式攻击源&#xff1a;DDoS攻击的特点是流量来自全球各…...

专题二:二叉树的深度搜索(二叉树剪枝)

以leetcode814题为例 题目分析&#xff1a; 也就是当你的子树全为0的时候就可以剪掉 算法原理分析&#xff1a; 首先分析问题&#xff0c;你子树全为0的时候才可以干掉&#xff0c;我们可以设递归到某一层的时候如何处理 然后抽象出三个核心问题 也就是假设我们递归到第2层…...

服务器共享文件夹如何实现外网访问

一、远程访问共享文件需求 有些企业在内网服务器上存储了很多重要工作文件&#xff0c;这些文件共享后需要在外网被员工访问 快解析帮助用户远程访问企业内网服务器共享文件夹 二、快解析实现远程共享文件夹的方法 下面简单介绍一下通过内网穿透快解析实现自己服务器上的共享…...

git|gitee仓库同步到github

参考&#xff1a;一次提交更新两个仓库&#xff0c;Get 更优雅的 GitHub/Gitee 仓库镜像同步 文章目录 进入需要使用镜像功能的仓库&#xff0c;进入「管理」找到「仓库镜像管理」选项&#xff0c;点击「添加镜像」按钮绑定github绑定成功后再次点击添加镜像如何申请 GitHub 私…...

1.Redis-key的基本命令

&#xff08;一&#xff09;Redis的基本类型 String&#xff0c;List&#xff0c;Set&#xff0c;Hash&#xff0c;Zset 三种特殊类型&#xff1a;geospatial&#xff08;地理空间数据&#xff09;、hyperloglog[基数估算&#xff08;去重计数&#xff09;]、bitmaps(位图&…...

配置Hadoop集群环境-使用脚本命令实现集群文件同步

在 Hadoop 集群环境中&#xff0c;确保各节点配置文件一致至关重要。以下是使用 rsync 结合 SSH 实现集群文件同步的脚本方案&#xff0c;支持批量同步文件到所有节点&#xff1a; 1. 前提条件 所有节点已配置 SSH 免密登录主节点&#xff08;NameNode&#xff09;能通过主机…...

搭建高可用及负载均衡的Redis

搭建高可用及负载均衡的Redis系统是确保数据存储和访问高效且可靠的关键。本文将详细介绍如何配置高可用的Redis集群&#xff0c;并通过负载均衡实现性能优化。 高可用Redis架构设计 高可用性是指系统在部分组件失效时仍能继续运行。对于Redis&#xff0c;高可用架构通常包括…...

Hepatology | 南京鼓楼医院余德才团队:从「无药可用」到「精准打击」!肝癌脂肪代谢分型让3类患者各有生路!

文章标题&#xff1a;Multiomics identifies metabolic subtypes based on fatty acid degradation allocating personalized treatment in hepatocellular carcinoma 发表期刊&#xff1a;Hepatology 影响因子&#xff1a;12.9 客户单位&#xff1a;南京市鼓楼医院 百趣提…...

【日撸 Java 三百行】Day 11(顺序表(一))

目录 Day 11&#xff1a;顺序表&#xff08;一&#xff09; 一、关于顺序表 二、关于面向对象 三、代码模块分析 1. 顺序表的属性 2. 顺序表的方法 四、代码及测试 拓展&#xff1a; 小结 Day 11&#xff1a;顺序表&#xff08;一&#xff09; Task&#xff1a; 在《数…...

配置集群-日志聚集操作

日志聚集是指将分布式集群中各个节点上的应用程序日志收集并汇总到一个集中的位置&#xff0c;方便后续的查看、分析和管理。在 Hadoop 和 Spark 集群中&#xff0c;日志聚集是一项重要的功能&#xff0c;下面分别介绍如何在这两个集群中配置日志聚集操作。 Hadoop 集群日志聚…...

node版本.node版本、npm版本和pnpm版本对应

报错&#xff1a; ERR_PNPM_META_FETCH_FAIL GET https://registry.npmmirror.com/rollup: Value of "this" must be of type URLSearchParams node版本 Node.js — Node.js Releases node和pnpm对应关系 Installation | pnpm 参考 NVM管理node版本.node版本、…...

电商物流管理优化:从网络重构到成本管控的全链路解析

大家好&#xff0c;我是沛哥儿。作为电商行业&#xff0c;我始终认为物流是电商体验的“最后一公里”&#xff0c;更是成本控制的核心战场。随着行业竞争加剧&#xff0c;如何通过物流网络优化实现降本增效&#xff0c;已成为电商企业的必修课。本文将从物流网络的各个环节切入…...