fix: 兼容最小权限数据库备份校验

This commit is contained in:
2026-07-10 12:17:18 +08:00
parent 6d164a77fe
commit 367127504f
2 changed files with 19 additions and 4 deletions

View File

@@ -11,7 +11,14 @@ BACKUP_RETENTION_DAYS="${BACKUP_RETENTION_DAYS:-14}"
command -v mysqldump >/dev/null || { echo "未找到 mysqldump" >&2; exit 1; }
command -v gzip >/dev/null || { echo "未找到 gzip" >&2; exit 1; }
command -v shasum >/dev/null || { echo "未找到 shasum" >&2; exit 1; }
if command -v sha256sum >/dev/null; then
checksum_command=(sha256sum)
elif command -v shasum >/dev/null; then
checksum_command=(shasum -a 256)
else
echo "未找到 sha256sum 或 shasum" >&2
exit 1
fi
mkdir -p "$BACKUP_DIR"
timestamp="$(date +%Y%m%d_%H%M%S)"
@@ -25,6 +32,7 @@ MYSQL_PWD="$MYSQL_PASSWORD" mysqldump \
--user="$MYSQL_USER" \
--single-transaction \
--quick \
--no-tablespaces \
--routines \
--triggers \
--events \
@@ -35,7 +43,7 @@ MYSQL_PWD="$MYSQL_PASSWORD" mysqldump \
gzip -t "$temporary_file"
test -s "$temporary_file"
mv "$temporary_file" "$output_file"
(cd "$(dirname "$output_file")" && shasum -a 256 "$(basename "$output_file")" > "$(basename "$output_file").sha256")
(cd "$(dirname "$output_file")" && "${checksum_command[@]}" "$(basename "$output_file")" > "$(basename "$output_file").sha256")
if [[ "$BACKUP_RETENTION_DAYS" =~ ^[0-9]+$ ]] && (( BACKUP_RETENTION_DAYS > 0 )); then
find "$BACKUP_DIR" -type f \( -name "${MYSQL_DATABASE}_*.sql.gz" -o -name "${MYSQL_DATABASE}_*.sql.gz.sha256" \) \

View File

@@ -15,11 +15,18 @@ fi
command -v mysql >/dev/null || { echo "未找到 mysql 客户端" >&2; exit 1; }
command -v gzip >/dev/null || { echo "未找到 gzip" >&2; exit 1; }
command -v shasum >/dev/null || { echo "未找到 shasum" >&2; exit 1; }
if command -v sha256sum >/dev/null; then
checksum_command=(sha256sum -c)
elif command -v shasum >/dev/null; then
checksum_command=(shasum -a 256 -c)
else
echo "未找到 sha256sum 或 shasum" >&2
exit 1
fi
test -f "$BACKUP_FILE" || { echo "备份文件不存在:$BACKUP_FILE" >&2; exit 1; }
test -f "${BACKUP_FILE}.sha256" || { echo "缺少校验文件:${BACKUP_FILE}.sha256" >&2; exit 1; }
(cd "$(dirname "$BACKUP_FILE")" && shasum -a 256 -c "$(basename "$BACKUP_FILE").sha256")
(cd "$(dirname "$BACKUP_FILE")" && "${checksum_command[@]}" "$(basename "$BACKUP_FILE").sha256")
gzip -t "$BACKUP_FILE"
MYSQL_PWD="$MYSQL_PASSWORD" gzip -dc "$BACKUP_FILE" | MYSQL_PWD="$MYSQL_PASSWORD" mysql \