Delete many rows from a large percona mysql db
Your procedure is excellent if you have the disk space.

Disable foreign keys while doing such.  (And hope that no one creates an FK violation that won't be caught.)

Do the two renames in a single statement: RENAME TABLE real TO old, new TO real;.

Replication should not be an issue -- except that a single SELECT to do the copy will be cause a big replication delay.

If you don't have the disk space for that, you are in deep weeds.  No table structure ever shrinks.

More discussion of big deletes.

That discusses "chunking", which could be adapted to the big SELECT, so that it has less impact on replication.

Or the chunking could be done to do the deletes, without all the rest of the stuff.  This also avoids the FK question and the replication delays.  However, it does not shrink the resulting table size; it leaves lots of free space.  You could then use pt-online-schema-change to merely copy the table over, thereby shrinking the table.  Hmmm... I guess this is how to do the deletes and free up disk space without needing extra space.  But it won't help if you have innodb_file_per_table=OFF.