修复备份文件属主处理
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user