<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recovery on PlumePHP</title><link>https://plumephp.com/tags/recovery/</link><description>Recent content in Recovery on PlumePHP</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Thu, 13 Aug 2026 11:35:00 +0800</lastBuildDate><atom:link href="https://plumephp.com/tags/recovery/index.xml" rel="self" type="application/rss+xml"/><item><title>备份恢复与高可用方案</title><link>https://plumephp.com/database-backup-recovery/</link><pubDate>Thu, 13 Aug 2026 11:35:00 +0800</pubDate><guid>https://plumephp.com/database-backup-recovery/</guid><description>&lt;p&gt;数据是企业最核心的资产。完善的备份恢复策略与高可用架构是保障数据安全、业务连续性的底线工程。本文系统讲解 MySQL 备份恢复方案与高可用架构选型。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="1-备份策略设计"&gt;1. 备份策略设计&lt;/h2&gt;
&lt;h3 id="11-备份维度"&gt;1.1 备份维度&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;维度&lt;/th&gt;
					&lt;th&gt;策略&lt;/th&gt;
					&lt;th&gt;RPO&lt;/th&gt;
					&lt;th&gt;RTO&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;全量备份&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;每周/每日全备&lt;/td&gt;
					&lt;td&gt;24h&lt;/td&gt;
					&lt;td&gt;小时级&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;增量备份&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;XtraBackup 增量 + Binlog&lt;/td&gt;
					&lt;td&gt;小时级&lt;/td&gt;
					&lt;td&gt;分钟级&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;实时复制&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;主从同步 + Binlog&lt;/td&gt;
					&lt;td&gt;秒级&lt;/td&gt;
					&lt;td&gt;秒级&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;跨地域备份&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;异地机房/云存储&lt;/td&gt;
					&lt;td&gt;取决于同步&lt;/td&gt;
					&lt;td&gt;分钟级&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="12-321-备份原则"&gt;1.2 321 备份原则&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;3 份数据副本
2 种不同存储介质
1 份异地备份
&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;
&lt;h2 id="2-物理备份percona-xtrabackup"&gt;2. 物理备份：Percona XtraBackup&lt;/h2&gt;
&lt;h3 id="21-特点"&gt;2.1 特点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;热备份：不锁表或只锁很短时间&lt;/li&gt;
&lt;li&gt;支持增量备份&lt;/li&gt;
&lt;li&gt;支持流式压缩备份&lt;/li&gt;
&lt;li&gt;支持并行备份&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="22-全量备份"&gt;2.2 全量备份&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 全量备份&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;xtrabackup --backup --target-dir&lt;span class="o"&gt;=&lt;/span&gt;/backup/full/&lt;span class="k"&gt;$(&lt;/span&gt;date +%Y%m%d&lt;span class="k"&gt;)&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --user&lt;span class="o"&gt;=&lt;/span&gt;backup --password&lt;span class="o"&gt;=&lt;/span&gt;xxx --host&lt;span class="o"&gt;=&lt;/span&gt;localhost
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 备份过程：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 1. 拷贝 InnoDB 数据文件（不锁表）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 2. 执行 FLUSH TABLES WITH READ LOCK（FTWRL）复制非 InnoDB 文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 3. 记录 Binlog 位点（用于恢复时点）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 4. 解锁&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="23-增量备份"&gt;2.3 增量备份&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 周日全量&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;xtrabackup --backup --target-dir&lt;span class="o"&gt;=&lt;/span&gt;/backup/full
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 周一增量（基于周日全量）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;xtrabackup --backup --target-dir&lt;span class="o"&gt;=&lt;/span&gt;/backup/inc1 &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --incremental-basedir&lt;span class="o"&gt;=&lt;/span&gt;/backup/full
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 周二增量（基于周一增量）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;xtrabackup --backup --target-dir&lt;span class="o"&gt;=&lt;/span&gt;/backup/inc2 &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --incremental-basedir&lt;span class="o"&gt;=&lt;/span&gt;/backup/inc1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 恢复：准备（apply log）→ 合并 → 恢复&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;xtrabackup --prepare --apply-log-only --target-dir&lt;span class="o"&gt;=&lt;/span&gt;/backup/full
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;xtrabackup --prepare --apply-log-only --target-dir&lt;span class="o"&gt;=&lt;/span&gt;/backup/full &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --incremental-dir&lt;span class="o"&gt;=&lt;/span&gt;/backup/inc1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;xtrabackup --prepare --target-dir&lt;span class="o"&gt;=&lt;/span&gt;/backup/full &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --incremental-dir&lt;span class="o"&gt;=&lt;/span&gt;/backup/inc2
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 拷贝恢复&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;xtrabackup --copy-back --target-dir&lt;span class="o"&gt;=&lt;/span&gt;/backup/full &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --datadir&lt;span class="o"&gt;=&lt;/span&gt;/var/lib/mysql
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="24-流式备份到远程"&gt;2.4 流式备份到远程&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 压缩流式备份到远程&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;xtrabackup --backup --stream&lt;span class="o"&gt;=&lt;/span&gt;xbstream --compress &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;|&lt;/span&gt; ssh backup-server &lt;span class="s2"&gt;&amp;#34;xbstream -x -C /backup/&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 或使用 nc/socat&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="3-逻辑备份mysqldump--mydumper"&gt;3. 逻辑备份：mysqldump / mydumper&lt;/h2&gt;
&lt;h3 id="31-mysqldump"&gt;3.1 mysqldump&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 全库逻辑备份（单线程，适合小库）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mysqldump -u root -p --all-databases --single-transaction &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --routines --triggers --events &amp;gt; full_backup.sql
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 关键参数：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# --single-transaction: 开启事务一致性备份（InnoDB）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# --master-data=2: 记录 Binlog 位点到注释&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# --quick: 不缓存全表到内存（大表必选）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# --where: 条件备份&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="32-mydumper多线程逻辑备份"&gt;3.2 mydumper（多线程逻辑备份）&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 多线程备份（推荐大库）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mydumper -u root -p xxx -B mydb -t &lt;span class="m"&gt;4&lt;/span&gt; -o /backup/mydumper/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# -t 4: 4 个线程&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 输出：每个表一个文件 + metadata（Binlog 位点）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 恢复&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;myloader -u root -p xxx -d /backup/mydumper/ -t &lt;span class="m"&gt;4&lt;/span&gt; -B mydb
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="33-物理-vs-逻辑备份对比"&gt;3.3 物理 vs 逻辑备份对比&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;维度&lt;/th&gt;
					&lt;th&gt;物理备份（XtraBackup）&lt;/th&gt;
					&lt;th&gt;逻辑备份（mysqldump）&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;速度&lt;/td&gt;
					&lt;td&gt;快（文件拷贝）&lt;/td&gt;
					&lt;td&gt;慢（逐行导出）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;大小&lt;/td&gt;
					&lt;td&gt;紧凑（数据文件）&lt;/td&gt;
					&lt;td&gt;较大（文本+INSERT）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;恢复速度&lt;/td&gt;
					&lt;td&gt;极快&lt;/td&gt;
					&lt;td&gt;慢&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;跨版本&lt;/td&gt;
					&lt;td&gt;有限制&lt;/td&gt;
					&lt;td&gt;兼容性好&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;部分恢复&lt;/td&gt;
					&lt;td&gt;难&lt;/td&gt;
					&lt;td&gt;容易（单表恢复）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;增量备份&lt;/td&gt;
					&lt;td&gt;支持&lt;/td&gt;
					&lt;td&gt;不支持&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;适用&lt;/td&gt;
					&lt;td&gt;大库、生产环境&lt;/td&gt;
					&lt;td&gt;小库、数据迁移&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="4-基于-binlog-的-pitr时间点恢复"&gt;4. 基于 Binlog 的 PITR（时间点恢复）&lt;/h2&gt;
&lt;h3 id="41-原理"&gt;4.1 原理&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;全量备份（周日 00:00）
 │
 ▼
恢复全量 ──► 应用增量（周一、周二）
 │
 ▼
 应用 Binlog（精确到秒）
 │
 ▼
 恢复到&amp;#34;误删前 1 秒&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="42-恢复步骤"&gt;4.2 恢复步骤&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 1. 恢复全量 + 增量（见上节）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 2. 查找目标 Binlog 文件和位点&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mysqlbinlog /var/lib/mysql/binlog.000042 &lt;span class="p"&gt;|&lt;/span&gt; grep -i &lt;span class="s2"&gt;&amp;#34;DROP TABLE&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 找到误操作的位点：2024-01-15 14:30:25&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 3. 应用 Binlog 到目标位点前&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mysqlbinlog --start-position&lt;span class="o"&gt;=&lt;/span&gt;xxx --stop-datetime&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2024-01-15 14:30:24&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; /var/lib/mysql/binlog.000042 /var/lib/mysql/binlog.000043 &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;|&lt;/span&gt; mysql -u root -p
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="43-延迟从库预防误操作最佳实践"&gt;4.3 延迟从库（预防误操作最佳实践）&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ini" data-lang="ini"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 配置延迟从库（延迟 1 小时）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;[mysqld]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;replica_parallel_workers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;CHANGE REPLICATION SOURCE TO&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;SOURCE_DELAY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;3600; -- 延迟 3600 秒&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 误操作后可快速从延迟从库恢复&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="5-高可用架构方案"&gt;5. 高可用架构方案&lt;/h2&gt;
&lt;h3 id="51-主从复制基础"&gt;5.1 主从复制（基础）&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Master ──► Binlog ──► Slave
 │ │
 │ └── 只读查询、备份
 └── 写请求

复制模式：
- 异步复制：Master 不等待 Slave 确认（默认，可能丢数据）
- 半同步复制：Master 等至少一个 Slave ACK（减少丢数据风险）
- 组复制：Multi-Master（MySQL 8.0 Group Replication）
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="52-mhamaster-high-availability"&gt;5.2 MHA（Master High Availability）&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;架构：
Manager 节点（监控+决策）
 │
 ├── Master (写)
 ├── Slave1 (候选新主)
 └── Slave2 (从)

故障检测：Manager 定期 ping 所有节点
故障转移：
 1. 检测到 Master 不可达
 2. 从 Slaves 中选举最新数据的节点
 3. 应用差异 Binlog（relay log）
 4. 提升为新的 Master
 5. 其他 Slaves 重新指向新 Master
 
切换时间：通常 10-30 秒

局限：Manager 单点、需要 SSH 免密、只支持一主多从
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="53-orchestrator推荐"&gt;5.3 Orchestrator（推荐）&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;优势（相比 MHA）：
1. 可视化拓扑管理（Web UI）
2. 支持 GTID 和普通复制
3. 可以处理复杂拓扑（级联复制）
4. sophisticated 故障检测（避免网络抖动误判）
5. 手工/自动故障转移都支持
6. 支持 Pre-failover hooks（自定义逻辑）

部署：
docker run -d --name orchestrator \
 -p 3000:3000 \
 openarkcode/orchestrator

关键配置：
&amp;#34;RecoveryMasterPromotionIgnoreHostnameFilters&amp;#34;: [],
&amp;#34;RecoverMasterClusterFilters&amp;#34;: [&amp;#34;.*&amp;#34;],
&amp;#34;RecoveryPeriodBlockSeconds&amp;#34;: 3600 # 故障恢复后禁止再次切换的时间
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="54-mysql-group-replicationmgr"&gt;5.4 MySQL Group Replication（MGR）&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;原生高可用（MySQL 5.7+）：

Primary-Secondary 模式：
 Primary: 读写
 Secondary × N: 只读（自动复制）
 
 Primary 故障 → 自动选举新 Primary（基于 Paxos 算法）

Multi-Primary 模式：
 多个节点都可读写
 冲突检测：Certification-based
 局限：不支持 SERIALIZABLE、外键需小心

配置要点：
group_replication_group_name = &amp;#34;aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee&amp;#34;
group_replication_local_address = &amp;#34;node1:33061&amp;#34;
group_replication_group_seeds = &amp;#34;node1:33061,node2:33061,node3:33061&amp;#34;
group_replication_single_primary_mode = ON
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="55-方案对比"&gt;5.5 方案对比&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;方案&lt;/th&gt;
					&lt;th&gt;自动故障转移&lt;/th&gt;
					&lt;th&gt;数据一致性&lt;/th&gt;
					&lt;th&gt;复杂度&lt;/th&gt;
					&lt;th&gt;适用&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;主从手动&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;❌&lt;/td&gt;
					&lt;td&gt;异步&lt;/td&gt;
					&lt;td&gt;低&lt;/td&gt;
					&lt;td&gt;非核心系统&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;MHA&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;✅&lt;/td&gt;
					&lt;td&gt;半同步可选&lt;/td&gt;
					&lt;td&gt;中&lt;/td&gt;
					&lt;td&gt;中大型系统&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Orchestrator&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;✅&lt;/td&gt;
					&lt;td&gt;配置灵活&lt;/td&gt;
					&lt;td&gt;中&lt;/td&gt;
					&lt;td&gt;推荐方案&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;MGR&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;✅&lt;/td&gt;
					&lt;td&gt;强一致（多数派）&lt;/td&gt;
					&lt;td&gt;中&lt;/td&gt;
					&lt;td&gt;MySQL 8.0+&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;MySQL Router&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;✅&lt;/td&gt;
					&lt;td&gt;取决于后端&lt;/td&gt;
					&lt;td&gt;低&lt;/td&gt;
					&lt;td&gt;配合 MGR&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;ProxySQL&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;✅&lt;/td&gt;
					&lt;td&gt;配置灵活&lt;/td&gt;
					&lt;td&gt;中&lt;/td&gt;
					&lt;td&gt;读写分离 + 故障转移&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="6-读写分离架构"&gt;6. 读写分离架构&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt; ┌──► Read Replica 1
App ──► ProxySQL ├──► Read Replica 2
 │ (读负载均衡)
 └──► Master (写)
 
ProxySQL 规则：
- SELECT ... FOR UPDATE → Master
- SELECT * FROM ... → Replica
- INSERT/UPDATE/DELETE → Master
- 自定义规则（按用户、Schema、查询 pattern）
&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;
&lt;h2 id="7-灾难恢复演练"&gt;7. 灾难恢复演练&lt;/h2&gt;
&lt;h3 id="71-定期演练计划"&gt;7.1 定期演练计划&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;演练类型&lt;/th&gt;
					&lt;th&gt;频率&lt;/th&gt;
					&lt;th&gt;内容&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;全量恢复&lt;/td&gt;
					&lt;td&gt;每季度&lt;/td&gt;
					&lt;td&gt;从备份恢复到测试环境，验证可用&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;PITR 恢复&lt;/td&gt;
					&lt;td&gt;每半年&lt;/td&gt;
					&lt;td&gt;恢复到指定时间点，验证精度&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;故障切换&lt;/td&gt;
					&lt;td&gt;每月&lt;/td&gt;
					&lt;td&gt;模拟主库宕机，验证自动切换&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;跨区域恢复&lt;/td&gt;
					&lt;td&gt;每年&lt;/td&gt;
					&lt;td&gt;从异地备份恢复完整环境&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="72-恢复时间目标"&gt;7.2 恢复时间目标&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;分级&lt;/th&gt;
					&lt;th&gt;RTO&lt;/th&gt;
					&lt;th&gt;RPO&lt;/th&gt;
					&lt;th&gt;方案&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;核心业务&lt;/td&gt;
					&lt;td&gt;&amp;lt; 5min&lt;/td&gt;
					&lt;td&gt;&amp;lt; 1min&lt;/td&gt;
					&lt;td&gt;MGR + 异地热备&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;重要业务&lt;/td&gt;
					&lt;td&gt;&amp;lt; 30min&lt;/td&gt;
					&lt;td&gt;&amp;lt; 1h&lt;/td&gt;
					&lt;td&gt;MHA/Orchestrator + Binlog&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;一般业务&lt;/td&gt;
					&lt;td&gt;&amp;lt; 4h&lt;/td&gt;
					&lt;td&gt;&amp;lt; 24h&lt;/td&gt;
					&lt;td&gt;定时备份 + 手动恢复&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="8-总结"&gt;8. 总结&lt;/h2&gt;
&lt;p&gt;数据库备份与高可用是系统工程：&lt;/p&gt;</description></item></channel></rss>