@@ -80,7 +80,34 @@ for dbName in ${DB_NAMES}; do
8080 log " INFO" " mysql-backup-restore: Backup of ${dbName} completed in $( expr ${end} - ${start} ) seconds, ($( stat -c %s /tmp/${dbName} .sql) bytes)."
8181 fi
8282
83- # Compression
83+ # Generate checksum for the backup file
84+ log " INFO" " mysql-backup-restore: Generating checksum for backup file"
85+ cd /tmp || {
86+ error_message=" Failed to change directory to /tmp"
87+ error_to_sentry " $error_message " " $dbName " " 1"
88+ log " ERROR" " mysql-backup-restore: FATAL: ${error_message} "
89+ exit 1
90+ }
91+
92+ sha256sum " ${dbName} .sql" > " ${dbName} .sql.sha256" || {
93+ error_message=" Failed to generate checksum for backup of ${dbName} "
94+ error_to_sentry " $error_message " " $dbName " " 1"
95+ log " ERROR" " mysql-backup-restore: FATAL: ${error_message} "
96+ exit 1
97+ }
98+ log " DEBUG" " Checksum file contents: $( cat " ${dbName} .sql.sha256" ) "
99+
100+ # Validate checksum
101+ log " INFO" " mysql-backup-restore: Validating backup checksum"
102+ sha256sum -c " ${dbName} .sql.sha256" || {
103+ error_message=" Checksum validation failed for backup of ${dbName} "
104+ error_to_sentry " $error_message " " $dbName " " 1"
105+ log " ERROR" " mysql-backup-restore: FATAL: ${error_message} "
106+ exit 1
107+ }
108+ log " INFO" " mysql-backup-restore: Checksum validation successful"
109+
110+ # Compress backup file
84111 start=$( date +%s)
85112 gzip -f /tmp/${dbName} .sql
86113 STATUS=$?
@@ -94,18 +121,36 @@ for dbName in ${DB_NAMES}; do
94121 log " INFO" " mysql-backup-restore: Compressing backup of ${dbName} completed in $( expr ${end} - ${start} ) seconds."
95122 fi
96123
97- # S3 Upload
124+ # Compress checksum file separately
125+ gzip -f " ${dbName} .sql.sha256"
126+ if [ $? -ne 0 ]; then
127+ log " WARN" " mysql-backup-restore: Failed to compress checksum file, but continuing backup process"
128+ fi
129+
130+ # Upload both compressed files to S3
98131 start=$( date +%s)
132+
133+ # Upload backup file
99134 s3cmd put /tmp/${dbName} .sql.gz ${S3_BUCKET}
100135 STATUS=$?
101- end=$( date +%s)
102136 if [ $STATUS -ne 0 ]; then
103137 error_message=" S3 copy failed for database ${dbName} backup"
104138 error_to_sentry " $error_message " " $dbName " " $STATUS "
105- log " ERROR" " mysql-backup-restore: FATAL: Copy backup to ${S3_BUCKET} of ${dbName} returned non-zero status ($STATUS ) in $( expr ${end} - ${start} ) seconds."
139+ log " ERROR" " mysql-backup-restore: FATAL: Copy backup to ${S3_BUCKET} of ${dbName} returned non-zero status ($STATUS )."
140+ exit $STATUS
141+ fi
142+
143+ # Upload checksum file
144+ s3cmd put /tmp/${dbName} .sql.sha256.gz ${S3_BUCKET}
145+ STATUS=$?
146+ end=$( date +%s)
147+ if [ $STATUS -ne 0 ]; then
148+ error_message=" S3 copy failed for database ${dbName} checksum"
149+ error_to_sentry " $error_message " " $dbName " " $STATUS "
150+ log " ERROR" " mysql-backup-restore: FATAL: Copy checksum to ${S3_BUCKET} of ${dbName} returned non-zero status ($STATUS )."
106151 exit $STATUS
107152 else
108- log " INFO" " mysql-backup-restore: Copy backup to ${S3_BUCKET} of ${dbName} completed in $( expr ${end} - ${start} ) seconds."
153+ log " INFO" " mysql-backup-restore: Copy backup and checksum to ${S3_BUCKET} of ${dbName} completed in $( expr ${end} - ${start} ) seconds."
109154 fi
110155
111156 # Backblaze B2 Upload (Optional)
@@ -128,8 +173,11 @@ for dbName in ${DB_NAMES}; do
128173 log " INFO" " mysql-backup-restore: Copy backup to Backblaze B2 bucket ${B2_BUCKET} of ${dbName} completed in $( expr ${end} - ${start} ) seconds."
129174 fi
130175 fi
176+
177+ # Clean up temporary files
178+ rm -f " /tmp/${dbName} .sql.gz" " /tmp/${dbName} .sql.sha256.gz"
131179done
132180
133- echo " mysql-backup-restore: backup: Completed"
181+ log " INFO " " mysql-backup-restore: backup: Completed"
134182
135- exit $STATUS
183+ exit $STATUS ;
0 commit comments