Go to the first, previous, next, last section, table of contents.


14 MySQL ユーティリティ

14.1 様々な MySQL プログラムの概要

サーバと通信する mysqlclient ライブラリを使用している全ての MySQL クライアントは次の環境変数を使用します:

Name Description
MYSQL_UNIX_PORT デフォルトのソケット; localhost への接続に使用される
MYSQL_TCP_PORT デフォルトの TCP/IP ポート
MYSQL_PWD デフォルトのパスワード
MYSQL_DEBUG デバッグオプション
TMPDIR 一時 tables/files が作成されるディレクトリ

MYSQL_PWD の使用は安全ではありません。 「6.5 MySQL サーバーに接続」節参照.

`mysql' クライアントは、MYSQL_HISTFILE 環境変数に 指定されているファイルにコマンドラインの履歴を書き出します。 デフォルトの履歴ファイルは、 `$HOME/.mysql_history' で、$HOMEHOME 環境変数の値です。 「A Environment variables」節参照.

全ての MySQL プログラムは多くの様々なオプションを持ちます。種々 のオプションの完全な説明を得るにはスイッチ --help を使用してください。例 えばmysql --help を試してください。

オプションファイルで、全ての標準クライアントのデフォルトのオプションを 変更することが可能です。 「4.15.4 オプションファイル ( my.cnf )」節.

MySQL プログラムを以下に示します:

myisamchk
MySQL テーブルをチェック, 最適化そして修復します。 myisamchk には多くの機能があるので、一章割り当てて説明しています。 「15 Maintaining a MySQL installation」節参照.
make_binary_release
コンパイルされた MySQL のバイナリリリースを作成します。これは他 の MySQL ユーザの利便のために、ftp で ftp.tcx.se`/pub/mysql/Incoming' に送ることができます。
msql2mysql
mSQL プログラムを MySQL に変換するシェルスクリプト。全て のケースで処理できるわけではありませんが、変換時に良いスタートを与えます。
mysql
mysql は簡単な SQL シェル (GNU readline つき) です。これは対話的な使用や 非対話型問い合わせをサポートします。対話的に使用されると、ASCII テーブル 形式で結果が与えられます。フィルタとして使用されると、出力はタブで区切ら れます(これは起動時のオプションで他のものに変更できます)。 あなたは以下のように簡単にスクリプトを実行できます:
shell> mysql database < script.sql > output.tab
クライアントのメモリが十分でないことによる問題がある場合は、 --quick スイッチを使用してください! これは結果を取り出すのに mysql_store_result() の代わりに mysql_use_result() を使用 するように mysql に強制させます。
mysqlaccess
ホスト, ユーザそしてデータベースの組合せで権限をチェックするためのスクリ プト。
mysqladmin
管理ユーティリティ。データベースの作成/破棄。reload (新しいユーザの読み 込み) と refresh (ディスクへのテーブルのフラッシュ, ログファイルの再オー プン)。サーバのバージョンと処理と状態情報も与えます。 「14.3 MySQL サーバーの管理 ( mysqladmin )」節参照.
mysqlbug
MySQL バグレポートスクリプト。 このスクリプトは MySQL メーリングリストにバグレポートを出す際、 常に使用します。
mysqld
SQL デーモン。これは常に実行されてます。
mysqldump
MySQL データベースの SQL ステートメントまたはタブで区切られたテ キストのファイルにダンプします。Igor Romanenko によって独創的にエンハン スされたフリーウェア。 「14.4 MySQL データベースとテーブルから、構造とデータをダンプ ( mysqldump )」節参照.
mysqlimport
一つまたは複数のテキストファイルをそれぞれのテーブルに読み込みます。LOAD DATA INFILE でサポートされる全ての形式を使用できます。 「14.5 テキストファイルからデータを取り込む ( mysqlimport )」節参照.
mysqlshow
データベース, テーブル, 項目そしてインデックスについての情報を表示します。
mysql_install_db
MySQL 承認テーブルをデフォルトの権限で作成します。これは通常、最 初の MySQL リリースを新しいシステム上にインストールする時に一回 だけ実行されます。
replace
msql2mysql で使用されるバイナリ。ファイル内または標準入力上の文字列を変 換するユーティリティプログラム。より長い文字列に最初に適合するため有限状 態マシンを使用します。文字列を交換するために使用できます。例えば、 ab を与えられたファイル内で交換します:
shell> replace a b b a -- file1 file2 ...
safe_mysqld
mysqld デーモンをいくつかの安全な機能で開始します。エラー時には再起動し、 実行時情報をログファイルへ記入します。

14.2 コマンドラインツール ( mysql

mysql はシンプルな SQL shell です(GNU readline を持っています). これは対話モードと、非対話モードを持っています。 対話モードで使用された場合、 クエリの結果は ASCII テーブルのフォーマットで与えられます。 非対話モードで使用された場合(例えばフィルターとして)、結果はタブ区切りの フォーマットで返ります。 (出力フォーマットはコマンドラインのオプションで変更できます) 以下のようにしてスクリプトを実行できます:

shell> mysql database < script.sql > output.tab

もしクライアントでメモリー不足の問題が出た場合、--quick オプションを 使用します! これは mysql に、結果セットを取得する際に、 mysql_store_result() ではなく mysql_use_result() を 使用させます。

mysql の使用はとても簡単です: mysql databasemysql --user=user_name --password=your_password d atabase のようにしてはじめます。 SQL 文を入力し、一文を `;', `\g' or `\G' で終え、 return/enter を押します。

mysql は以下のオプションをサポートします:

-?, --help
help を表示して終了
-A, --no-auto-rehash
自動リハッシュをしない。 テーブルとフィールドの取得には 'rehash' を使用しなくては なりません。 これは mysql の起動を速くします。
-B, --batch
結果をタブ区切り、1レコードは1行で出力します。 history ファイルは使用しません。
-C, --compress
サーバー・クライアント間の通信を圧縮します
-#, --debug[=...]
デバッグログ。 デフォルトは 'd:t:o,/tmp/mysql.trace'
-D, --database=..
使用するデータベース。 これは my.cnf ファイルが便利です
-e, --execute=...
コマンドを実行して終了。 (Output like with --batch)
-E, --vertical
垂直にレコードを出力します。 このオプションを指定していなくても、 SQL 文を \G で終了した場合、同じように垂直に出力します。
-f, --force
SQL エラーがおきたとしても、処理を続けます
-i, --ignore-space
関数名の後ろについたスペースを無視します
-h, --host=...
指定したホストに接続します
-H, --html
結果を HTML フォーマットで返します
-L, --skip-line-numbers
エラーの起きた行の番号を書きません。 これはエラーメッセージを含んだ結果を 比較する場合に便利です。
-n, --unbuffered
それぞれのクエリ毎にバッファをフラッシュします
-N, --skip-column-names
結果に、フィールド名を書き出しません。
-O, --set-variable var=option
変数に値をセットします。 --help lists variables
-o, --one-database
デフォルトのデータベースのみ更新します。 これは update ログファイルを 使用して更新する場合、他のデータベースの更新を避けたい時に便利です。
-p[password], --password[=...]
サーバーに接続する際のパスワード。 もしパスワードがコマンドラインに 指定されていなかった場合、tty 上でパスワードが問い合わされます。 -p を使用する場合、このオプションとパスワードの間には スペースが不要だということに注意してください。
-P --port=...
接続に使用する TCP/IP ポート番号
-q, --quick
結果をキャッシュせず、一レコードづつ出力します。 これはもし出力を中止した場合、サーバーを遅くします。 ヒストリファイルは使用しません。
-r, --raw
エスケープ処理をしないで値を書き出します。 --batch とともに使用されます
-s, --silent
静粛モード
-S --socket=...
接続に使用する ソケットファイル
-t --table
表の形式で出力します。 これは batch モード以外でのデフォルトです。
-T, --exit-info
Only used when debugging. --exit-info=0 will print some usage information one exit.
-u, --user=#
ログインユーザー名
-U, --safe-updates[=#], --i-am-a-dummy[=#]
キーを使用する UPDATE and DELETE のみを行います。 これは後述します。 このオプションをもし my.cnf に書いている場合は、 --safe-updates=0 でこのオプションをリセットできます。
-v, --verbose
冗長出力。 (-v -v -v は表形式の出力を与える)
-V, --version
バージョンを表示して終了
-w, --wait
もし接続が落ちた場合、中断しないで、待って、再試行します。

もしコマンドラインで 'help' と打った場合、mysql はサポートする コマンドを表示します:

mysql> help

MySQL commands:
help    (\h)    Display this text
?       (\h)    Synonym for `help'
clear   (\c)    Clear command
connect (\r)    Reconnect to the server. Optional arguments are db and host
edit    (\e)    Edit command with $EDITOR
exit    (\q)    Exit mysql. Same as quit
go      (\g)    Send command to mysql server
ego     (\G)    Send command to mysql server; Display result vertically
print   (\p)    Print current command
quit    (\q)    Quit mysql
rehash  (\#)    Rebuild completion hash
source  (\.)    Execute a SQL script file. Takes a file name as an argument
status  (\s)    Get status information from the server
use     (\u)    Use another database. Takes database name as argument

status コマンドは、今使用している 接続とサーバーについての情報をいくつか表示します。 もし --safe-updates モードで使用している場合、 status は あなたのクエリに影響する mysql 変数の値を表示します。

初心者に便利な起動オプション(MySQL 3.23.11 で導入されました)は、 --safe-mode (あるいは --i-am-a-dummy) で、 これは DELETE FROM table_nameWHERE 節を忘れて 実行しようとした場合のためにあります。 このオプションが使用されると、 mysql は接続時に MySQL サーバーに 以下のようなコマンドを送ります:

SET SQL_SAFE_UPDATES=1,SQL_SELECT_LIMIT=#select_limit#,
    SQL_MAX_JOIN_SIZE=#max_join_size#"

ここで #select_limit##max_join_size# は変数で これらは mysql コマンドからセット可能です。 「7.28 SET OPTION 構文」節参照.

この効果は:

14.3 MySQL サーバーの管理 ( mysqladmin )

管理オペレーションを実行するためのユーティリティ。シンタックスは:

shell> mysqladmin [OPTIONS] command [command-option] command ...

mysqladmin --help によって、オプションの一覧を手にいれることができます。

現在の mysqladmin は以下のコマンドをサポートします:

create databasename データベースの作成
drop databasename データベースとテーブルの全削除。
extended-status サーバーから拡張ステータスを取得。
flush-hosts キャッシュされている全ホストをフラッシュ。
flush-logs 全てのログをフラッシュ
flush-tables 全てのテーブルをフラッシュ
flush-privileges 許可テーブルの再読み込み (reload と同じ)
kill id,id,... mysql スレッドの kill.
password new-password 古いパスワードを new-password に変更
ping mysqld が生きているかチェック
processlist 現在活動中の mysql スレッドを表示
reload 許可テーブルの再読み込み
refresh 全テーブルをフラッシュし、ログファイルを一度閉じて開きます。
shutdown サーバーをダウンさせます。
slave-start Start slave replication thread
slave-stop Stop slave replication thread
status サーバーから短いステータスを得ます。
variables 変数の表示
version サーバーからバージョンを得ます。

全てのコマンドは、ユニークなプレフィックスで省略可能です。 例えば:

shell> mysqladmin proc stat
+----+-------+-----------+----+-------------+------+-------+------+
| Id | User  | Host      | db | Command     | Time | State | Info |
+----+-------+-----------+----+-------------+------+-------+------+
| 6  | monty | localhost |    | Processlist | 0    |       |      |
+----+-------+-----------+----+-------------+------+-------+------+
Uptime: 10077  Threads: 1  Questions: 9  Slow queries: 0  Opens: 6  Flush tables: 1  Open tables: 2  Memory in use: 1092K  Max memory used: 1116K

mysqladmin status コマンドの結果は、以下の項目を持ちます:

Uptime MySQL サーバーの起動秒数
Threads 稼働中のスレッド数 (clients)
Questions mysqld が開始してからのクライアントからのクエリ数
Slow queries long_query_time 秒より時間のかかったクエリの数
Opens mysqld が開いたテーブル数
Flush tables flush ..., refresh and reload コマンドの実行回数
Open tables 現在開かれているテーブルの数
Memory in use mysqld のコードによって直接割り当てられたメモリ (only available when MySQL is compiled with --with-debug)
Max memory used mysqld のコードによって直接割り当てられる最大メモリー量 (only available when MySQL is compiled with --with-debug)

If you do myslqadmin shutdown on a socket (in other words, on a the computer where mysqld is running), mysqladmin will wait until the MySQL pid-file is removed to ensure that the mysqld server has stopped properly.

14.4 MySQL データベースとテーブルから、構造とデータをダンプ ( mysqldump )

データベース、あるいは、 バックアップ、他のSQLサーバーへのデータを移動を目的としたデータのまとまり、 これらをダンプするためのユーティリティ。 ダンプは、テーブルの作成のための SQL 文を含みます。

shell> mysqldump [OPTIONS] database [tables]
OR     mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR     mysqldump [OPTIONS] --all-databases [OPTIONS]

もしテーブルを指定せず、--databases--all-databases を 使用しなかったなら、データベースの全てのテーブルがダンプされます。

mysqldump --help によって、オプションの一覧を手にいれることができます。

もし mysqldump--quick--opt なしで実行するならば、 mysqldump は結果を表示する前に、結果をメモリに全てロードすることに 注意してください。 これは大きなデータベースをダンプする際に問題になるでしょう。

mysqldump は以下のオプションをサポートします:

--add-locks
テーブルのダンプの前に LOCK TABLES 文を追加し、 テーブルのダンプ後に UNLOCK TABLE 文を追加します。 ( あとで MySQL に挿入するときにこれは速くなります ).
--add-drop-table
テーブルの create 文の前に、drop table 文を追加します。
-A, --all-databases
Dump all the databases. This will be same as --databases with all databases selected.
-a, --all
Include all MySQL specific create options.
--allow-keywords
キーワード(予約語) と同じ名前をもつフィールドの作成を許します。 これは、それぞれのフィールドの前に、テーブル名を付け足します。
-c, --complete-insert
完全な INSERT 文(フィールド名を書いた文) を使用します。
-C, --compress
もしサーバーとクライアントの双方が圧縮をサポートしているならば、 両者の間で行われる通信を全て圧縮します。
-B, --databases
To dump several databases. Note the difference in usage; In this case no tables are given. All name arguments are regarded as databasenames. USE db_name; will be included in the output before each new database.
--delayed
INSERT DELAYED コマンドを使用してレコードを INSERT します。
-e, --extended-insert
新しいマルチライン INSERT 構文を使用します。(これはあとで挿入する際、 よりコンパクトかつ速くなります。)
-#, --debug[=option_string]
Trace usage of the program (for debugging).
--help
Display a help message and exit.
--fields-terminated-by=...
--fields-enclosed-by=...
--fields-optionally-enclosed-by=...
--fields-escaped-by=...
--fields-terminated-by=...
これらのオプションは -T とともに使用され、 LOAD DATA INFILE と同様の意味をなします。 「7.18 LOAD DATA INFILE構文」節参照.
-F, --flush-logs
ダンプする前に、 MySQL サーバーのログファイルをフラッシュします。
-f, --force,
ダンプの途中で SQL エラーが発生しても、ダンプを続けます。
-h, --host=..
指定されたホストの MySQL サーバーからダンプします。 デフォルトのホストは localhost.
-l, --lock-tables.
ダンプを開始するとき全てのテーブルをロックします。 The tables are locked with READ LOCAL to allow concurrent inserts in the case of MyISAM tables.
-n, --no-create-db
'CREATE DATABASE /*!32312 IF NOT EXISTS*/ db_name;' will not be put in the output. The above line will be added otherwise, if --databases or --all-databases option was given.
-t, --no-create-info
テーブルの作成情報( CREATE TABLE 文) を書き出しません。
-d, --no-data
テーブル内のレコードを書き出しません。 これはテーブルの構造だけを取り出したいときにとても便利です!
--opt
--quick --add-drop-table --add-locks --extended-insert --lock-tables と同じ. MySQL サーバーから読み出す時間を最短にしてくれます。
-pyour_pass, --password[=your_pass]
サーバーに接続する際のパスワードを与えます。 もし `=your_pass' 部分を与えなかった場合は、 mysqldump は端末からパスワードを読み取ろうとします。
-P port_num, --port=port_num
サーバーに接続する際に使用する TCP/IP ポート番号。 (これは localhost 以外のホストへの接続に使用されます。 localhost の場合は、Unix ソケットが使用されます。)
-q, --quick
クエリをバッファにため込みません。stdout に直接出します。 mysql_use_result() をこれに使用しています。
-S /path/to/socket, --socket=/path/to/socket
localhost に接続する際のソケットファイルの指定 (デフォルトは /tmp/mysql.sock )
--tables
Overrides option --databases (-B).
-T, --tab=path-to-some-directory
与えられたテーブル毎に、 SQL CREATE 文を含む table_name.sql ファイル、 データを含む table_name.txt ファイルを作成します。 NOTE: これは mysqld デーモンが走っているマシン上で mysqldump を 実行する場合にだけ、動作します。 .txt ファイルのフォーマットは、 --fields-xxx--lines--xxx オプションに従います。
-u user_name, --user=user_name
サーバーに接続する際の MySQL ユーザー名。 デフォルトでは、Unix のログイン名になります。
-O var=option, --set-variable var=option
変数の値をセット。 可能な変数は後で示しします。
-v, --verbose
冗長モード。 プログラムが何を行っているかより表示します。
-V, --version
バージョンを示して終了。
-w, --where='where-condition'
選択されたレコードのみをダンプ: クオートは必須です!
"--where=user='jimf'" "-wuserid>1" "-wuserid<1"
-O net_buffer_length=#, where # < 24M
When creating multi-row-insert statements (as with option --extended-insert or --opt), mysqldump will create rows up to net_buffer_length length. If you increase this variable, you should also ensure that the max_allowed_packet variable in the MySQL server is bigger than the net_buffer_length.

mysqldump の普通の使用はデータベースのバックアップでしょう。 「21.2 データベースのバックアップ」節参照.

mysqldump --opt database > backup-file.sql

他の MySQL サーバーへデータベースをコピーする場合にも便利です:

mysqldump --opt database | mysql --host=remote-host -C database

It is possible to dump several databases with one command.

mysqldump --databases database1 [database2 database3...] > my_databases.sql

If all the databases are wanted, one can use:

mysqldump --all-databases > all_databases.sql

14.5 テキストファイルからデータを取り込む ( mysqlimport )

mysqlimport は、LOAD DATA INFILE SQL 構文を、 コマンドラインインターフェースで提供します。 mysqlimport のオプションのほとんどが、 LOAD DATA INFILE への同じオプションに対応します。 「7.18 LOAD DATA INFILE構文」節参照.

mysqlimport の実行は以下のようにします:

shell> mysqlimport [options] database textfile1 [textfile2....]

mysqlimport は、コマンドラインの引数に与えられたファイル名の拡張子を取り、 拡張子を取った後の名前を、ファイルの内容を取り込むテーブルの名前とします。 例えば、`patient.txt', `patient.text', `patient' という ファイルは全て、patient とという名前のテーブルに取り込まれます。

mysqlimport は以下のオプションをサポートします:

-C, --compress
クライアントとサーバーの両方が圧縮をサポートしているなら、 クライアント・サーバー間でやり取りされる全ての情報を圧縮します。
-#, --debug[=option_string]
プログラムのトレース(デバッグ)
-d, --delete
テキストファイルを取り込む前にテーブルを空にします。
--fields-terminated-by=...
--fields-enclosed-by=...
--fields-optionally-enclosed-by=...
--fields-escaped-by=...
--fields-terminated-by=...
これらのオプションは、LOAD DATA INFILE の対応する文節と同じ意味になります。 「7.18 LOAD DATA INFILE構文」節参照.
-f, --force
エラーを無視します。例えば、テキストファイルを取り込むテーブルがない場合、 残りのファイルの処理に移ります。 --force がなければ、 テーブルがなければ mysqlimport は終了します。
--help
ヘルプを表示して終了。
-h host_name, --host=host_name
名前を指定された MySQL サーバーにデータを取り入れます。 デフォルトでは localhost.
-i, --ignore
--replace オプションの説明を見てください。
-l, --lock-tables
それぞれのテキストファイルを処理する前に、書き込まれる 全てのテーブルをロックします。 これは確実に、すべてのテーブルをサーバ上で同期させます。
-L, --local
クライアントからの入力ファイルを読みます。 デフォルトでは、localhost に接続した場合、テキストファイルは サーバー上にあると仮定されます。(localhost はデフォルト値)
-pyour_pass, --password[=your_pass]
サーバーに接続するときに使用するパスワード。 もし `=your_pass' のところにパスワードを書かなければ、 mysqlimport は端末からのパスワードの入力を要求します。
-P port_num, --port=port_num
ホストに接続するための TCP/IP ポート番号。 (これは localhost を除くホストへの接続に使用します。 localhost へは、UNIX ソケットを使用します。)
-r, --replace
--replace--ignore オプションは、 入力されているレコードのユニークキーの値が、 既に存在しているレコードのユニークキーの値と同じ場合、 その入力されているデータの取り扱いを決定します。 もし --replace が指定されているなら、 既にあるレコードは新しく読まれたレコードに置き換えられます。 もし --ignore が指定されているなら、 入力された物は無視されます。 どちらのオプションも指定していない場合、 キーの値が重なっているとエラーを発し、 テキストファイルの残りの部分は無視されます。
-s, --silent
静粛モード。エラーだけ出力します。
-S /path/to/socket, --socket=/path/to/socket
localhost への接続時に使用するソケットファイルを指定します。
-u user_name, --user=user_name
サーバーの接続に使用する MySQL ユーザー名の指定。 デフォルトは、Unix のログイン名。
-v, --verbose
冗長モード。プログラムがしている事について多く出力します。
-V, --version
バージョンを表示して終了。

Here follows a sample run of using mysqlimport:

$ mysql --version
mysql  Ver 9.33 Distrib 3.22.25, for pc-linux-gnu (i686)
$ uname -a
Linux xxx.com 2.2.5-15 #1 Mon Apr 19 22:21:09 EDT 1999 i586 unknown
$ mysql -e 'CREATE TABLE imptest(id INT, n VARCHAR(30))' test
$ ed
a
100     Max Sydow
101     Count Dracula
.
w imptest.txt
32
q
$ od -c imptest.txt
0000000   1   0   0  \t   M   a   x       S   y   d   o   w  \n   1   0
0000020   1  \t   C   o   u   n   t       D   r   a   c   u   l   a  \n
0000040
$ mysqlimport --local test imptest.txt
test.imptest: Records: 2  Deleted: 0  Skipped: 0  Warnings: 0
$ mysql -e 'SELECT * FROM imptest' test
+------+---------------+
| id   | n             |
+------+---------------+
|  100 | Max Sydow     |
|  101 | Count Dracula |
+------+---------------+

14.6 Showing databases, tables and columns (mysqlshow

mysqlshow can be used to quickly look at which databases exists and their tables and the tables columns.

With the mysql program you can get the same information with the SHOW commands. 「7.23 SHOW 構文 (テーブルやフィールドなどについての情報を得る)」節参照.

mysqlshow is invoked like this:

shell> mysqlshow [OPTIONS] [database [table [column]]]

Note that in newer MySQL versions you only see those database/tables/columns on which you have some privilege.

If last argument contains a shell or SQL wildcard (*, ?, % or _) then only what's matched by the wildcard is shown. This may cause some confusion when you try to display the columns for a table with a _ as in this case mysqlshow only shows you the table names that matches the pattern. This is easily fixed by adding an extra % last on the command line (as a separate argument).

14.7 MySQL の圧縮された読み込み専用テーブルジェネレータ ( myisampackpack_isam )

myisampack is used to compress MyISAM tables and pack_isam is used to compress ISAM tables. Because ISAM tables are deprecated, we will only discuss myisampack here.

myisampack は、 1 MySQL ライセンス以上または MySQL サポートを注文した時に得 られる特別なユーテリティです。これらはバイナリだけの配布のため、 いくつかのプラットフォーム上でだけに有効です。

In the following we only talk about myisampack, but everything holds also for pack_isam.

myisampack はテーブル内の各項目を別々に圧縮するように働きます。展開のため の情報は、テーブルがオープンされた時にメモリに読まれます。これは、正確に1レコー ドだけを展開する必要があるような、個々のレコードへのアクセス時にとても良 い性能を与えます。MSDOS 上の Stacker 使用時のように、ディスクブロックは そんなに大きくありません。 通常、myisampack はデータファイルを 40〜70% にパックします。

MySQL は圧縮されたテーブルでメモリマップ (mmap()) を使用します。 mmap() が働かない場合は、通常のファイルの読み書きを使用します。

現在 myisampack には2つの制限があります:

これらの制限の修正は TODO にありますが、優先度は低いです。

myisampack は以下のようにして起動します:

shell> myisampack [options] filename ...

それぞれのファイル名はインデックスファイル(`.MYI')の名前です。 もしデータディレクトリにカレントディレクトリを移動していないなら、 ファイルのパスを指定しなくてはなりません。`.MYI' 拡張子は 省略することが可能です。

myisampack は以下のオプションをサポートします:

-b, --backup
tbl_name.OLD としてバックアップを作成します.
-#, --debug=debug_options
デバック出力。debug_options'd:t:o,filename'.
-f, --force
一時ファイルが存在していようが、サイズが大きくなろうが、強制的にテーブルを パックします。 myisampack はテーブルを圧縮している間、 一時ファイルを `tbl_name.TMD' という名前で作成します。 もし myisampack を途中で kill した場合、 `.TMD' ファイルが消されて いない事があります。通常、myisampack`tbl_name.TMD' ファイルが 既に存在する場合はエラーで終了します。 --force を使用すると、 myisampack はそのような場合でもテーブルをパックします。
-?, --help
ヘルプメッセージを出力して終了。
-j big_tbl_name, --join=big_tbl_name
全てのテーブルをコマンドラインで指定した big_tbl_name 一つに まとめます。結合される全てのテーブル定義は同じでなければなりません (同じ項目名、同じ項目型、同じインデックス、等)
-p #, --packlength=#
Specify the record length storage size, in bytes. The value should be 1, 2 or 3. (myisampack stores all rows with length pointers of 1, 2 or 3 bytes. In most normal cases, myisampack can determine the right length value before it begins packing the file, but it may notice during the packing process that it could have used a shorter length. In this case, myisampack will print a note that the next time you pack the same file, you could use a shorter record length.)
-s, --silent
Silent mode. Write output only when errors occur.
-t, --test
Don't pack table, only test packing it.
-T dir_name, --tmp_dir=dir_name
Use the named directory as the location in which to write the temporary table.
-v, --verbose
Verbose mode. Write info about progress and packing result.
-V, --version
Display version information and exit.
-w, --wait
Wait and retry if table is in use. If the mysqld server was invoked with the --skip-locking option, it is not a good idea to invoke myisampack if the table might be updated during the packing process.

The sequence of commands shown below illustrates a typical table compression session:

shell> ls -l station.*
-rw-rw-r--   1 monty    my         994128 Apr 17 19:00 station.ISD
-rw-rw-r--   1 monty    my          53248 Apr 17 19:00 station.ISM
-rw-rw-r--   1 monty    my         994128 Apr 17 19:00 station.MYD
-rw-rw-r--   1 monty    my          53248 Apr 17 19:00 station.MYI
-rw-rw-r--   1 monty    my           5767 Apr 17 19:00 station.frm

shell> myisamchk -dvv station

MyISAM file:     station
Isam-version:  2
Creation time: 1996-03-13 10:08:58
Recover time:  1997-02-02  3:06:43
Data records:              1192  Deleted blocks:              0
Datafile: Parts:           1192  Deleted data:                0
Datafile pointer (bytes):     2  Keyfile pointer (bytes):     2
Max datafile length:   54657023  Max keyfile length:   33554431
Recordlength:               834
Record format: Fixed length

table description:
Key Start Len Index   Type                       Root  Blocksize    Rec/key
1   2     4   unique  unsigned long              1024       1024          1
2   32    30  multip. text                      10240       1024          1

Field Start Length Type
1     1     1
2     2     4
3     6     4
4     10    1
5     11    20
6     31    1
7     32    30
8     62    35
9     97    35
10    132   35
11    167   4
12    171   16
13    187   35
14    222   4
15    226   16
16    242   20
17    262   20
18    282   20
19    302   30
20    332   4
21    336   4
22    340   1
23    341   8
24    349   8
25    357   8
26    365   2
27    367   2
28    369   4
29    373   4
30    377   1
31    378   2
32    380   8
33    388   4
34    392   4
35    396   4
36    400   4
37    404   1
38    405   4
39    409   4
40    413   4
41    417   4
42    421   4
43    425   4
44    429   20
45    449   30
46    479   1
47    480   1
48    481   79
49    560   79
50    639   79
51    718   79
52    797   8
53    805   1
54    806   1
55    807   20
56    827   4
57    831   4

shell> myisampack station.MYI
Compressing station.MYI: (1192 records)
- Calculating statistics

normal:     20  empty-space:      16  empty-zero:        12  empty-fill:  11
pre-space:   0  end-space:        12  table-lookups:      5  zero:         7
Original trees:  57  After join: 17
- Compressing file
87.14%

shell> ls -l station.*
-rw-rw-r--   1 monty    my         127874 Apr 17 19:00 station.ISD
-rw-rw-r--   1 monty    my          55296 Apr 17 19:04 station.ISM
-rw-rw-r--   1 monty    my         127874 Apr 17 19:00 station.MYD
-rw-rw-r--   1 monty    my          55296 Apr 17 19:04 station.MYI
-rw-rw-r--   1 monty    my           5767 Apr 17 19:00 station.frm

shell> myisamchk -dvv station

MyISAM file:     station
Isam-version:  2
Creation time: 1996-03-13 10:08:58
Recover time:  1997-04-17 19:04:26
Data records:              1192  Deleted blocks:              0
Datafile: Parts:           1192  Deleted data:                0
Datafilepointer (bytes):      3  Keyfile pointer (bytes):     1
Max datafile length:   16777215  Max keyfile length:     131071
Recordlength:               834
Record format: Compressed

table description:
Key Start Len Index   Type                       Root  Blocksize    Rec/key
1   2     4   unique  unsigned long             10240       1024          1
2   32    30  multip. text                      54272       1024          1

Field Start Length Type                         Huff tree  Bits
1     1     1      constant                             1     0
2     2     4      zerofill(1)                          2     9
3     6     4      no zeros, zerofill(1)                2     9
4     10    1                                           3     9
5     11    20     table-lookup                         4     0
6     31    1                                           3     9
7     32    30     no endspace, not_always              5     9
8     62    35     no endspace, not_always, no empty    6     9
9     97    35     no empty                             7     9
10    132   35     no endspace, not_always, no empty    6     9
11    167   4      zerofill(1)                          2     9
12    171   16     no endspace, not_always, no empty    5     9
13    187   35     no endspace, not_always, no empty    6     9
14    222   4      zerofill(1)                          2     9
15    226   16     no endspace, not_always, no empty    5     9
16    242   20     no endspace, not_always              8     9
17    262   20     no endspace, no empty                8     9
18    282   20     no endspace, no empty                5     9
19    302   30     no endspace, no empty                6     9
20    332   4      always zero                          2     9
21    336   4      always zero                          2     9
22    340   1                                           3     9
23    341   8      table-lookup                         9     0
24    349   8      table-lookup                        10     0
25    357   8      always zero                          2     9
26    365   2                                           2     9
27    367   2      no zeros, zerofill(1)                2     9
28    369   4      no zeros, zerofill(1)                2     9
29    373   4      table-lookup                        11     0
30    377   1                                           3     9
31    378   2      no zeros, zerofill(1)                2     9
32    380   8      no zeros                             2     9
33    388   4      always zero                          2     9
34    392   4      table-lookup                        12     0
35    396   4      no zeros, zerofill(1)               13     9
36    400   4      no zeros, zerofill(1)                2     9
37    404   1                                           2     9
38    405   4      no zeros                             2     9
39    409   4      always zero                          2     9
40    413   4      no zeros                             2     9
41    417   4      always zero                          2     9
42    421   4      no zeros                             2     9
43    425   4      always zero                          2     9
44    429   20     no empty                             3     9
45    449   30     no empty                             3     9
46    479   1                                          14     4
47    480   1                                          14     4
48    481   79     no endspace, no empty               15     9
49    560   79     no empty                             2     9
50    639   79     no empty                             2     9
51    718   79     no endspace                         16     9
52    797   8      no empty                             2     9
53    805   1                                          17     1
54    806   1                                           3     9
55    807   20     no empty                             3     9
56    827   4      no zeros, zerofill(2)                2     9
57    831   4      no zeros, zerofill(1)                2     9

The information printed by myisampack is described below:

normal
The number of columns for which no extra packing is used.
empty-space
The number of columns containing values that are only spaces; these will occupy 1 bit.
empty-zero
The number of columns containing values that are only binary 0's; these will occupy 1 bit.
empty-fill
The number of integer columns that don't occupy the full byte range of their type; these are changed to a smaller type (for example, an INTEGER column may be changed to MEDIUMINT).
pre-space
The number of decimal columns that are stored with leading space. In this case, each value will contain a count for the number of leading spaces.
end-space
The number of columns that have a lot of trailing space. In this case, each value will contain a count for the number of trailing spaces.
table-lookup
The column had only a small number of different values, and that were converted to an ENUM before Huffman compression.
zero
The number of columns for which all values are zero.
Original trees
The initial number of Huffman trees.
After join
The number of distinct Huffman trees left after joining trees to save some header space.

After a table has been compressed, myisamchk -dvv prints additional information about each field:

Type
The field type may contain the following descriptors:
constant
All rows have the same value.
no endspace
Don't store endspace.
no endspace, not_always
Don't store endspace and don't do end space compression for all values.
no endspace, no empty
Don't store endspace. Don't store empty values.
table-lookup
The column was converted to an ENUM.
zerofill(n)
The most significant n bytes in the value are always 0 and are not stored.
no zeros
Don't store zeros.
always zero
0 values are stored in 1 bit.
Huff tree
The Huffman tree associated with the field
Bits
The number of bits used in the Huffman tree.

After you have run pack_isam/myisampack you must run isamchk/myisamchk to recreate the index. At this time you can also sort the index blocks and create statistics that is needed for the MySQL optimizer to work more efficiently.

myisamchk -rq --analyze --sort-index table_name.MYI
isamchk   -rq --analyze --sort-index table_name.ISM

After you have installed the packed table into the MySQL database directory you should do mysqladmin flush-tables to force mysqld to start using the new table.


Go to the first, previous, next, last section, table of contents.