How to reorganize MySQL table space?

最近發現 MySQL 的 libdata 檔案大小已經超過了 1GB,可能是因為每天量測公司網站效能的 raw data 數量非常龐大的緣故。雖然這些 raw data 做完彙整分析之後就沒用了,但是即使從 MySQL 中刪除這些資料,但是 table space 卻不會因此減小,所以定期做資料庫 table space 的重整可以增加查詢的效能。所以今天想想就來做一下 MySQL table space reorganize 吧!

下面是我的筆記步驟:

1.匯出 MySQL 所有的資料
[root@broso]#$MYSQL_HOME/bin/mysqldump ––extended-insert ––all-databases ––add-drop-database ––disable-keys ––flush-privileges ––quick ––routines ––triggers > all-databases.sql

2.將 MySQL Server 完整停下來
[root@broso ~]#/etc/rc.d/init.d/mysql.server stop

3.將 table space 做更名或備份
[root@broso]#cd /var/lib
[root@broso]#mv mysql mysql.20090720

4.重新建立 mysql table space,執行 mysql_install_db script
[root@broso]#mkdir mysql; chmod 700 mysql; chown mysql
[root@broso]#cd $MYSQL_HOME
[root@broso]#$MYSQL_HOME/scripts/scripts/mysql_install_db

5.重新啟動 MySQL Server
[root@broso]#/etc/rc.d/init.d/mysql.server start

6.設定 root 密碼
[root@broso]#$MYSQL_HOME/bin/mysqladmin -u root password 'newpassword'

7.用 mysql 工具程式將剛剛匯出的資料重新匯入
[root@broso]$MYSQL_HOME/bin/mysql -u root –p
mysql> SET FOREIGN_KEY_CHECKS=0;
mysql> SOURCE all-databases.sql;
mysql> SET FOREIGN_KEY_CHECKS=1;

8. 完成