MYISAM表批量压缩

来源:互联网 发布:usb端口检测软件 编辑:程序博客网 时间:2024/04/25 03:57

引言:最近mysql的数据库,数据达到了1.4T了,而且这些数据都是只供查询的历史数据。所以我想到mysql的数据压缩,变成只读模式。

关于对MYISAM表的压缩,可以使用myisampack和myisamchk完成(myisampack完之后必须进行myisamchk才能使用压缩后的表,而且是只读的), 其详细地用法可以参考官方文档: http://dev.mysql.com/doc/refman/5.1/zh/client-side-scripts.html。

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

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

  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. then
  10. /usr/bin/myisampack $data_dir$filename
  11. fi
  12. done
  13.  
  14. echo "MYISAMPACK End. MYISAMCHK BEGIN."
  15.  
  16. for filename in $filelist
  17. do
  18. idx=`expr match "$filename" ".*.MYI"`
  19. if [[ $idx>0 ]]
  20. then
  21. /usr/bin/myisamchk -r -o -f --sort-index --analyze $data_dir$filename
  22. #/usr/local/mysql5-3306/bin/myisamchk -rq --sort-index --analyze $table2
  23. fi
  24. done
  25. echo "MYISAMCHK END."
0 0