How to store iterations of similar datasets I have a dataset that is stored across 20 or so tables, most of which have a few million rows.  This data will be generated fresh each month, and compared to past datasets.  

I'm pretty new to dealing with datasets of this size, so I'm unsure what would be good practice in storing these past datasets.  I need the data to still be accessible to queries, so dumping the database to backup files won't be enough.  Is there some feasible way to move each dataset into a new database once I get a new one?  Or should I just put timestamps on each row and keep everything in one giant dataset?

Sorry if this is too vague, I'm not sure how exactly to ask this question. I'd be open to changing it if there are any suggestions.
Extending comment to answer:

MySQL can handle lots of rows. So making separate schema for each month gives no benefits unless those datasets differ in schema definition.

With some millions of rows per month you have to design your schema and index carefully enough to make querying fast. When you do it so dataset_id (some month identifier or something) is first in primary key for each table, then (at least in InnoDB by default) your data are clustered by it, so they are kept close together in table structure and disk access is not wasted.

If some tables are going to be really big, then you can use partitioning by dataset/month (probably one partition per month, partitioning key has to be part of primary key and each unique index - not sure if it has to be last in index or anywhere..). That way each partition is like physical table, your queries always access specific dataset so can only work on one such "subtable" instead of all data, and you can easily drop old partitions to reclaim some space (probably after moving the data into some archive).