針對唯讀/歸檔類 MyISAM 表,使用 myisampack 壓縮數據文件,配合 myisamchk 重建索引,大幅減少存儲佔用(典型壓縮比 40%-60%)。
FLUSH TABLES WITH READ LOCK),否則數據損壞。myisampack:壓縮 .MYD 數據文件,生成 .MYD.packed 並重命名。myisamchk -r -o -f --sort-index --analyze:重建索引(.MYI),更新統計信息,使壓縮表可用。官方文檔:Client-Side Scripts
#!/bin/bash
data_dir="/data/mysql/my_dbname/"
filelist=$(ls $data_dir)
echo "MYISAMPACK BEGIN."
for filename in $filelist; do
idx=$(expr match "$filename" ".*.MYI")
if [[ $idx -gt 0 ]]; then
/usr/bin/myisampack $data_dir$filename
fi
done
echo "MYISAMPACK End. MYISAMCHK BEGIN."
for filename in $filelist; do
idx=$(expr match "$filename" ".*.MYI")
if [[ $idx -gt 0 ]]; then
/usr/bin/myisamchk -r -o -f --sort-index --analyze $data_dir$filename
fi
done
echo "MYISAMCHK END."
*.MYI 文件(每張表對應一個索引文件)。myisamchk --unpack /data/mysql/my_dbname/tbl_name.MYI
ROW_FORMAT=COMPRESSED + KEY_BLOCK_SIZE(透明壓縮,支援讀寫)。