1. 程式人生 > 其它 >Mysql碎片清理

Mysql碎片清理

查詢所有有碎片的表

SELECT
    table_schema db,
    table_name,
    concat( TRUNCATE ( data_free / 1024 / 1024, 2 ), ' MB' ) AS DATA_FREE 
FROM
    information_schema.TABLES 
WHERE
    table_schema NOT IN ( 'information_schema', 'mysql' ) 
    AND TRUNCATE ( data_free / 1024 / 1024, 2 ) > 1024;

清理sql

語法:

OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE table_name1 , table_name2

說明:

OPTIMIZE TABLE可以一次性對多個表進行碎片整理,只需要在OPTIMIZE TABLE後面接多個表名,並以英文逗號隔開即可

OPTIMIZE TABLE語句有兩個可選的關鍵字:LOCALNO_WRITE_TO_BINLOG。在預設情況下,OPTIMIZE TABLE語句將會被記錄到二進位制日誌中,如果我們指定了LOCAL或NO_WRITE_TO_BINLOG關鍵字,則不會記錄。當然,一般情況下,我們也無需關注這兩個關鍵字。

如果mysql是主從複製模式,不需要使用這兩個關鍵字,master機器清理後slave機器會自動同步清理

optimize table 庫名.表名,庫名.表名,庫名.表名;