修复备份文件属主处理

This commit is contained in:
yml2213
2026-08-16 23:37:15 +08:00
parent 7d7141c055
commit ca4372271a
+16 -4
View File
@@ -13,7 +13,14 @@ source "${SCRIPT_DIR}/backup-common.sh"
cleanup_dir=''
cleanup() {
if [[ -n "${cleanup_dir}" && -d "${cleanup_dir}" ]]; then
rm -rf -- "${cleanup_dir}"
# XtraBackup 会保留源文件属主;失败时先在容器内归还临时目录属主,
# 再由运行备份的业务用户删除,避免残留无法清理的大文件。
docker run --rm --user 0:0 \
-v "${cleanup_dir}:/cleanup" \
--entrypoint chown \
"${BACKUP_XTRABACKUP_IMAGE}" \
-R "$(id -u):$(id -g)" /cleanup >/dev/null 2>&1 || true
rm -rf -- "${cleanup_dir}" || true
fi
}
trap cleanup EXIT
@@ -74,9 +81,8 @@ EOF
chmod 600 "${tmp_dir}/xtrabackup-client.cnf"
backup_log "开始全量热备,实例 ${server_uuid}"
# MySQL 数据卷中的 redo 文件仅 MySQL 用户和 root 可读以 root 运行备份
# 容器读取数据,同时保留宿主机业务用户的组,保证后续本地打包可读取备份文件。
docker run --rm --user "0:$(id -g)" \
# MySQL 数据卷中的 redo 文件仅 MySQL 用户和 root 可读,因此备份容器需以 root 读取。
docker run --rm --user 0:0 \
--network "${network}" \
--volumes-from "${mysql_cid}:ro" \
-v "${tmp_dir}/xtrabackup:/backup" \
@@ -86,6 +92,12 @@ EOF
--defaults-extra-file=/etc/xtrabackup-client.cnf \
--backup \
--target-dir=/backup/data
# XtraBackup 会保留源文件属主;在隔离容器内转回业务用户,供后续打包和加密使用。
docker run --rm --user 0:0 \
-v "${tmp_dir}/xtrabackup:/backup" \
--entrypoint chown \
"${BACKUP_XTRABACKUP_IMAGE}" \
-R "$(id -u):$(id -g)" /backup/data
rm -f "${tmp_dir}/xtrabackup-client.cnf"
unset backup_password