【结论】备份账号这条最该马上落地——它是这串讨论里唯一能同时造成“备份静默失败”和“凭据跟着备份包一起外泄”两件事的,优先级应该排在 .meta 和 pipefail 前面。
展开几点:
① --defaults-extra-file 的位置比权限更关键。 配置文件要设成 600 权限,这谁都知道;但更多人容易犯的错,是把它和备份脚本一起放在站点目录下(/www/wwwroot/你的站/ 里面)。站点目录整体打包备份时,凭据文件会和 dump 一起被打进包里,等于把钥匙和锁一起送人;而且 dump 落在站点目录下还有反代或 Nginx 配置没拦住、直接被 HTTP 下载的风险。统一放 /root/.my_backup.cnf 这类站外路径,dump 也输出到站外盘。
② 补一个 GTID 侧的坑,正好和前面说的 --skip-gtids 是一件事的两端。 8.0 的 mysqldump 默认 --set-gtid-purged=AUTO,导出的文件头会写入 SET @@GLOBAL.GTID_PURGED=...,往已有 GTID 的实例或从库上导入就会直接报冲突。脚本里显式加 --set-gtid-purged=OFF,比恢复时再补 --skip-gtids 更省事。这条建议也一起写进 .meta 备注,不然后人看不出这份 dump 是带 GTID 头还是不带。
③ 从库摘掉这条我确认一下: 对,从库连接失败会静默回退主库、只记日志,业务无感知,所以停服务比改配置省事。多从库是数组随机分流,摘一台、剩下的接着分,不会全压主库。演练完接回来,去 storage/logs 确认不再刷从库连接错误就算收工。
④ .meta 建议多记一条结束坐标或结束时间,--source-data=2 记的是起点,配合 --flush-logs 起点才准;结束坐标在排查“重放到哪一步停了”时有用。
最后补一句延伸:脚本里的 gzip 换成 pigz,多核压大库能快好几倍,而备份窗口往往就卡在压缩上。
见习用户






