Skip to content

Commit 03bbe06

Browse files
author
Bhavishya
committed
use upload function separately from the pipeline to minimime the data corruption with streaming
1 parent 6f4fbea commit 03bbe06

1 file changed

Lines changed: 29 additions & 28 deletions

File tree

mariadb-logical-backup/mariadb-dump.sh

Lines changed: 29 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,7 @@ LOGICAL_BACKUP_S3_RETENTION_TIME=${LOGICAL_BACKUP_S3_RETENTION_TIME:=""}
1818
LOGICAL_BACKUP_S3_ENDPOINT=${LOGICAL_BACKUP_S3_ENDPOINT:-}
1919
LOGICAL_BACKUP_S3_REGION=${LOGICAL_BACKUP_S3_REGION:-"us-west-1"}
2020

21-
function estimate_size {
22-
# Connects to MariaDB to calculate data size for S3 multipart upload optimization
23-
mariadb -h "$MARIADB_HOST" -u "$MARIADB_USER" -p"$MARIADB_PASSWORD" \
24-
--skip-ssl -Nsr -e "${ALL_DB_SIZE_QUERY}" < /dev/null
25-
}
21+
2622

2723
function dump {
2824
echo "Taking dump from ${MARIADB_HOST} using mariadb-dump for database ${MARIADB_DATABASE}" >&2
@@ -101,63 +97,68 @@ function aws_delete_outdated {
10197
}
10298

10399
function aws_upload {
104-
local EXPECTED_SIZE="$1"
100+
local FILE_PATH="$1"
105101
PATH_TO_BACKUP="s3://${LOGICAL_BACKUP_S3_BUCKET}/${CLUSTER_NAME}/${LOGICAL_BACKUP_S3_BUCKET_SCOPE_SUFFIX}/logical_backups/$(date +%s).sql.gz"
106102

107103
args=()
108-
[[ -n "${EXPECTED_SIZE}" ]] && args+=("--expected-size=${EXPECTED_SIZE}")
109104
[[ -n "${LOGICAL_BACKUP_S3_ENDPOINT}" ]] && args+=("--endpoint-url=${LOGICAL_BACKUP_S3_ENDPOINT}")
110105
[[ -n "${LOGICAL_BACKUP_S3_REGION}" ]] && args+=("--region=${LOGICAL_BACKUP_S3_REGION}")
111106

112107
echo "Uploading dump to S3: ${PATH_TO_BACKUP}"
113-
echo "${args[@]}"
114-
aws s3 cp - "$PATH_TO_BACKUP" "${args[@]}"
108+
aws s3 cp "${FILE_PATH}" "$PATH_TO_BACKUP" "${args[@]}"
115109
}
116110

117111
function upload {
112+
local FILE_PATH="$1"
118113
case $LOGICAL_BACKUP_PROVIDER in
119114
"s3")
120-
aws_upload $(($(estimate_size) / DUMP_SIZE_COEFF))
115+
aws_upload "$FILE_PATH"
121116
aws_delete_outdated
122117
;;
123118
"az")
124-
# Azure requires a physical file for 'az storage blob upload' in this context
125-
dump | compress > /tmp/mariadb-backup.sql.gz
126-
az_upload /tmp/mariadb-backup.sql.gz
127-
rm /tmp/mariadb-backup.sql.gz
119+
az_upload "$FILE_PATH"
128120
;;
129121
esac
130122
}
131123

132124
# Execution Logic
133125
if [ "$LOGICAL_BACKUP_PROVIDER" == "az" ]; then
134-
upload
135-
else
136-
# Stream dump to a local file for debugging AND upload to S3
126+
# Stream dump to a local file for debugging AND upload logic
137127
# Saving:
138-
# 1. /tmp/raw_dump.sql - The uncompressed output from mariadb-dump (Check this for plain text errors)
128+
# 1. /tmp/raw_dump.sql - The uncompressed output from mariadb-dump
139129
# 2. /tmp/dump_stderr.log - The verbose logs and errors from mariadb-dump
140-
# 3. /tmp/final_upload.sql.gz - The valid gzip file sent to S3
130+
# 3. /tmp/final_upload.sql.gz - The valid gzip file to be uploaded
141131

142-
echo "Starting debug pipeline..."
143-
dump 2> /tmp/dump_stderr.log | tee /tmp/raw_dump.sql | compress | tee /tmp/final_upload.sql.gz | upload
132+
echo "Starting backup creation..."
133+
dump 2> /tmp/dump_stderr.log | tee /tmp/raw_dump.sql | compress > /tmp/final_upload.sql.gz
144134

145-
# Capture status immediately!
135+
# Capture status of the generation pipeline
146136
PIPELINE_STATUS=("${PIPESTATUS[@]}")
137+
echo "Backup generation finished with status: ${PIPELINE_STATUS[*]}"
147138

148-
echo "Backup finished with status: ${PIPELINE_STATUS[*]}"
139+
# Debug output
149140
echo "DEBUG FILES GENERATED:"
150141
echo "1. Stderr Log: /tmp/dump_stderr.log"
151142
echo "2. Raw Dump: /tmp/raw_dump.sql"
152143
echo "3. Gzip File: /tmp/final_upload.sql.gz"
153-
154-
echo "Showing first 10 lines of raw dump (to check if it's SQL or error text):"
144+
echo "Showing first 10 lines of raw dump:"
155145
head -n 10 /tmp/raw_dump.sql || echo "Empty file"
146+
147+
if [[ ${PIPELINE_STATUS[0]} -ne 0 || ${PIPELINE_STATUS[1]} -ne 0 || ${PIPELINE_STATUS[2]} -ne 0 ]]; then
148+
echo "Backup generation failed! Skipping upload."
149+
ERRORCOUNT=$((ERRORCOUNT + 1))
150+
else
151+
echo "Backup generation successful. Proceeding to upload..."
152+
upload "/tmp/final_upload.sql.gz"
153+
154+
if [ $? -ne 0 ]; then
155+
echo "Upload failed!"
156+
ERRORCOUNT=$((ERRORCOUNT + 1))
157+
fi
158+
fi
156159

157-
echo "Sleeping for 500s to allow manual debugging..."
160+
echo "Sleeping for 1000s to allow manual debugging..."
158161
sleep 1000
159-
160162

161-
[[ ${PIPELINE_STATUS[0]} != 0 || ${PIPELINE_STATUS[1]} != 0 || ${PIPELINE_STATUS[2]} != 0 || ${PIPELINE_STATUS[3]} != 0 ]] && (( ERRORCOUNT += 1 ))
162163
exit $ERRORCOUNT
163164
fi

0 commit comments

Comments
 (0)