I have a cron job on the backup machine that first does a MySQL dump, then an rsync. To copy the data.
I have all my tables as InnoDB (with a couple as MEMORY for who's online and flood control). Having all my tables as InnoDB allows me to use the --single-transaction parameter to mysqldump. This allows MySQL to take a consistent snapshot without downtime or delay. I also pipe mysqldump through gzip to reduce the disk writes, which makes the writing of the backup, then the rsync faster.
The rsync will occasionally get new attachments that the data set doesn't know about, and occasionally an avatar might be lost (old one gets deleted after the new one is created; they have unique filesnames), but that's it.
The backup is approximately 500 MB (450 MB of which is the compressed MySQL dump).
The backup is run at daily approximately 5 AM EDT/EST, as that's when traffic is the lowest.