惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

腾讯CDC
T
Threatpost
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
T
Tenable Blog
AWS News Blog
AWS News Blog
Know Your Adversary
Know Your Adversary
TaoSecurity Blog
TaoSecurity Blog
P
Palo Alto Networks Blog
Spread Privacy
Spread Privacy
I
Intezer
Security Latest
Security Latest
The Last Watchdog
The Last Watchdog
Google DeepMind News
Google DeepMind News
Help Net Security
Help Net Security
Cyberwarzone
Cyberwarzone
N
News and Events Feed by Topic
O
OpenAI News
A
Arctic Wolf
S
Secure Thoughts
Attack and Defense Labs
Attack and Defense Labs
N
News and Events Feed by Topic
M
MIT News - Artificial intelligence
F
Full Disclosure
P
Privacy International News Feed
The GitHub Blog
The GitHub Blog
T
Troy Hunt's Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
H
Hacker News: Front Page
aimingoo的专栏
aimingoo的专栏
S
Security @ Cisco Blogs
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Apple Machine Learning Research
Apple Machine Learning Research
Engineering at Meta
Engineering at Meta
Cloudbric
Cloudbric
大猫的无限游戏
大猫的无限游戏
Google Online Security Blog
Google Online Security Blog
Recent Announcements
Recent Announcements
H
Help Net Security
量子位
V
V2EX
美团技术团队
G
Google Developers Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
S
Schneier on Security
V2EX - 技术
V2EX - 技术
D
Docker
博客园 - 【当耐特】
Project Zero
Project Zero
博客园 - 司徒正美

博客园_首页

Plist 二进制格式 Milvus 和 PGVector,哪个更好? OpenClaw 已过时?在 VS Code 中运行 Hermes Agent! 分享一下笔者的 Mac 装机必备软件 第30篇文章:一个大三计科生的自白 Manim如何在数学公式中完美显示中文? Docker 部署 RocketMQ 5 并发编程核心概念辨析 C#事务处理最佳实践:别再让“主表存了、明细丢了”的破事发生 CLI 是什么?为什么大厂突然集体卷命令行? 【从0到1构建一个ClaudeAgent】协作-自主Agent UIImageView 设置图片不生效的原因排查 最小二乘问题详解20:无先验约束下的增量式SFM自由网平差 痞子衡嵌入式:大话双核i.MXRT1180之XIP应用里借助MU实现可靠Flash IAP的方法 AI Chat 封装, SemanticKerne.AiProvider.Unified 已发布 Windows下右键编辑js文件无法打开记事本——在注册表中使用环境变量 在后台服务中使用 Scoped 服务,为什么总是报错? H200 安装驱动并使用sglang启动模型 wireshark 抓包Trap上报告警内容 我用 AI 辅助开发了一系列小工具(2):图片压缩工具 [A Primer On MC and CC] 2.1 Memory Consistency 1 - 指令重排序和 SC 模型 Oracle数据库SCN推进技术详解与实践指南 玩转控件:封装个带图片的Label控件 Claude Code 4.7 真正该升级的不是模型,而是你的工作流 前端小白一句话,AI 帮我做了个颜值拉满的桌面媒体播放器。当代码不再是门槛,一句话编程就是现实。 5. WorkBuddy: 小龙虾的灵魂三件套,让你的小龙虾不只是工具 SQLite 分片方案实战:三种分片策略的深度对比 告别简陋 UI!一款基于 Fluent Design 和基于 WinUI 的开源免费、现代化的 Avalonia UI 控件库 关于二进制排列组合枚举的总结 AI开发-python-LangGraph框架(3-27-LangGraph从零实现大模型智能决策工作流) ElasticSearch主分片和副本分片概念详解 【002】HTTPS 粗解:证书、TLS 握手与对后端配置的影响 Hermes Agent 一周暴涨五万 Star,但我劝你别急着追 明明连接的是Redis的DB0,为什么能查到DB3的数据? 【从0到1构建一个ClaudeAgent】协作-Agent团队 熟悉电子元器件之后,电子小白下一步该怎么走? MAF快速入门(23)通过C#类定义Skills .NET 高级开发 | 手写一个对象映射框架 FastAPI数据库ORM怎么选?我肝了三个Demo后,终于不再纠结了 C# .NET 周刊|2026年3月5期 Claude code入门 - 陈彦斌 一文学习入门 ThingsBoard 开源物联网平台 GitHub 热门项目 | 2026年04月16日 如何为GIT设置全局勾子,为每次提交追加信息 Number.isFinite和isFinite与isNaN()和Number.isNaN的区别 PortSwigger SQL注入LAB2 推荐一个测试人必备的Skills,从功能到性能全搞定(附详细实操和安装下载方式) 筑基期:掌握Odoo基础核心知识点02(Odoo XML 开发方式详解) GLM模型这么火,咱们用vllm也咧一个呗! 深入理解 AbortController:从底层原理到跨语言设计哲学 字符串学习笔记 多租户系统框架的基础模块设计和分析设计 Apache SeaTunnel Zeta 为什么能做到“又快又稳”? AI开发-python-LangGraph框架(3-26-LangGraph基本概念及第一个简单样例) Vue 3 组件通信,别只会用 Props 和 Emits 了,这几个狠活儿你得看看 ElasticSearch7.X版本配置密码 用Manim实现动态交点计算--从一个动点问题说起 团结引擎+Addressable+Instant Game打包抖音小游戏 function call 实战:让 LLM 自动判断 pod 异常、调用日志工具并完成故障分析 bubseek —— 让 Agent 的足迹,变成团队的洞察 通过 C# 读取并导出 PDF 书签 如何用 GitHub Actions 实现 Steam 自动化发布 【从0到1构建一个ClaudeAgent】并发-后台任务 .NET 高级开发 | 定制 ASP.NET Core 框架 电子小白:什么是运算放大器(运放) zero2Agent:面向大厂面试的 Agent 工程教程,从概念到生产的完整学习路线 堆上的ORW HC32F460 USB CDC通信异常:非对齐访问异常排查 20260413-Hyperbridge 攻击事件:发生在默克尔山上的验证绕过 那些喊着AI 要淘汰你的人,正在靠你的焦虑赚大钱! 深度学习进阶(八)Swin Transformer 最小二乘问题详解19:带先验约束的增量式SFM优化与实现 SnapTranslate 3.0 正式发布:全局划词翻译 + 完整英语学习闭环,一站式搞定查词、记词、复习 工作的意义、工作的困难认知再思考 .NET + AI 进阶实战:基于类的技能开发 - 打造可治理的 Agent 能力模块 【从0到1构建一个ClaudeAgent】规划与协调-技能 上周热点回顾(4.6-4.12) 电子小白的工具三件套:面包板、杜邦线、万能板 单表五亿数据的查询优化 | Mysql、StarRocks 2. WorkBuddy:从“我是谁”到“帮我干活” C# 如何减少代码运行时间:7 个实战技巧 基于HelixToolkit.SharpDX 渲染3D模型 - 笺上知微 从零开始的双臂具身VLA起源及现阶段发展综述 - SkyXZ 记对 xonsh shell 的使用, 脚本编写, 迁移及调优 - pluvium27 受够了Vibe Coding的失控?换个起点,让AI事半功倍 从开始配置漏洞环境到漏洞复现流程 - 難しい 关于10年工作经验的程序员对OpenClaw的实战经验分享以及看法 - 虚无境 Any metadata 的内存布局 C# .NET 周刊|2026年3月2期 - InCerry 我帮你测过了,测试圈排名第二的 Skill 依然很牛逼 Skill Discovery | 无监督技能发现的经典工作总结 - MoonOut 上下文工程是什么?过时了么?一文讲明白! - 一枫说码 开了 TUN 模式还是直连?90% 的人都踩过这个坑 AScript扩展多种脚本语言 - rockey627 AI 学习笔记:Agent 的记忆机制 你能被装进一个文件里吗?——7 万人把同事"蒸馏"成了 AI - 我没有三颗心脏 Claude Code 通关手册(七):给 AI 装上技能包——Skills 完全指南 - 暮色之狐 在浏览器中快速编辑代码:VSCode Web 集成实践 - Newbe36524 蒸馏自己 skill?基于 Deepseek 的蒸馏器,丐版蒸馏方式,简单便捷 - To_Carpe_Diem Spring AI Aliababa和AgentScope,哪个更好? - 苏三说技术
mysqldump 参数拾遗:在遗忘与铭记之间
东山絮柳仔 · 2026-04-17 · via 博客园_首页

mysqldump工具在灾备恢复、DB间数据同步(含Server实例间同步)、主从搭建等场景下都拥有一席之地。可以说,它是DBA常用工具之一,所以就要求我们对其参数真正的了解掌握,特别是一些常用容易搞混、忽略的参数。因而,对mysqldump 那些被忽略的“摆渡”指令,要常常“淘”出来,Review 下。

一. 影响DB的参数

影响DB的参数,换句话说,DB作用域的参数,那些DB在mysqldump的作用范围内。

1.1 --all-databases

添加此参数就是备份所有的DB,例如

$> mysqldump --all-databases > dump.sql

1.2 --databases

通过此参数指定DB,例如:

$> mysqldump --databases db1 db2 db3 > dump.sql

The --databases option causes all names on the command line to be treated as database names.

1.3 参数中即没有--all-databases也没有--databases

当 mysqldump 命令中既没有 --all-databases 也没有 --databases 参数时,它的行为会根据提供的参数数量而有所不同。

简单来说,第一个参数会被视为数据库名,其后的所有参数则被视为表名。具体来讲,当只提供一个参数时,mysqldump 会备份这个指定的整个数据库;当提供两个或更多参数时,第一个参数是数据库名,后面的参数则是该数据库中需要备份的特定表。

例如:

mysqldump mydb > backup.sql

说明: 这条命令会备份 mydb 数据库中的所有表。

mysqldump mydb table1 table2 > backup.sql

说明: 这条命令只会备份 mydb 数据库中的 table1 和 table2 这两张表。

英文官网的原文

Without this option【指--databases】, mysqldump treats the first name as a database name and those following as table names.

二.使用--all-databases 或 --databases对备份还原的影响

影响很多,在此强调一点:

使用--all-databases 或  --databases:生成的备份文件会包含 CREATE DATABASE 和 USE 语句。

With --all-databases or --databases, mysqldump writes CREATE DATABASE and USE statements prior to the dump output for each database.

不使用 --all-databases 或  --databases:生成的备份文件不包含 CREATE DATABASE 和 USE 语句。

2.1 生成的备份文件会包含 CREATE DATABASE 和 USE 语句

恢复时:可以直接导入,备份文件会自动创建数据库并选择它。例如

mysql -u root -p < backup.sql

优点:适合跨服务器恢复,因为它能确保数据库被创建。

2.2 不包含 CREATE DATABASE 和 USE  语句

恢复时:你必须先手动创建目标数据库(如果它不存在),并在导入时指定该数据库。例如:

mysql -u root -p mydb < backup.sql

或者,通过source的方式

mysql> CREATE DATABASE IF NOT EXISTS db1;
mysql> USE db1;
mysql> source dump.sql

优点:可以将数据导入到一个与原来名字不同的数据库中。

2.3 CREATE DATABASE的解读

生成的主要命令如下:

CREATE DATABASE /*!32312 IF NOT EXISTS */ `mydb` 
/*!40100 DEFAULT CHARACTER SET utf8mb4 */;

(1)/*!32312 IF NOT EXISTS */: 这是一个条件注释。

它的意思是:如果数据库不存在才创建。
前面的数字 32312 代表 MySQL 版本号(3.23.12)。只有当目标数据库版本高于此版本时,才会执行 IF NOT EXISTS。这是一种兼容旧版本的保护机制,防止因数据库已存在而报错。
(2)反引号 mydb : 数据库名会被反引号包裹,防止库名包含特殊字符或与保留字冲突。
(3)/*!40100 DEFAULT CHARACTER SET utf8mb4 */: 这也是一个条件注释。
它会显式指定字符集(如 utf8mb4 或 latin1),确保恢复数据时,新库的字符集与备份时一致,避免乱码。

2.4 回顾自动生成的建表的语句

当使用 mysqldump 默认或加上 --add-drop-table 参数时,生成的 SQL 结构如下:

-- 1. 安全删除旧表(默认 或 使用了 --add-drop-table)
DROP TABLE IF EXISTS `class_students`;

-- 2. 保存当前客户端字符集设置
/*!40101 SET @saved_cs_client     = @@character_set_client */;

-- 3. 设置本次建表的字符集环境(关键!防止乱码)
/*!50503 SET character_set_client = utf8mb4 */;

-- 4. 核心建表语句
CREATE TABLE `class_students` (
  `student_id` int NOT NULL AUTO_INCREMENT,
  `student_name` varchar(50) NOT NULL,
  `gender` enum('','') NOT NULL,
  `age` tinyint unsigned NOT NULL,
  `birth_date` date DEFAULT NULL,
  -- ... 其他字段 ...
  `class_id` int NOT NULL,
  PRIMARY KEY (`student_id`),
  KEY `idx_class_id` (`class_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

-- 5. 恢复之前的客户端字符集设置
/*!40101 SET character_set_client = @saved_cs_client */;

三.参数 --single-transaction

--single-transaction 是一个在进行 MySQL 在线备份时非常关键的参数,它的核心作用是在不锁表的情况下,为 InnoDB 存储引擎的表创建一个数据一致的备份。
这对于生产环境至关重要,因为它可以避免备份操作阻塞正常的业务写入,实现所谓的“热备份”。

--single-transaction 参数通过利用 InnoDB 引擎的 MVCC (多版本并发控制) 特性来工作。

注意:

(1)仅对 InnoDB 表有效.
(2)无法避免元数据锁(MDL)等待
虽然它不锁表,但在备份开始时,它需要获取表的元数据锁。如果此时有长时间未提交的事务,或者有 DDL 操作(如 ALTER TABLE)正在执行,mysqldump 进程可能会因为等待元数据锁而被阻塞,直到这些操作完成。
(3)不能与 --lock-tables 同时使用
--single-transaction 和 --lock-tables 是互斥的。mysqldump 默认会开启 --lock-tables,因此使用 --single-transaction 时,它会自动禁用 --lock-tables。

四.参数--flush-logs

这个参数非常有意思,很有使用价值,但是也往往容易被忽略。关于此参数的使用,简单举几个例子。

例子1,我需要将DB1中的两张表的数据实时同步到DB2。自己通过Python脚本实现,实时同步借助模块python-mysql-replication。脚本启动时需要告诉从那个地方开始监控(收听)变更,即需要传递两个参数 log_file 和 log_pos。

            log_file: Set replication start log file
            log_pos: Set replication start log pos (resume_stream should be
                     true)

如果在通过mysqldump做全量同步时,指定了--flush-logs,参数 log_file 和 log_pos就非常容易获取了。 log_file 就是执行命令新产生的binlog文件;log_pos就是4。

例子2,如果是基于 mysqldump 搭建搭的建备份还原的机制(针对不太大的关键数据表),在每次mysqldump中做一个--flush-logs,对【Establishing a Backup Policy】、【Point-in-Time (Incremental) Recovery】都很有帮助。---可快速定位 log_file 和 log_pos。

此外,--flush-logs对搭建主从、故障隔离(或者说对故障现场隔离,某一个文件前后),都有一定的帮助。

当然,此参数不是万能,但是最好在一定场景下可以想到,恰好出现。

五.参数--set-gtid-purged

是 一个与 GTID(全局事务标识符) 复制模式紧密相关的关键参数。它的核心作用是控制备份文件中是否包含用于设置目标服务器 GTID 状态的语句,这直接决定了备份数据导入后,是否会参与或影响现有的主从复制环境。

当 MySQL 开启了 GTID 模式 (gtid_mode=ON) 时,mysqldump 的默认行为(AUTO)会在导出的 SQL 文件中自动添加两条关键语句:

语句1

SET @@SESSION.SQL_LOG_BIN= 0;

作用:在当前会话中关闭二进制日志(binlog)的记录。

后果:导入这些数据时产生的所有操作都不会被记录到 binlog 中。由于从库是通过读取主库的 binlog 来同步数据的,这意味着这次导入的数据不会同步到任何从库。

语句2

SET @@GLOBAL.GTID_PURGED='...';

作用:将源数据库的 GTID 执行集合设置到目标数据库中。
后果:这会让目标数据库“认为”这些 GTID 对应的事务已经被执行过了。

--set-gtid-purged 参数就是用来控制是否在备份文件中包含上述两条语句的。

参数值 是否在文件中添加SET ...语句 适用场景
AUTO (默认)  (如果源库开启了 GTID) 适用于构建新的从库全库恢复。基于一个全量备份来搭建一个新的从库时,导入备份后,新从库的 gtid_purged 变量被设置,它知道自己已经“拥有”了主库到备份点为止的所有事务。让新从库的数据和 GTID 状态与主库在备份时刻完全一致。此时再执行 CHANGE MASTER TO 命令,复制就能从正确的位置无缝开始。
ON  (如果源库未开启 GTID 则会报错) 与 AUTO 类似,但更严格。明确指定需要 GTID 信息。
OFF

适用于部分数据恢复数据迁移克隆开发库。导入操作会正常记录 binlog,并生成新的 GTID,不影响现有复制拓扑。

例1,在主库上进行部分数据恢复 (使用 OFF)。当你在主库上误删了某个表,需要用备份文件恢复这一个表时,必须使用 OFF,恢复操作会像正常业务一样产生 binlog 和新的 GTID,并安全地复制到所有从库,保证数据一致性。

例2,数据迁移或克隆 (使用 OFF)。当你想把生产库的某个库克隆到测试环境,或者将数据从一个复制集群迁移到另一个独立的集群时,必须使用 OFF,数据导入后会生成属于目标集群的全新 GTID,完全独立,互不干扰,避免 GTID 冲突。如果使用默认的 AUTO,备份文件中包含的 GTID 集合会被导入到目标库。如果目标库本身也是一个复制集群的一部分,这些“外来”的 GTID 会污染其 GTID 执行历史,极有可能导致复制中断。

六.参数--master-data

--master-data 参数是搭建 MySQL 主从复制(Master-Slave Replication)时的神器。它的核心作用非常明确:在备份文件中自动记录当前二进制日志(Binlog)的文件名和位置(Position)。

当使用 --master-data 时,mysqldump 会在生成的 SQL 文件头部插入一条 CHANGE MASTER TO 语句。

参数值行为描述适用场景
--master-data=1 直接执行。生成的 CHANGE MASTER TO 语句是有效 SQL。当你导入备份文件时,这条语句会被立即执行,自动配置好主从关系。 适用于自动化脚本,导入即配置。
--master-data=2 注释形式。生成的 CHANGE MASTER TO 语句会被 -- 注释掉。它不会自动执行,只是把信息留在那里供你查看或手动复制执行。 适用于人工操作,比较安全,防止误操作覆盖现有的复制配置。

说明:

(1)mysqldump 的 --master-data 参数的默认值是 1。这意味着,如果你在命令中只写了 --master-data 而没有指定具体的数值(例如 --master-data=2),系统会自动按照 --master-data=1 的逻辑执行。

(2)为了保证获取坐标时数据的一致性,默认情况下它会执行 FLUSH TABLES WITH READ LOCK(全局读锁)。如果你同时使用了 --single-transaction,则不会锁表,而是利用 InnoDB 的事务特性来获取一致性坐标。可以理解为加上 --single-transaction 后,mysqldump 会在 InnoDB 事务开启的瞬间获取 Binlog 坐标,既保证了坐标与数据的一致性,又避免了锁表。

(3)DB实例如果已经开启了GTID,那么搭建主从,就不要考虑--master-data了;mysqldump中也就不要出现--master-data了。