MySQL 数据库备份与还原
作者:IvanCodes
日期:2025年5月18日
专栏:MySQL教程
思维导图
备份 (Backup) 与 冗余 (Redundancy) 的核心区别: 🎯
备份是指创建数据的副本并将其存储在不同位置或介质,主要目的是在发生数据丢失、损坏或逻辑错误时进行恢复到某一历史状态。冗余是指在系统中维护数据的多个实时或近实时副本(例如 RAID 磁盘阵列、数据库主从复制),主要目的是提高系统的可用性和容错性,当主副本故障时可以快速切换到备用副本。冗余通常不能防止逻辑错误(如误删除数据会同步到所有副本)或恢复到特定历史时间点。
mysqldump
逻辑备份详解: 📄➡️SQL
mysqldump
是 MySQL 官方提供的命令行工具,用于生成数据库的逻辑备份。它将数据库的结构定义(如 CREATE TABLE
语句)和数据内容(如 INSERT INTO
语句)导出为一系列 SQL 语句,通常保存为一个 .sql
文件。这种备份方式灵活,跨平台和版本兼容性好。
一、表级操作 📦
- 表级备份 (备份指定表):
备份特定数据库中的一个或多个表,包含其结构和数据。
语法:
mysqldump -u [username] -p[password] [db_name] [table_name1] [table_name2] ... > tables_backup.sql
示例:备份 company_db
数据库中的 employees
和 departments
表。
mysqldump -u appuser -psecret company_db employees departments > company_db_emp_dept.sql
- 表级还原 (还原指定表):
将之前备份的表结构和数据导入到目标数据库中。通常目标数据库需要已存在。如果备份文件包含CREATE TABLE
语句 (默认) 且目标库中已有同名表,可能需要先手动DROP
目标表或备份文件中有DROP TABLE IF EXISTS
(mysqldump 默认添加)。
语法:
mysql -u [username] -p[password] [db_name] < tables_backup.sql
示例:将 company_db_emp_dept.sql
中的表还原到 company_db
数据库。
mysql -u appuser -psecret company_db < company_db_emp_dept.sql
注意:此方法会将备份文件中的所有表导入指定数据库。若只想从多表备份文件中还原特定一个表,需手动编辑 SQL 文件提取该表相关语句,或使用 sed
/awk
等工具处理。
二、库级操作 🗄️
- 库级备份 (备份单个或多个数据库):
备份一个或多个完整的数据库,包含其所有对象(表、视图、存储过程等)的结构和数据。
备份单个数据库 (不含CREATE DATABASE
语句):
mysqldump -u [username] -p[password] [db_name] > single_db_backup.sql
示例:备份 sales_db
数据库。
mysqldump -u data_analyst -psales_pass sales_db > sales_db_backup.sql
备份多个数据库 (使用 --databases
选项,备份文件会包含 CREATE DATABASE IF NOT EXISTS
语句):
mysqldump -u [username] -p[password] --databases [db_name1] [db_name2] ... > multiple_dbs_backup.sql
示例:备份 hr_db
和 finance_db
数据库。
mysqldump -u admin_user -padmin_pass --databases hr_db finance_db > hr_finance_dbs_backup.sql
- 库级还原 (还原单个或多个数据库):
如果备份文件是使用--databases
选项生成的,它通常包含创建数据库的语句,可以直接导入。如果备份的是单个数据库且不含CREATE DATABASE
语句,则还原前目标数据库通常需要已存在(或手动创建)。
还原单个数据库 (假设single_db_backup.sql
不含CREATE DATABASE
):
-- 1. (如果数据库不存在) 在 mysql 客户端手动创建数据库:
-- CREATE DATABASE IF NOT EXISTS sales_db;
-- 2. 导入备份文件:
mysql -u [username] -p[password] [db_name] < single_db_backup.sql
示例:还原 sales_db_backup.sql
到 sales_db
。
mysql -u data_analyst -psales_pass sales_db < sales_db_backup.sql
还原多个数据库 (备份文件由 --databases
生成,包含 CREATE DATABASE
):
mysql -u [username] -p[password] < multiple_dbs_backup.sql
示例:还原 hr_finance_dbs_backup.sql
。
mysql -u admin_user -padmin_pass < hr_finance_dbs_backup.sql
三、全库操作 🌍
- 全库备份 (备份 MySQL 服务器上的所有数据库):
使用--all-databases
(或-A
) 选项备份实例上的所有用户数据库。备份文件会包含所有数据库的CREATE DATABASE IF NOT EXISTS
语句。通常建议同时备份存储过程、函数、触发器和事件。
语法:
mysqldump -u [root_or_admin_user] -p[password] --all-databases --routines --triggers --events > full_instance_backup.sql
示例:以 root 用户备份所有数据库及相关对象。
mysqldump -u root -proot_password --all-databases --routines --triggers --events > mysql_server_full_backup.sql
- 全库还原 (还原所有数据库):
由于--all-databases
生成的备份文件包含所有必要信息,可以直接导入到目标 MySQL 服务器 (通常是空实例或用于灾难恢复)。
语法:
mysql -u [root_or_admin_user] -p[password] < full_instance_backup.sql
示例:还原 mysql_server_full_backup.sql
。
mysql -u root -proot_password < mysql_server_full_backup.sql
警告:全库还原是破坏性操作,会覆盖目标服务器上所有同名数据库。通常用于新环境搭建或灾难恢复。在生产环境执行前务必三思并确保有回退计划。
四、mysqldump
常用重要选项详解 🔧
--user=[username]
或-u [username]
: 指定连接 MySQL 的用户名。--password=[password]
或-p[password]
: 指定密码。如果密码为空或包含特殊字符,建议使用-p
然后按提示输入。--host=[hostname]
或-h [hostname]
: 指定连接的 MySQL 服务器主机名或 IP 地址 (默认为localhost
)。--port=[port_num]
或-P [port_num]
: 指定连接的 MySQL 服务器端口号 (默认为3306
)。--single-transaction
: 对于 InnoDB 表,在单个事务中进行备份,不阻塞写操作,实现热备份并保证数据一致性。对 MyISAM 表无效。
示例:
mysqldump -u dbuser -pdbpass --single-transaction my_innodb_db > my_innodb_db_consistent.sql
--master-data=1
或--master-data=2
:=1
: 在备份文件中输出CHANGE MASTER TO
语句,注释掉。用于设置从库。=2
: 与=1
类似,但CHANGE MASTER TO
语句是注释掉的。更常用的是,它会在备份文件头部以注释形式记录当前二进制日志文件名和位置 (MASTER_LOG_FILE
,MASTER_LOG_POS
)。这对于基于二进制日志的时间点恢复 (PITR) 至关重要。
示例:
mysqldump -u dbuser -pdbpass --single-transaction --master-data=2 my_db > my_db_with_binlog_info.sql
--flush-logs
或-F
: 在开始备份前,关闭当前的二进制日志文件并创建一个新的。通常与--master-data
配合使用,以确保全备之后的所有更改都记录在新 binlog 中。--routines
或-R
: 备份数据库中的存储过程和函数。--triggers
: 备份表上的触发器 (通常是默认行为,但显式指定更清晰)。--events
或-E
: 备份事件调度器中定义的事件。--no-data
或-d
: 只备份数据库结构(表定义、视图、存储过程等),不包含任何行数据。
示例:
mysqldump -u dbuser -pdbpass --no-data my_db > my_db_structure_only.sql
--no-create-info
或-t
: 只备份数据(INSERT
语句),不包含CREATE TABLE
语句。通常与--no-data
备份配合使用,或用于向已存在的表追加数据。
示例:
mysqldump -u dbuser -pdbpass --no-create-info my_db my_table > my_table_data_only.sql
--databases
: 明确指定一个或多个数据库进行备份,并在输出的 SQL 文件中包含CREATE DATABASE IF NOT EXISTS
和USE
语句。--all-databases
或-A
: 备份 MySQL 服务器上的所有数据库。--add-drop-database
: 在每个CREATE DATABASE
语句前添加DROP DATABASE IF EXISTS
语句。谨慎使用。--add-drop-table
: 在每个CREATE TABLE
语句前添加DROP TABLE IF EXISTS
语句 (默认行为)。--skip-add-drop-table
: 禁止在CREATE TABLE
前添加DROP TABLE IF EXISTS
。--where='condition_string'
: 只导出表中满足指定WHERE
条件的行。
示例:只备份orders
表中2023年的订单
mysqldump -u dbuser -pdbpass my_db orders --where="YEAR(order_date) = 2023" > orders_2023.sql
--ignore-table=db_name.table_name
: 在备份数据库或所有数据库时,忽略指定的表。可以多次使用此选项来忽略多个表。
示例:备份my_db
但忽略my_db.logs
表
mysqldump -u dbuser -pdbpass my_db --ignore-table=my_db.logs > my_db_no_logs.sql
--result-file=/path/to/output.sql
或-r /path/to/output.sql
: 直接将输出写入指定文件,而不是标准输出。在 Windows 上可能比重定向>
更可靠。--default-character-set=charset_name
: 指定备份时使用的字符集,如utf8mb4
。--set-gtid-purged=OFF|AUTO|ON
: 控制备份文件中 GTID 信息的包含。对于基于 GTID 的复制环境非常重要。--dump-slave
或--master-data
: 已提及,对于复制和 PITR 至关重要。--tz-utc
: 备份时将会话时区设置为 UTC,并在备份文件中添加SET TIME_ZONE='+00:00'
。有助于在不同时区的服务器间迁移数据时保持时间戳一致性。
5. mysqldump
+ 二进制日志 (Binlog) 实现增量备份与时间点恢复 (PITR) ⏳🔄
mysqldump
执行的是全量逻辑备份。为了实现真正的增量备份效果和精确的时间点恢复 (Point-in-Time Recovery, PITR),必须结合 MySQL 的二进制日志 (Binary Log)。
基本策略与流程:
-
确保二进制日志已启用:
在 MySQL 配置文件 (my.cnf
或my.ini
) 中检查或添加/修改以下参数:log_bin = /path/to/your/binlog/mysql-bin
(指定 binlog 文件名前缀和路径)server_id = unique_server_id
(每个 MySQL 服务器实例必须有唯一的 ID)binlog_format = ROW
(推荐,基于行的复制更准确,尤其是有不确定性函数时)
修改配置后需重启 MySQL 服务。
-
执行定期全量备份并记录 Binlog 位置:
例如,每天或每周执行一次全量备份。关键在于备份时记录下当时的二进制日志文件名和位置 (position)或GTID(如果使用 GTID 复制)。使用mysqldump
的--master-data=2
和--flush-logs
选项可以方便地做到这一点。
示例:每日全量备份脚本的一部分
BACKUP_DIR="/mnt/backups/mysql"
DATE_SUFFIX=$(date +%Y-%m-%d_%H-%M-%S)
FULL_BACKUP_FILE="${BACKUP_DIR}/full_backup_${DATE_SUFFIX}.sql.gz"
LOG_FILE="${BACKUP_DIR}/backup_log_${DATE_SUFFIX}.log"echo "Starting full backup at $(date)" >> ${LOG_FILE}
mysqldump -u root -pYourRootPassword --all-databases \--master-data=2 \--single-transaction \--flush-logs \--routines --triggers --events \--default-character-set=utf8mb4 \| gzip > ${FULL_BACKUP_FILE}if [ ${PIPESTATUS[0]} -eq 0 ]; thenecho "Full backup successful: ${FULL_BACKUP_FILE}" >> ${LOG_FILE}
elseecho "Full backup FAILED!" >> ${LOG_FILE}
fi
echo "Backup finished at $(date)" >> ${LOG_FILE}
备份完成后,查看 .sql.gz
解压后的文件头部,会有类似这样的注释:
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.0000XX', MASTER_LOG_POS=YYYY;
这里的 mysql-bin.0000XX
和 YYYY
就是全备完成时的 binlog 文件和位置,是后续增量恢复的起点。
-
持续备份二进制日志文件:
在两次全量备份之间,MySQL 会持续产生新的二进制日志文件。这些文件记录了自上次日志刷新(例如由--flush-logs
触发)以来的所有数据修改操作。你需要将这些物理的 binlog 文件定期从 MySQL 服务器的数据目录(或log_bin
指定的路径)复制到安全的备份存储位置。这些是你的“增量”数据。
可以通过SHOW BINARY LOGS;
查看当前的 binlog 文件列表。通常,当一个 binlog 文件达到max_binlog_size
或执行FLUSH LOGS;
时,会生成新的 binlog 文件。 -
时间点恢复 (PITR) 流程: 🚑
假设数据库在某个时间点T_failure
发生故障,而你希望恢复到故障前的某个时间点T_restore
。
a. 确定恢复基准: 找到在T_restore
之前的最近一次成功的全量备份文件,以及该备份对应的binlog 文件名 (start_log_file
)和位置 (start_log_pos
)。
b. 准备恢复环境: 通常在一个新的或已清理的 MySQL 实例上进行恢复。
c. 还原全量备份:
bash gunzip < /mnt/backups/mysql/full_backup_YYYY-MM-DD_HH-MM-SS.sql.gz | mysql -u root -pYourRootPassword
d. 找到并准备需要应用的 Binlog 文件: 收集中从start_log_file
开始,一直到包含T_restore
时间点的所有 binlog 文件。将这些文件按顺序放在一个可访问的目录。
e. 应用 Binlog 进行增量恢复: 使用mysqlbinlog
工具读取这些 binlog 文件,并将其中的 SQL 语句通过管道传递给mysql
客户端执行。你需要精确控制应用的范围。
示例:假设全备对应mysql-bin.000005
位置154
,要恢复到2023-10-27 10:30:00
,期间的 binlog 文件是mysql-bin.000005
,mysql-bin.000006
,mysql-bin.000007
。# 应用第一个相关的 binlog,从指定位置开始mysqlbinlog --start-position=154 /path/to/binlogs/mysql-bin.000005 | mysql -u root -pYourRootPassword# 应用中间完整的 binlog 文件mysqlbinlog /path/to/binlogs/mysql-bin.000006 | mysql -u root -pYourRootPassword# 应用最后一个相关的 binlog,直到指定停止时间点mysqlbinlog --stop-datetime="2023-10-27 10:30:00" /path/to/binlogs/mysql-bin.000007 | mysql -u root -pYourRootPassword```
mysqlbinlog
的其他重要选项:
--start-datetime="YYYY-MM-DD HH:MM:SS"
--stop-position=pos_num
--database=db_name
(如果只想恢复特定数据库的更改)
如果使用 GTID,恢复过程会略有不同,通常依赖于 GTID 集合来确定恢复点。
通过这种“全量备份 + 增量二进制日志”的策略,可以实现非常灵活和精确的数据恢复。
练习题 ✍️
假设你有一个用户 backup_user
密码为 backup_pass
,数据库 mydb
中有表 table1
, table2
, logs
。
- 编写命令备份
mydb
数据库中的table1
和table2
到文件mydb_tables.sql
。
答案:
mysqldump -u backup_user -pbackup_pass mydb table1 table2 > mydb_tables.sql
- 编写命令备份整个
mydb
数据库 (包含结构和数据) 到mydb_full.sql.gz
(压缩格式)。
答案:
mysqldump -u backup_user -pbackup_pass mydb | gzip > mydb_full.sql.gz
- 编写命令仅备份
mydb
数据库的结构 (不含数据) 到mydb_structure.sql
。
答案:
mysqldump -u backup_user -pbackup_pass --no-data mydb > mydb_structure.sql
- 编写命令备份所有数据库,包含存储过程和触发器,到
all_dbs_with_routines.sql
,并记录二进制日志位置。
答案:
mysqldump -u backup_user -pbackup_pass --all-databases --routines --triggers --master-data=2 > all_dbs_with_routines.sql
- 编写命令还原
mydb_full.sql.gz
备份文件到名为mydb_restored
的新数据库 (假设mydb_restored
已手动创建且为空)。
答案:
gunzip < mydb_full.sql.gz | mysql -u backup_user -pbackup_pass mydb_restored
- 编写命令备份
mydb
数据库,但忽略mydb.logs
表,输出到mydb_no_logs.sql
。
答案:
mysqldump -u backup_user -pbackup_pass mydb --ignore-table=mydb.logs > mydb_no_logs.sql
- 编写命令备份
mydb.table1
中status
列为 ‘active’ 的所有行到active_rows_table1.sql
。
答案:
mysqldump -u backup_user -pbackup_pass mydb table1 --where="status='active'" > active_rows_table1.sql
- 编写命令备份
mydb
数据库,使用单事务模式,并且在备份开始前刷新日志,输出到mydb_flushed_single_trans.sql
。
答案:
mysqldump -u backup_user -pbackup_pass --single-transaction --flush-logs mydb > mydb_flushed_single_trans.sql
- 假设
all_dbs_with_routines.sql
是通过--all-databases
生成的。编写命令将其还原到 MySQL 服务器。
答案:
mysql -u backup_user -pbackup_pass < all_dbs_with_routines.sql
- 编写命令备份
mydb
数据库,并指定使用utf8mb4
字符集,输出到mydb_utf8mb4.sql
。
答案:
mysqldump -u backup_user -pbackup_pass --default-character-set=utf8mb4 mydb > mydb_utf8mb4.sql
相关文章:
MySQL 数据库备份与还原
作者:IvanCodes 日期:2025年5月18日 专栏:MySQL教程 思维导图 备份 (Backup) 与 冗余 (Redundancy) 的核心区别: 🎯 备份是指创建数据的副本并将其存储在不同位置或介质,主要目的是在发生数据丢失、损坏或逻辑错误时进…...
【数据结构】2-3-4 单链表的建立
数据结构知识点合集 尾插法建立单链表 建立链表时总是将新节点插入到链表的尾部,将新插入的节点作为链表的尾节点 /*尾插法建立链表L*/ LinkList List_TailInsert(LinkList &L) { int x; /*建立头节点*/ L (LNode *)malloc(sizeof(LNode)); /*…...
JVM如何处理多线程内存抢占问题
目录 1、堆内存结构 2、运行时数据 3、内存分配机制 3.1、堆内存结构 3.2、内存分配方式 1、指针碰撞 2、空闲列表 4、jvm内存抢占方案 4.1、TLAB 4.2、CAS 4.3、锁优化 4.4、逃逸分析与栈上分配 5、问题 5.1、内存分配竞争导致性能下降 5.2、伪共享(…...
猫番阅读APP:丰富资源,优质体验,满足你的阅读需求
猫番阅读APP是一款专为书籍爱好者设计的移动阅读应用,致力于提供丰富的阅读体验和多样化的书籍资源。它不仅涵盖了小说、非虚构、杂志等多个领域的电子书,还提供了个性化推荐、书架管理、离线下载等功能,满足不同读者的阅读需求。无论是通勤路…...
Redis 学习笔记 4:优惠券秒杀
Redis 学习笔记 4:优惠券秒杀 本文基于前文的黑马点评项目进行学习。 Redis 生成全局唯一ID 整个全局唯一 ID 的结构如下: 这里的时间戳是当前时间基于某一个基准时间(项目开始前的某个时间点)的时间戳。序列号是依赖 Redis 生…...
C++学习:六个月从基础到就业——C++17:if/switch初始化语句
C学习:六个月从基础到就业——C17:if/switch初始化语句 本文是我C学习之旅系列的第四十六篇技术文章,也是第三阶段"现代C特性"的第八篇,主要介绍C17引入的if和switch语句的初始化表达式特性。查看完整系列目录了解更多内…...
C++跨平台开发经验与解决方案
在当今软件开发领域,跨平台开发已成为一个重要的需求。C作为一种强大的系统级编程语言,在跨平台开发中扮演着重要角色。本文将分享在实际项目中的跨平台开发经验和解决方案。 1. 构建系统选择 CMake的优势 跨平台兼容性好 支持多种编译器和IDE 强大…...
RabbitMQ 工作模式(上)
前言 在 RabbitMQ 中,一共有七种工作模式,我们也可以打开官网了解: 本章我们先介绍前三种工作模式 (Simple)简单模式 P:producer 生产者,负责发送消息 C:consumer 消费者&#x…...
为什么需要加密机服务?
前言 大家好,我是老马。 以前我自己在写工具的时候,都是直接自己实现就完事了。 但是在大公司,或者说随着合规监管的要求,自己随手写的加解密之类的,严格说是不合规的。 作为一家技术性公司,特别是金融…...
【Linux】利用多路转接epoll机制、ET模式,基于Reactor设计模式实现
📚 博主的专栏 🐧 Linux | 🖥️ C | 📊 数据结构 | 💡C 算法 | 🅒 C 语言 | 🌐 计算机网络 上篇文章:多路转接epoll,实现echoserver 至此,Linux与…...
c/c++的findcontours崩溃解决方案
解决 Windows 平台 OpenCV findContours 崩溃:一种更稳定的方法 许多在 Windows 平台上使用 OpenCV 的开发者可能会在使用 findContours 函数时,遇到令人头疼的程序崩溃问题。尽管网络上流传着多种解决方案,但它们并非总能根治此问题。 当时…...
机器学习 Day18 Support Vector Machine ——最优美的机器学习算法
1.问题导入: 2.SVM定义和一些最优化理论 2.1SVM中的定义 2.1.1 定义 SVM 定义:SVM(Support Vector Machine,支持向量机)核心是寻找超平面将样本分成两类且间隔最大 。它功能多样,可用于线性或非线性分类…...
npm与pnpm--为什么推荐pnpm
包管理器中 npm是最经典的,但大家都任意忽略一个更优质的管理器:pnpm 1. 核心区别 特性npmpnpm依赖存储方式扁平化结构(可能重复依赖)硬链接 符号链接(共享依赖,节省空间)安装速度较慢&#…...
ollama调用千问2.5-vl视频图片UI界面小程序分享
1、问题描述: ollama调用千问2.5-vl视频图片内容,通常用命令行工具不方便,于是做了一个python UI界面与大家分享。需要提前安装ollama,并下载千问qwen2.5vl:7b 模型,在ollama官网即可下载。 (8G-6G 显卡可…...
济南国网数字化培训班学习笔记-第三组-1-电力通信传输网认知
电力通信传输网认知 电力通信基本情况 传输介质 传输介质类型(导引与非导引) 导引传输介质,如电缆、光纤; 非导引传输介质,如无线电波; 传输介质的选择影响信号传输质量 信号传输模式(单工…...
Kubernetes控制平面组件:Kubelet详解(六):pod sandbox(pause)容器
云原生学习路线导航页(持续更新中) kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计(一)Kubernetes架构原则和对象设计(二)Kubernetes架构原则和对象设计(三)Kubernetes控…...
51单片机,两路倒计时,LCD1602 ,Proteus仿真
初始上电 默认2路都是0分钟的倒计时 8个按键 4个一组 一组控制一路倒计时 4个 按键:加 减 开始或者暂停 复位到0分钟相当于停止 针对第一路倒计时 4个 按键2:加 减 开始或者暂停 复位到0分钟相当于停止 针对第2路倒计时 哪一路到了0后蜂鸣器响 对应LED点亮 main.c 文件实现了…...
MySQL之储存引擎和视图
一、储存引擎 基本介绍: 1、MySQL的表类型由储存引擎(Storage Engines)决定,主要包括MyISAM、innoDB、Memory等。 2、MySQL数据表主要支持六种类型,分别是:CSV、Memory、ARCHIVE、MRG_MYISAN、MYISAM、InnoBDB。 3、这六种又分…...
写spark程序数据计算( 数据库的计算,求和,汇总之类的)连接mysql数据库,写入计算结果
1. 添加依赖 在项目的 pom.xml(Maven)中添加以下依赖: xml <!-- Spark SQL --> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-sql_2.12</artifactId> <version>3.3.0…...
一:操作系统之系统调用
系统调用:用户程序与操作系统交互的桥梁 在计算机的世界里,应用程序是我们日常接触最多的部分,比如浏览器、文本编辑器、游戏等等。然而,这些应用程序并不能直接控制硬件资源,比如读写硬盘、创建新进程、发送网络数据…...
【ROS2】 核心概念6——通信接口语法(Interfaces)
古月21讲/2.6_通信接口 官方文档:Interfaces — ROS 2 Documentation: Humble documentation 官方接口代码实战:https://docs.ros.org/en/humble/Tutorials/Beginner-Client-Libraries/Single-Package-Define-And-Use-Interface.html ROS 2使用简化的描…...
SmartETL函数式组件的设计与应用
SmartETL框架主要采用了面向对象的设计思想,将ETL过程中的处理逻辑抽象为Loader和Processor(对应loader模块和iterator模块),所有流程组件需要继承或实现DataProvider(iter方法)或JsonIterator(…...
Spring Security与SaToken的对比与优缺点分析
Spring Security与SaToken对比分析 一、框架定位 Spring Security 企业级安全解决方案,深度集成Spring生态提供完整的安全控制链(认证、授权、会话管理、攻击防护)适合中大型分布式系统 SaToken 轻量级权限认证框架,专注Token会…...
|从零开始的Pyside2界面编程| 环境搭建以及第一个ui界面
🐑 |从零开始的Pyside2界面编程| 环境搭建以及第一个ui界面🐑 文章目录 🐑 |从零开始的Pyside2界面编程| 环境搭建以及第一个ui界面🐑♈前言♈♈Pyside2环境搭建♈♈做个简单的UI界面♈♒代码实现♒♒QTdesigner设计UI界面♒ ♒总…...
【爬虫】DrissionPage-7
官方文档: https://www.drissionpage.cn/browser_control/get_page_info/ 1. 页面信息 📌 html 描述:返回当前页面的 HTML 文本。注意:不包含 <iframe> 元素的内容。返回类型:str 示例: html_co…...
系统架构设计(十二):统一过程模型(RUP)
简介 RUP 是由 IBM Rational 公司提出的一种 面向对象的软件工程过程模型,以 UML 为建模语言,是一种 以用例为驱动、以架构为中心、迭代式、增量开发的过程模型。 三大特征 特征说明以用例为驱动(Use Case Driven)需求分析和测…...
深入解析Java事件监听机制与应用
Java事件监听机制详解 一、事件监听模型组成 事件源(Event Source) 产生事件的对象(如按钮、文本框等组件) 事件对象(Event Object) 封装事件信息的对象(如ActionEvent包含事件源信息…...
QT聊天项目DAY11
1. 验证码服务 1.1 用npm安装redis npm install redis 1.2 修改config.json配置文件 1.3 新建redis.js const config_module require(./config) const Redis require("ioredis");// 创建Redis客户端实例 const RedisCli new Redis({host: config_module.redis_…...
Python训练营---Day29
知识点回顾 类的装饰器装饰器思想的进一步理解:外部修改、动态类方法的定义:内部定义和外部定义 作业:复习类和函数的知识点,写下自己过去29天的学习心得,如对函数和类的理解,对python这门工具的理解等&…...
Flask-SQLAlchemy_数据库配置
1、基本概念(SQLAlchemy与Flask-SQLAlchemy) SQLAlchemy 是 Python 生态中最具影响力的 ORM(对象关系映射)库,其设计理念强调 “框架无关性”,支持在各类 Python 项目中独立使用,包括 Flask、D…...
世界银行数字经济指标(1990-2022年)-社科数据
世界银行数字经济指标(1990-2022年)-社科数据https://download.csdn.net/download/paofuluolijiang/90623839 https://download.csdn.net/download/paofuluolijiang/90623839 此数据集涵盖了1990年至2022年间全球各国的数字经济核心指标,数据…...
Redis进阶知识
Redis 1.事务2. 主从复制2.1 如何启动多个Redis服务器2.2 监控主从节点的状态2.3 断开主从复制关系2.4 额外注意2.5拓扑结构2.6 复制过程2.6.1 数据同步 3.哨兵选举原理注意事项 4.集群4.1 数据分片算法4.2 故障检测 5. 缓存5.1 缓存问题 6. 分布式锁 1.事务 Redis的事务只能保…...
NY337NY340美光固态颗粒NC010NC012
NY337NY340美光固态颗粒NC010NC012 在存储技术的浩瀚星空中,美光的NY337、NY340、NC010、NC012等固态颗粒宛如璀璨星辰,闪耀着独特的光芒。它们承载着先进技术与无限潜力,正深刻影响着存储行业的格局与发展。 一、技术架构与核心优势 美光…...
DAY26 函数定义与参数
浙大疏锦行-CSDN博客 知识点回顾: 1.函数的定义 2.变量作用域:局部变量和全局变量 3.函数的参数类型:位置参数、默认参数、不定参数 4.传递参数的手段:关键词参数 5.传递参数的顺序:同时出现三种参数类型时 函数的定义…...
系统安全及应用
目录 一、账号安全控制 1.基本安全措施 (1)系统账号清理 (2)密码安全控制 (3)历史命令,自动注销 2.用户提权和切换命令 2.1 su命令用法 2.2 sudo命令提权 2.3通过是sudo执行特权命令 二、系统引导和登录控制…...
微信小程序 地图 使用 射线法 判断目标点是否在多边形内部(可用于判断当前位置是否在某个区域内部)
目录 射线法原理简要逻辑代码 小程序代码调试基础库小程序配置地图数据地图多边形点与多边形关系 射线法 原理 使用射线法来判断,目标点是否在多边形内部 这里简单说下,具体细节可以看这篇文章 平面几何:判断点是否在多边形内(…...
第三十七节:视频处理-视频读取与处理
引言:解码视觉世界的动态密码 在数字化浪潮席卷全球的今天,视频已成为信息传递的主要载体。从短视频平台的爆火到自动驾驶的视觉感知,视频处理技术正在重塑人类与数字世界的交互方式。本指南将深入探讨视频处理的核心技术,通过Python与OpenCV的实战演示,为您揭开动态影像…...
什么是 Flink Pattern
在 Apache Flink 中,Pattern 是 Flink CEP(Complex Event Processing)模块 的核心概念之一。它用于定义你希望从数据流中检测出的 事件序列模式(Event Sequence Pattern)。 🎯 一、什么是 Flink Pattern&am…...
ADB基本操作和命令
1.ADB的含义 adb 命令是 Android 官方提供,调试 Android 系统的工具。 adb 全称为 Android Debug Bridge(Android 调试桥),是 Android SDK 中提供的用于管理 Android 模拟器或真机的工具。 adb 是一种功能强大的命令行工具&#x…...
NSString的三种实现方式
oc里的NSString有三种实现方式,为_ _NSCFConstantString、__NSCFString、NSTaggedPointerString 1._ _NSCFConstantString(字面量字符串) 从字面意思上可以看出,_ _NSCFContantString可以理解为常量字符串,这种类型的字符串在编译期就确定了…...
2025年PMP 学习二十 第13章 项目相关方管理
第13章 项目相关方管理 序号过程过程组过程组1识别相关方启动2规划相关方管理规划3管理相关方参与与执行4监控相关方参与与监控 相关方管理,针对于团队之外的相关方的,核心目标是让对方为了支持项目,以达到项目目标。 文章目录 第13章 项目相…...
学习黑客Kerberos深入浅出:安全王国的门票系统
Kerberos深入浅出:安全王国的门票系统 🎫 作者: 海尔辛 | 发布时间: 2025-05-18 🔑 理解Kerberos:为什么它如此重要? Kerberos是现代网络环境中最广泛使用的身份验证协议之一,尤其在Windows Active Dire…...
蓝桥杯19681 01背包
问题描述 有 N 件物品和一个体积为 M 的背包。第 i 个物品的体积为 vi,价值为 wi。每件物品只能使用一次。 请问可以通过什么样的方式选择物品,使得物品总体积不超过 M 的情况下总价值最大,输出这个最大价值即可。 输入格式 第一行输…...
使用 Auto-Keras 进行自动化机器学习
使用 Auto-Keras 进行自动化机器学习 了解自动化机器学习以及如何使用 auto-keras 完成它。如今,机器学习并不是一个非常罕见的术语,因为像 DataCamp、Coursera、Udacity 等组织一直在努力提高他们的效率和灵活性,以便将机器学习的教育带给普…...
算法刷题Day9 5.18:leetcode定长滑动窗口3道题,结束定长滑动窗口,用时1h
12. 1852.每个子数组的数字种类数 1852. 每个子数组的数字种类数 - 力扣(LeetCode) 思想 找到nums 所有 长度为 k 的子数组中 不同 元素的数量。 返回一个数组 ans,其中 ans[i] 是对于每个索引 0 < i < n - k,nums[i..(i …...
Protect Your Digital Privacy: Obfuscate, Don’t Hide
Protect Your Digital Privacy: Obfuscate, Don’t Hide In today’s digital world, hiding completely online is nearly impossible. But you can protect yourself by deliberately obfuscating your personal information — making it harder for others to track, pro…...
Spark 的运行模式(--master) 和 部署方式(--deploy-mode)
Spark 的 运行模式(--master) 和 部署方式(--deploy-mode),两者的核心区别在于 资源调度范围 和 Driver 进程的位置。 一、核心概念对比 维度--master(运行模式)--deploy-mode(部署…...
从零开始实现大语言模型(十五):并行计算与分布式机器学习
1. 前言 并行计算与分布式机器学习是一种使用多机多卡加速大规模深度神经网络训练过程,以减少训练时间的方法。在工业界的训练大语言模型实践中,通常会使用并行计算与分布式机器学习方法来减少训练大语言模型所需的钟表时间。 本文介绍PyTorch中的一种…...
生产模式下react项目报错minified react error #130的问题
这天,线上突然出现了一个bug,某个页面打开空白,看控制台报错minified react error #130,在本地看却是正常的,百思不得其解。 后来发现是由于线上项目它的包更新过了,而我本地的包没有更新,所以我…...
本地无损放大软件-realesrgan-gui
—————【下 载 地 址】——————— 【本章下载一】:https://drive.uc.cn/s/84516041df174 【本章下载二】:https://pan.xunlei.com/s/VOQDybD4ruF0-m8UJrCF-HtLA1?pwdxz9e# 【百款黑科技】:https://ucnygalh6wle.feishu.cn/wiki/…...