I recommend storing InnoDB tables in separate files, one file per table. It makes it easier to manage them and to see which tables take the most storage. Put the following in /etc/mysql/my.cnf (or wherever it is on your system) [mysqld] section:
innodb_file_per_table
After that it is easy to identify the tables which are using too much space. Then you need to re-create the problematic table(s) periodically (once a day, once a month, whatever) by doing the following:
ALTER TABLE tablename ENGINE=InnoDB;
That will take quite some time to run on big tables. It will recreate the table files from scratch and that will get rid of fragmentation and holes which add up to the file sizes. While ALTER TABLE is running, it uses double the needed disk capacity. I am not sure if you can do this unless you are running in "file per table" mode.
UPDATE
I wanted to add that to get rid of the inflated existing "single file for all tables" InnoDB ibdata1 file, you need to do the following:
- export all InnoDB tables with mysqldump
- shutdown mysqld
- put the "innodb_file_per_table" line in your my.cnf
- rm ibdata* ib_logfile* in your mysql data directory
- start mysqld
- import your data which you backed up at the step 1