mysql はデフォルトで、[%mysqldir%]/ibdata1という1つのファイルに、
全テーブルのデータを管理します。
最初の頃は別にいいのですが、そこそこのシステムを長年運用していくと、
ibdata1 のファイルサイズがどんどん巨大化していきます。
サイズが巨大化しても、システムが遅くなる/不安定になる といったことは無いようなのですが、ディスクを圧迫しますので、出来ればサイズを小さくしたいところ。
ところが、このibdata1というファイルはOptimizeを行っても小さくならないようなのです・・・
解決方法としては、DBデータの管理をテーブル単位で行うように設定を変える必要があります。(my.cnf に innodb_file_per_table の設定を入れます。)
その際の手順のメモです。
事前作業:DBにアクセスアプリケーション/サービス/バッチなどを全て終了させておく。
1. DBのダンプを作成する。($mysqladmin -u hoge_user hoge_db > hoge_db.dump)
2. DBを削除(mysql> DROP DATABASE hoge_db;)
3. MySQLを停止($/etc/init.d/mysql stop)
4. /etc/my.cnf へ設定追加($vi /etc/my.cnf)
---------------
[mysqld]
innodb_file_per_table
---------------
5. ibdata1 やその他のファイルを削除($rm ibdata1 ib_logfile0 ib_logfile1)
6. MySQLを起動($/etc/init.d/mysql start)
7. DATABASEを作成(mysql> CREATE DATABASE hoge_db;)
8. dump データを投入(mysql -u hoge_user hoge_db < hoge_db.dump)
これで無事に設定完了です。
※ Replication を行っているシステムでは、ReplicationをSTOPさせた後、
それぞれのDBで上記作業を行ない、全ての作業完了後、
・[マスタ]RESET MASTER;
・[スレーブ]RESET SLAVE;
・[スレーブ]START SLAVE;
を行えば大丈夫です。
(dumpファイルの作成は、両サーバで行うのではなく、どちらかのサーバで作成したdumpを双方に入れれば良いです)

3