MySQL实现MYISAM表批量压缩的方法

#!/bin/bashdata_dir="/data/mysql/my_dbname/"filelist=`ls $data_dir`echo "MYISAMPACK BEGIN."for filename in $filelistdo idx=`expr match "$filename" ".*.MYI"` if [[ $idx0 ]] then /usr/bin/myisampack $data_dir$filename fidoneecho "MYISAMPACK End. MYISAMCHK BEGIN."for filename in $filelistdo idx=`expr match "$filename" ".*.MYI"` if [[ $idx0 ]] then /usr/bin/myisamchk -r -o -f --sort-index --analyze $data_dir$filename fidoneecho "MYISAMCHK END."
 1 #!/bin/bash 2 data_dir="/data/mysql/my_dbname/" 3 filelist=`ls $data_dir` 4 echo "MYISAMPACK BEGIN." 5 for filename in $filelist 6 do 7   idx=`expr match "$filename" ".*.MYI"` 8   if [[ $idx>0 ]] 9   then10     /usr/bin/myisampack $data_dir$filename11   fi12 done13 14 echo "MYISAMPACK End. MYISAMCHK BEGIN."15 16 for filename in $filelist17 do18   idx=`expr match "$filename" ".*.MYI"`19   if [[ $idx>0 ]]20   then21     /usr/bin/myisamchk -r -o -f --sort-index --analyze $data_dir$filename22   fi23 done24 echo "MYISAMCHK END."

这两个操作需要谨慎使用,在压缩之前需要确认mysqld已关闭或者要压缩的表不会有其他的sql操作;而且压缩过程会很占用cpu资源,建议在服务器空闲的状态进行。

这两个操作需要谨慎使用,在压缩之前需要确认mysqld已关闭或者要压缩的表不会有其他的sql操作;而且压缩过程会很占用cpu资源,建议在服务器空闲的状态进行。

更多关于MySQL相关内容感兴趣的读者可查看本站专题:《MySQL事务操作技巧汇总》、《MySQL存储过程技巧大全》、《MySQL数据库锁相关技巧汇总》及《MySQL常用函数大汇总》

下面是用于实现某数据库下表压缩的shell过程(值得注意的是,如果数据量大,建议分多次操作,因其会很耗时):

关于对MYISAM表的压缩,可以使用myisampack和myisamchk完成(myisampack完之后必须进行myisamchk才能使用压缩后的表,而且是只读的),
其详细地用法可以参考官方文档: 。