Here's what I do.
I run a cron job every night that takes the current production backup, builds a new dev database, then runs a directory of sql that updates the schema (or data). At first people complained they lost schema changes but pretty soon they learned to create a file, run it then copy it to the upgrade directory. Now you have a directory of tested sql that will update your production database. It's also very likely you can use it on your test database but you have to be careful about data updates. The advatages to this are you develope with current producton data, you actually test your upgrade sql against prodution data and you know your backup/restore process works. I've done this on databases up to about a terabyte, beyond that you may not be able to do a restore overnight.
