The default dump contains tables and data and none of the stored programs, so a restore produces a database that looks complete and behaves differently.
mysqldump --single-transaction --routines --triggers --events
--hex-blob --set-gtid-purged=OFF shop | gzip > shop.sql.gz
# and the marker that distinguishes a complete dump from a truncated one
zcat shop.sql.gz | tail -1 | grep -q 'Dump completed'
--single-transaction gives a consistent snapshot on InnoDB without locking, and it silently does nothing for MyISAM tables — which a legacy schema will have exactly one of. The trailing marker check is what catches a dump truncated by a disk filling halfway through, and a truncated dump restores without complaint right up to where the data stops. Both checks are one line each and both have caught real problems.