I would go for your first solution, transfering data from a database to another. And there are several reasons for that:
Having a new database created and filled with data, you can actually test your data with the existing code before switching.
With the other approaches, if an error occurs, it is more difficult to roll back to your initial stage.
On a side note, even though I know that it may be late for you, I would say that changing data structures during development could be a symptom of a weak design. Perhaps spending more time at the design desk would save you all this ordeal.