每天進步一點達——MySQL——myisampack,mysqlmyisampack

來源:互聯網
上載者:User

每天進步一點達——MySQL——myisampack,mysqlmyisampack

一、        簡介

         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壓縮表

[root@localhosttest2]# 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

 [root@localhost test2]# myisampack t1

Compressing t1.MYD: (23106 records)

- Calculating statistics

- Compressing file

85.68%    

[root@localhosttest2]# 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備份資料庫檔案

 [root@localhost 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


 

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.