There's no way to regain InnoDB space.
I can suggest some techniques but no magic.
1. dump the whole database and reimport
2. setup a brand new slave ,sync and switch to it
2011/11/1 Rozeboom, Kay [DAS] <KAY.ROZEBOOM@stripped>
> We are running MySQL 5.0.77, and using INNODB in production for the first
> time. The production database has a lot of inserts and deletes, and the
> shared "ibdata1" file is continually growing. I understand that to return
> the unused space to the operating system, we must delete and recreate
> "ibdata1" and its associated ".frm" files. I am wondering if we could do
> the following instead:
> 1) Let "ibdata1" grow for a while.
> 2) Rebuild the tables periodically using this syntax: ALTER TABLE
> t1 ENGINE = InnoDB;
> I realize that this would not return the unused space to the operating
> system. But would it return it to MySQL so that it could be re-used for
> subsequent inserts, instead of extending "ibdata1" further?
> Kay Rozeboom
> Information Technology Enterprise
> Iowa Department of Administrative Services
> Telephone: 515.281.6139 Fax: 515.281.6137
> Email: Kay.Rozeboom@stripped