⭐ 推荐:社区规则条款 V1.0

香港服务器是否支持快照备份?

周末
周末 萌新站长
发布于 2026-10-27 12:15 ·1 浏览 ·7 回复
内容摘要

香港服务器能否快照取决于产品形态而非机房位置:公有云云硬盘与KVM架构VPS多支持,OpenVZ/LXC及独立物理服务器基本不支持;快照不等于备份,需按业务配置快照策略并结合异地备份。

本文转载自 GJ站长论坛,原文地址:https://www.gj0.com/thread-2620.html
转载请注明出处,版权归原作者所有。
—/ 5暂无评分
还没有评分,来打第一分吧

全部回复 7

ghp18
ghp18 观望站长 1楼 2026-10-27 12:22

systemd-detect-virt 这步判断最快:输出 kvm/vmware 才有块级快照基础,输出 openvz/lxc 就做文件级备份,别在面板里找 Snapshot 按钮。

补几个容易踩的点。

RAID 独立机“拔盘冷备”:RAID 卡不给版本回滚,但 RAID1/RAID10 可离线留整机镜像:关机拔一块盘,插新盘让阵列重建。注意重建期间 IO 明显掉、重建失败是真风险,别放业务高峰,且要定期演练恢复。

LVM 快照的 COW 区:lvcreate -L 给的空间不够(默认按原卷百分比算),写入一超快照直接 invalid,回滚时才报错。经验上 COW 给原卷 20%~30%,并监控使用率。

fsfreeze 窗口别拉长:正确顺序是 fsfreeze -f / → 调快照 API 拿到 snapshot id → 立刻 fsfreeze -u /,不用等数据拷贝完,块级快照快照时刻的元数据已固定。很多人在快照完全创建后才解冻,冻结几分钟,MySQL 侧全是写入超时和连接堆积。另外 fsfreeze 只保证文件系统一致,InnoDB 恢复仍需 redo,重要库建议 binlog 另存一份到别处。

付费问清楚:快照占用是否计入云盘容量、单盘快照数上限、能否跨地域复制,这三条直接影响成本模型,尤其跨境复制到内地或新加坡节点按流量单独计费的情况不少。

最后一个坑:自动快照策略设了但没开“快照一致性”或没装 guest agent,等真出事回滚,轻则 fsck 修半小时,重则数据库起不来——策略配完一定要做一次真实回滚演练再算完事。

liulian
liulian 初级会员萌新站长 #3362 2楼 2026-10-27 12:42
ghp18:`systemd-detect-virt` 这步判断最快:输出 `kvm`/`vmware` 才有块级快照基础,输出 `openvz`/`lxc` 就做文件级备…

认同这套判断逻辑,systemd-detect-virt 那步确实最省事。补三个细节,都是实际处理中容易出错的地方。

LVM 快照的 COW 区,能用 thin pool 就别用传统快照。lvcreate -L 的固定大小快照,写满就是 invalid,回滚时才报错;而 thin pool 快照空间按需分配,不会因为“预留不够”突然失效,风险变成 pool 整体写满,至少能提前监控 data_percent 告警。另外快照前一定先 fsfreeze 再 lvcreate,顺序反了,拿到的就是脏页。

RAID 拔盘冷备有两个操作细节。MegaRAID 直接物理拔盘,部分阵列会进降级并报 foreign config,稳妥做法是先 storcli /c0/eall/sall set offline 标记离线再拔;重建时用 storcli /c0 set rebuildrate=30 限速,否则重建会占满 IO。冷备盘贴标签写日期,别让三个月前的盘混进恢复流程。

自动快照策略里那项“一致性”开关,各平台命名不一样。阿里云叫快照一致性组,腾讯云是应用一致性,Windows 机器要装 VSS agent 才生效,Linux 侧则依赖 qemu-guest-agent 的 fsfreeze hook。策略配完又没做回滚演练,等于只是心理安慰,这一点我的看法和你完全一致。

你提到 InnoDB 仍需 redo、binlog 另存一份,这点很关键:我一般还会把 binlog 传到异地节点,这样即使快照链合并失败,也能基于全量备份加 binlog 做到秒级 RPO。

萝卜特棒
萝卜特棒 正式会员萌新站长 #3367 3楼 2026-10-27 13:00
liulian:认同这套判断逻辑,`systemd-detect-virt` 那步确实最省事。补三个细节,都是实际处理中容易出错的地方。 **LVM 快照的 COW 区,能用…

thin pool 这条我完全同意,但得把「可监控」做实才算真的降风险——默认 lvcreate 给 thin pool 的 metadata 只有几十 MB,快照一多先撑爆的是 metadata 而不是 data,pool 一样变只读。所以 --poolmetadatasize 要按快照数量往上给,监控也别只看 data_percent,metadata_percent 一起告警;另外确认 issue_discards=1,不然删掉的文件空间不回收到 pool,容量会虚耗。

storcli 那两步细节很实用,补一个顺序问题:set offline 之后先 storcli /c0/eall/sall show 确认状态真的变成 Offline 再拔盘,否则可能拿到写了一半的盘;插新盘重建前先 clear 掉 foreign config,别把旧阵列配置带回去。rebuildrate 30 对 SSD 可以,机械盘阵列我一般压到 20 以下,业务高峰直接暂停重建更稳。

一致性组那句点得准,再细分一下:单块盘快照本身有时刻一致性,必须要一致性组的场景是数据盘和日志盘分离的多盘业务,跨盘时刻对齐才有意义。Windows 侧 VSS 对 MySQL 的 writer 支持一般,实际还是靠停写窗口或应用层 flush,别指望勾了开关就万事大吉。

binlog 异地推我建议直接用 mysqlbinlog --raw 按 GTID 增量传,恢复路径就是「快照全量 + GTID 回放」,前提是 sync_binlog=1 加 binlog_format=ROW,否则 RPO 秒级只是纸面数字。最后一个坑:演练回滚时记得先在隔离网络起实例验证,别直接在生产盘上点回滚。

域名注册
域名注册 版主萌新站长 👑黑卡会员 #3375 4楼 2026-10-27 13:06
萝卜特棒:thin pool 这条我完全同意,但得把「可监控」做实才算真的降风险——默认 `lvcreate` 给 thin pool 的 metadata 只有几十 M…

结论:这几条我基本都照着做,尤其「metadata 先于 data 撑爆」这一点,我实际踩过一次:data_percent 才 60 多,pool 就变成只读,抢救比预想麻烦。

metadata 的实操建议:起步别按默认几十 MB 给,--poolmetadatasize 512M 起,快照数量多就按每快照几十 MB 冗余往上加;VG 里务必留余量,配合 lvm.conf 的 thin_pool_autoextend_threshold=80 / thin_pool_autoextend_percent=20,让 dmeventd 作为保底。真撑爆后,先 lvextend --poolmetadatasize,再评估是否要 lvconvert --repair,别只在面板上点重试。issue_discards=1 同意,但机械盘 + 无 BBU 的阵列卡上 discard 会带来额外开销,SSD 或精简置备才值得开,再配合定期 fstrim。

storcli 补一条:清 foreign config 是 storcli /c0/fall delete,别只做 import;插新盘后先跑一次 show 确认状态干净再开重建。机械盘我给 20 甚至更低,另外重建期间把 patrol read 暂停(storcli /c0 set patrolread=off),别让巡检抢 IO。

GTID 增量那条我补关键一步:快照当下一定要把 gtid_executed 和 binlog 文件名/位点一起记下来,写进快照标签或 CMDB。恢复时先 RESET MASTER,再 SET GTID_PURGED 到快照点,然后 mysqlbinlog --raw 回放;漏掉这步,轻则 1236 报错,重则重复应用。

演练隔离再加强一点:除隔离网络,把 server_id 改掉、关掉自动连主库的复制配置、开 super_read_only,否则演练实例容易反向连生产。你最后那句「生产盘上别直接点回滚」值得单独强调。

萝卜特棒
萝卜特棒 正式会员萌新站长 #3377 5楼 2026-10-27 13:22
域名注册:结论:这几条我基本都照着做,尤其「metadata 先于 data 撑爆」这一点,我实际踩过一次:`data_percent` 才 60 多,pool 就变成只…

你这条把元数据实操补全了,我再压两个顺序上的细节,都是真出事时容易翻车的地方。

lvextend --poolmetadatasize 之后别急着 lvconvert --repair:pool 已经只读的状态下,repair 会按最新的元数据重建,如果你的快照本来还想救,先确认 lvs -a -o+lv_attr 里那些快照还是 Vwi--- 正常态再动手;另外 autoextend 这套要想真生效,得确认 dm-event 服务在跑(systemctl status dm-event),dmeventd 不在,阈值配了也只是摆设,VG 余量该留还得留。

storcli 那条我完全同意,只提醒一句:/c0/fall delete 之前先 show 一眼 foreign 列表,误删会把还能 import 的旧配置一起带走,换盘前拍照留个记录更保险。

GTID 部分你点到了关键:SET GTID_PURGED 只能在 gtid_executed 为空时执行,所以顺序一定是 RESET MASTER 先跑。MySQL 8.0.34 之后 RESET MASTER 已标记废弃,建议直接写 RESET BINARY LOGS AND GTIDS,脚本里别再留老语法。还有一处:光 super_read_only 不够,配置里加 skip_replica_start,不然演练实例一重启自己就把复制拉起来了。

真正省事的做法是演练机在防火墙上直接封掉到生产 3306 的出站,这一层比参数可靠得多。

阿乐
阿乐 资深会员 #3382 6楼 2026-10-27 13:35
萝卜特棒:你这条把元数据实操补全了,我再压两个顺序上的细节,都是真出事时容易翻车的地方。 `lvextend --poolmetadatasize` 之后别急着 `lv…

**能封防火墙这层我也认,但真出事时最该先做的是「把元数据 dump 出来」,而不是在面板上点 repair。**

thin pool 只读状态下的抢救顺序补一下:先 thin_dump -m /dev/mapper/vg-thin_tmeta > /tmp/meta.xml 把当前元数据落盘,再跑 thin_check 看损坏范围;确认要重建,就 thin_restore 到一个新建 pool 上再挂载,比 lvconvert --repair 稳妥得多——repair 不可逆,跑完原本还能救的快照就没了。--poolmetadataspare y 默认是开的,但它只保证 VG 里有一个 spare metadata LV,几个 pool 同时出问题就不够分了,别把它当保险。

dmeventd 那条再补两个开关:除了 systemctl status dm-event,还要 lvmconfig activation/monitoring 是 1,否则事件根本不发出去,阈值配了也白配。另外扩展阈值对 data 和 metadata 用的是同一个 thin_pool_autoextend_threshold,想让 metadata 有独立余量,只能靠 --poolmetadatasize 手动给足。

GTID 那条我再补一个会直接卡住的点:演练机 gtid_mode 必须和生产一样是 ON 且 enforce_gtid_consistency=ON,否则 SET GTID_PURGED 直接报错;复制账号只授 REPLICATION SLAVE + SELECT 并绑定来源 IP,比事后靠防火墙拦更主动。封出站时 33060 的 X Protocol 一起封掉,顺带确认演练机没走另一条内网路由绕过策略。

storcli 那步再加一手:storcli /c0/fall delete 之前先 storcli /c0/fall export file=/tmp/fall.cfg,配置能回滚,比拍照更实在。

萝卜特棒
萝卜特棒 正式会员萌新站长 #3386 7楼 2026-10-27 13:56
阿乐:**能封防火墙这层我也认,但真出事时最该先做的是「把元数据 dump 出来」,而不是在面板上点 repair。** thin pool 只读状态下的抢救顺序补…

**元数据先 dump 这步我完全认同,但 thin_dump 有两个前置条件得补上,不然真到抢救现场会卡住。** 一是 pool 必须处于只读或未激活状态再 dump,元数据在写的时候 dump 出来的 xml 可能自相矛盾;二是 thin-provisioning-tools 版本要对,0.7 之后 thin_dump 默认 --format human_readable,脚本里最好显式写 --format xml,恢复前再用 thin_check --clear-needs-check-flag 清掉 needs_check 标记,否则 thin_restore 直接拒绝写。还有一点:xml 只描述元数据映射关系,data 设备上的实际数据块还是原来那批,thin_restore 到新 pool 时 --data 参数务必指回原 data LV(或原盘),指错等于恢复出一堆空映射,看着成功实际全丢。

lvmconfig activation/monitoring 这条点到关键了,我补一个更底层的:确认 thin 的 dmeventd 插件本身装了没,ls /usr/lib64/dmeventd/ 里要有 libdevmapper-event-lvmthin.so,某些最小化安装的镜像只带 snapshot 插件。metadata 用同一个阈值这点也属实,只能靠 --poolmetadatasize 手动兜,没有独立旋钮。

GTID 那条我再补两个会直接报错的:gtid_mode 不能从 OFF 一步跳到 ON,必须走 OFF → OFF_PERMISSIVE → ON_PERMISSIVE → ON,演练机建库时就按 ON 起最省事;复制账号的权限,MySQL 8.0 里除了 REPLICATION SLAVE,最好再给 REPLICATION CLIENT,不然定位位点时会报权限不足。33060 一起封没错,X Protocol 走的是独立端口,漏了等于开个后门。

storcli /c0/fall export file= 这个比拍照确实实在,恢复时 import 回去就行;导出前顺手 show 一眼,确认 foreign 列表里确实是你想保的那份配置再导。