non effective but simple solution is to shedule delete of old data (<3 month) from main tables to archive tables every day. That way you minimize load on system. The deletes should be sheduled when system is least loaded with other tasks.
(I assume you have date field to find what data is 3 month old somehwere in the tables, otherwise you need to add such column. Adding new column such that it is transparent to application is a different story)

The other way to deal with archiving is to have partitions, however care about foreign keys must be taken. If system is not 7*24 then it is quite easy taskto do.