You would need to create an archive table and do a INSERT INTO archive_table SELECT columns FROM table WHERE criteria_here, then delete the rows out of table.
Then run that in a cronjob on a weekly, monthly, yearly, basis (whatever you need).
If you ever need to reference the archive table, you can then perform a UNION statement
SELECT columns FROM table WHERE criteria_here
UNION SELECT columns FROM archive_table WHERE criteria_here
Why do you want to archive rows? Are you having performance problems? How many rows do you have in the table? Have you looked at your indexes?