A nightly dump means the worst case is losing a day, and a day of orders is not an acceptable answer to anybody outside engineering.
# my.cnf
log_bin = /var/log/mysql/mysql-bin
binlog_format = ROW
expire_logs_days = 14
# restore: last night's dump, then replay forward to the moment before
$ zcat shop-2019-11-14.sql.gz | mysql shop
$ mysqlbinlog --start-datetime='2019-11-14 02:00:00'
--stop-datetime='2019-11-14 14:22:00'
mysql-bin.0001* | mysql shop
The binlogs have to be shipped somewhere other than the database server, or a disk failure takes the dump’s companion with it. ROW format is larger than STATEMENT and is the only one that replays deterministically, which is the whole point. Practising the replay once, on a copy, is what turns this from a configuration setting into a recovery procedure.