@@ -55,6 +55,18 @@ if ! sudo docker ps --format '{{.Names}}' | grep -qx cleanapp_db; then
5555 exit 1
5656fi
5757
58+ # Never pass secrets via `docker exec -e ...` (those end up visible in host `ps` output).
59+ # Instead, write the secret into a short-lived file inside the container and reference it
60+ # from inside the container process.
61+ pwfile=" /tmp/cleanapp_mysql_backup_pw.$$ .$RANDOM "
62+ cleanup_pwfile () {
63+ sudo docker exec cleanapp_db sh -lc " rm -f '${pwfile} '" > /dev/null 2>&1 || true
64+ }
65+ trap cleanup_pwfile EXIT
66+
67+ printf ' %s' " ${MYSQL_ROOT_PASSWORD} " | sudo docker exec -i cleanapp_db sh -lc \
68+ " cat > '${pwfile} ' && chmod 600 '${pwfile} '" > /dev/null
69+
5870if command -v pigz > /dev/null 2>&1 ; then
5971 COMPRESS=(pigz -1)
6072else
@@ -65,15 +77,15 @@ started_ts="$(date -u +%Y-%m-%dT%H:%M:%SZ)"
6577started_epoch=" $( date +%s) "
6678
6779log " INFO mysqldump stream start"
68- sudo docker exec -e MYSQL_PWD= " ${MYSQL_ROOT_PASSWORD} " - i cleanapp_db sh -lc \
69- ' exec mysqldump -uroot \
80+ sudo docker exec -i cleanapp_db sh -lc \
81+ " MYSQL_PWD= \"\$ (cat ' ${pwfile} ') \" exec mysqldump -uroot \
7082 --all-databases \
7183 --single-transaction \
7284 --quick \
7385 --lock-tables=false \
7486 --routines --events --triggers \
7587 --hex-blob \
76- --set-gtid-purged=OFF' \
88+ --set-gtid-purged=OFF" \
7789 | " ${COMPRESS[@]} " \
7890 | gsutil -q -o GSUtil:parallel_composite_upload_threshold=150M cp - " ${CURRENT_KEY} "
7991
@@ -85,8 +97,8 @@ size_bytes="$(gsutil ls -l "${CURRENT_KEY}" | awk 'NR==1{print $1}')"
8597size_bytes=" ${size_bytes:- 0} "
8698
8799log " INFO capturing row counts"
88- reports_count=" $( sudo docker exec -e MYSQL_PWD= " ${MYSQL_ROOT_PASSWORD} " - i cleanapp_db sh -lc ' mysql -uroot -N -e "SELECT COUNT(*) FROM cleanapp.reports" 2>/dev/null' | tr -d ' \r' | tail -n 1 || true) "
89- analysis_count=" $( sudo docker exec -e MYSQL_PWD= " ${MYSQL_ROOT_PASSWORD} " - i cleanapp_db sh -lc ' mysql -uroot -N -e "SELECT COUNT(*) FROM cleanapp.report_analysis" 2>/dev/null' | tr -d ' \r' | tail -n 1 || true) "
100+ reports_count=" $( sudo docker exec -i cleanapp_db sh -lc " MYSQL_PWD= \"\$ (cat ' ${pwfile} ') \" mysql -uroot -N -e \ " SELECT COUNT(*) FROM cleanapp.reports\ " 2>/dev/null" | tr -d ' \r' | tail -n 1 || true) "
101+ analysis_count=" $( sudo docker exec -i cleanapp_db sh -lc " MYSQL_PWD= \"\$ (cat ' ${pwfile} ') \" mysql -uroot -N -e \ " SELECT COUNT(*) FROM cleanapp.report_analysis\ " 2>/dev/null" | tr -d ' \r' | tail -n 1 || true) "
90102reports_count=" ${reports_count:- 0} "
91103analysis_count=" ${analysis_count:- 0} "
92104counts_json=" {\" reports\" :${reports_count} ,\" report_analysis\" :${analysis_count} }"
@@ -120,4 +132,3 @@ if [[ "$(date -u +%u)" == "7" ]]; then
120132fi
121133
122134log " INFO backup complete env=${ENV} "
123-
0 commit comments