先得出多少表有碎片:
SELECT TABLE_SCHEMA ,TABLE_NAME ,ENGINE ,ROUND(((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024 /1024), 2) AS SIZE_GB ,ROUND(DATA_FREE/1024/1024 /1024,2) AS FREE_SIZ_GB FROM information_schema.TABLES WHERE DATA_FREE >=10*1024*1024 ORDER BY FREE_SIZ_GB DESC
再把对应的表用OPTIMIZE TABLE清理:
set session sql_log_bin=0;
optimize table tmp;