当前位置: 代码迷 >> MySQL >> 每日进步一点达——MySQL——myisampack
  详细解决方案

每日进步一点达——MySQL——myisampack

热度:68   发布时间:2016-05-05 16:54:48.0
每天进步一点达——MySQL——myisampack

一、        简介

         myisampack是一个压缩使用MyISAM引擎表的工具,一般会压缩40%~70%,当需要访问数据,服务器会将所需要的信息读入到内存中,所以当访问具体记录时,性能会更好,因为只需要解压一条记录

         MySQL使用mmap()对变哦进行压缩映射,如果mmap()不工作,MySQL会返回到普通的读写文件操作

         压缩后的表将会成为只读的,并且myisampack不支持分区表。

二、       命令格式

myisampack 选项 文件名

三、       常用参

         --backup-b --backup   使用tbl_name .OLD备份数据文件

         --force  -f  产生一个压缩的表,即使它比原始表大,或如果以前调用myisampack的中间文件存在。(myisampack压缩表时在数据库目录中创建一个名为tbl_name.TMD的中间文件。如果杀掉myisampack,.TMD文件会被删除)。通常情况,如果myisampack发现tbl_name.TMD存在则退出并提示错误。用--force,myisampack则一定压缩表。

    --join=big_tbl_name  -j big_tbl_name 将命令行中的所有表联接为一个表big_tbl_name。将要连接的所有表必须有相等的结构(相同的列名和类型,相同的索引等等)。

    --packlength=len,-p len 指定记录长度存储大小,以字节计。值应为1、2或者3。myisampack保存所有长度指针为1、2或者3字节的行。在大多数正常情况下,myisampack在开始压缩文件前可以确定准确的长度值,但在压缩过程中它可以提示它可能已经使用了一个短的长度。在这种情况下,myisampack输出一条提示,下次你压缩同一文件时,你可以使用更短的记录长度。

    --silent,-s 沉默模式。只有发生错误时才写输出。

    --test,-t 没有实际地压缩表,只是测试压缩。

    --tmpdir=path,-T path 使用myisamchk创建临时文件的目录。

    --verbose,-v 冗长模式。写压缩操作过程相关信息和其结果。

    --version,-V 显示版本信息并退出。

    --wait,-w 如果表正使用则等待并重试。如果用--skip-external-locking选项调用了mysqld服务器,如果在压缩过程中表可能被更新,调用myisampack不是一个好主意。

    运行myisampack后,必须运行myisamchk以重新创建索引。此时,你也可以排序索引块并创建MySQL优化器需要的统计信息以更有效地工作:  shell> myisamchk -rq --sort-index--analyze tbl_name.MYI 将压缩的表安装到MySQL数据库目录中后,应执行mysqladmin flush-tables以强制mysqld使用新的表。  要想解压缩一个压缩的表,使用myisamchk或isamchk的--unpack选项。

 

         --help      帮助

          

四、       常用例子

1.   myisampack压缩表

[[email protected]]# ll -tr

总用量 180

-rw-rw---- 1 mysql mysql     65 7月  16 16:40 db.opt

-rw-rw---- 1 mysql mysql   8556 7月  16 16:46 t1.frm

-rw-rw---- 1 mysql mysql   1024 7月  16 17:29 t1.MYI

-rw-rw---- 1 mysql mysql 161742 7月  16 17:29 t1.MYD

 [[email protected] test2]# myisampack t1

Compressing t1.MYD: (23106 records)

- Calculating statistics

- Compressing file

85.68%    

[[email protected]]# ll -tr

总用量 44

-rw-rw---- 1 mysql mysql    65 7月  16 16:40 db.opt

-rw-rw---- 1 mysql mysql  8556 7月  16 16:46 t1.frm

-rw-rw---- 1 mysql mysql 23167 7月  16 17:29 t1.MYD

-rw-rw---- 1 mysql mysql  1024 7月  16 17:30 t1.MYI

 

在Mysql中查询

mysql>show table status like 't1'\G;

*************************** 1. row***************************

          Name: t1

        Engine: MyISAM

       Version: 10

    Row_format: Fixed

          Rows: 22857

 Avg_row_length: 7

   Data_length: 159999

Max_data_length: 1970324836974591

  Index_length: 1024

     Data_free: 0

 Auto_increment: NULL

   Create_time: 2015-07-16 16:46:17

   Update_time: 2015-07-16 17:29:40

    Check_time: NULL

     Collation: latin1_swedish_ci

      Checksum: NULL

 Create_options:

       Comment:

1 row in set (0.00 sec)

 

ERROR:

No query specified

 

mysql>show table status like 't1'\G;

*************************** 1. row***************************

          Name: t1

        Engine: MyISAM

       Version: 10

    Row_format: Fixed

          Rows: 23177

 Avg_row_length: 7

   Data_length: 162239

Max_data_length: 1970324836974591

  Index_length: 1024

     Data_free: 0

 Auto_increment: NULL

   Create_time: 2015-07-16 16:46:17

   Update_time: 2015-07-16 17:30:48

    Check_time: NULL

     Collation: latin1_swedish_ci

      Checksum: NULL

 Create_options:

       Comment:

1 row in set (0.00 sec)

t8      lines: 7        columns: 9

2.   myisampack备份数据库文件

 [[email protected] test2]# ll

-rw-rw---- 1 mysql mysql      65 7月  16 16:40 db.opt

-rw-rw---- 1 mysql mysql    8572 7月  17 09:28 t1.frm

-rw-rw---- 1 mysql mysql      73 7月  17 09:50 t1.MYD

-rw-rw---- 1 mysql mysql    1024 7月  17 10:04 t1.MYI

-rw-rw---- 1 mysql mysql      217月  17 09:50 t1.OLD

-rw-rw---- 1 mysql mysql    8598 7月  17 10:10 t2.frm

-rw-rw---- 1 mysql mysql4344192 7  17 10:11 t2.MYD

-rw-rw---- 1 mysql mysql 4955136 7月  17 10:11 t2.MYI

-rw-rw---- 1 mysql mysql    8572 7月  17 10:06 t3.frm

-rw-rw---- 1 mysql mysql  147456 7月  17 10:06 t3.ibd

-rw-rw---- 1 mysql mysql    8598 7月  17 10:11 t4.frm

-rw-rw---- 1 mysql mysql 4344192 7月  17 10:11 t4.MYD

-rw-rw---- 1 mysql mysql    1024 7月  17 10:11 t4.MYI

-rw-rw---- 1 mysql mysql    8598 7月  17 10:12 t5.frm

-rw-rw---- 1 mysql mysql 1996157 7月  17 10:12 t5.MYD

-rw-rw---- 1 mysql mysql    1024 7月  17 10:12 t5.MYI

-rw-rw---- 1 mysql mysql4344192 7  17 10:12 t5.OLD

我们发现备份出来的数据文件与原来的文件大小一致,但是压缩后的数据文件会小一些

3.   向T5中插入数据

mysql> insert into t5(str_number)values(1);

ERROR 1036 (HY000): Table 't5' is read only


 

版权声明:本文为博主原创文章,未经博主允许不得转载。

  相关解决方案