MySQLユーティリティー群
- isamchk
- MySQL テーブルをチェック、最適化そして修復する。
- make_binary_release
- コンパイルされた MySQL のバイナリリリースを作成する。
- msql2mysql
- mSQL プログラムを MySQL に変換するシェルスクリプト。
- mysql
- mysql は簡単な SQL シェルだ
以下のように簡単にスクリプトを実行できる:
shell> mysql database < script.sql > output.tab
クライアントのメモリが十分でないことによる問題がある場合は、 --quick スイッチを使用すること。 - mysqlaccess
- ホスト、ユーザそしてデータベースの組合せで特権をチェックするためのスクリプト。
- mysqladmin
- 管理ユーティリティ。データベースの作成/破棄。reload (新しいユーザの読み込み) と refresh (ディスクへのテーブルのフラッシュ、ログファイルの再オープン)。サーバのバージョンと処理と状態情報も与える。
- mysqlbug
- MySQL バグレポートスクリプト。このスクリプトは MySQL メーリングリストにバグレポートを出す際、常に使用する。
- mysqld
- SQL デーモン。これは常に実行される。
- mysqldump
- MySQL データベースの SQL ステートメントまたはタブで区切られたテキストのファイルにダンプする。
- mysqlimport
- 一つまたは複数のテキストファイルをそれぞれのテーブルに読み込む。LOAD DATA INFILE でサポートされる全ての形式を使用できる。
- mysqlshow
- データベース、テーブル、項目そしてインデックスについての情報を表示する。
- mysql_install_db
- MySQL 承認テーブルをデフォルト特権で作成する。これは通常、最初の MySQL リリースを新しいシステム上にインストールする時に一回だけ実行される。
- replace
- msql2mysql で使用されるバイナリ。ファイル内または標準入力上の文字列を変換するユーティリティプログラム。
- safe_mysqld
- mysqld デーモンをいくつかの安全な機能で開始する。エラー時には再起動し、実行時情報をログファイルへ記入する。
mysqladmin:MySQLデータベース管理コマンド
mysqladminはデータベース管理操作を行うユーティリティーだ。主な使い方は以下の通り。
> mysqladmin [OPTIONS] command [command-option] command ...
mysqladmin --help を実行すれば、 mysqladmin がサポートするオプション一覧が得られる。
mysqladmin がサポートするコマンド
| コマンド名 | 説明 |
|---|---|
| create [データベース名] | データベース作成 |
| drop [データベース名] | データベース削除 |
| extended-status | サーバーから拡張ステータスメッセージを得る |
| flush-hosts | 全てのキャッシュしているホストをフラッシュ |
| lush-logs | 全てのログをフラッシュ |
| flush-tables | 全てのテーブルをフラッシュ |
| kill id,id,... | mysql スレッドをキル |
| password [パスワード] | パスワードを変更 |
| ping | mysqld が生きているかチェック |
| processlist | 実行中のスレッドを表示 |
| reload | 設定情報の再読み込み |
| refresh | 全てのテーブルをフラッシュし、ログファイルを一度閉じて開く |
| shutdown | mysqldの終了 |
| status | サーバーからステータスメッセージを得る |
| variables | 可能な変数の表示 |
| version | バージョン情報の表示 |
全てのコマンドはそのコマンド固有の接頭部分で省略できる。
> mysqladmin proc stat
mysqladmin statusコマンドが返す項目
- Uptime
MySQL サーバーが起動してからの秒数 - Threads
実行中のスレッド (クライアント) 数 - Questions
mysqld 開始以降のクライアントからの問い合わせ数 - Slow queries
long_query_time 秒以上にかかったクエリの数 - Opens
mysqld が過去に開いたテーブルの数 - Flush tables
flush ..., refresh, reload コマンドの実行回数 - Open tables
現在開かれているテーブルの数 - Memory in use
mysqld によるメモリー割り当て (MySQL を --with-debug でコンパイルした場合だけに表示される) - Max memory used
mysqld が割り当てたメモリーの最大数 (MySQL を --with-debug でコンパイルした場合だけに表示される)
mysqldumpでデータベースやテーブルをまるごと出力!
mysqldumpはデータベースのバックアップに使用します。
mysqldump を使った定期バックアップ
mysqldump を使った簡単な定期バックアップ方法を紹介しましょう。まずシェルスクリプトを作成します。
自分のホームディレクトリに移動
#
cd
シェルスクリプト用のディレクトリを作成
#
mkdir sh
ダンプ用ディレクトリを作成
#
mkdir dump
mysqldump
用のファイルを vi で作成します。
#
vi mysqldump.sh
mysqldump.sh の内容は以下のとおりです。ユーザ名 myuser、パスワード mypass 、バックアップディレクトリは /home/dump/db.txt とします。
mysqldump.sh のソース
#! /bin/sh
mysqldump --all-databases > /home/dump/db.txt -u myuser
--password=mypass --opt
最後に cron に登録。毎日1時に /home/sh ディレクトリにある mysqldump.sh を実行させます。
crontab -e
0 1 * * * * /home/sh/mysqldump.sh
mysqldump の使い方
データベース、あるいは、バックアップ、他のSQLサーバーへのデータを移動を目的としたデータのまとまり、これらをダンプするためのユーティリティ。ダンプは、テーブルの作成のための SQL 文を含みます。
サーバでバックアップを行なう場合、mysqlhotcopy を代わりに使用することを考慮すべきです。
# mysqldump [OPTIONS] database [tables]
もしくは
# mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2
DB3...]
もしくは
# 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
- テーブル作成の前にテーブルを削除する
- -A, --all-databases
- 全てのデータベースをダンプします。
- -a, --all
- 全てを含むオプションを作成します。
- --allow-keywords
- 予約語と同じ名前をもつフィールドの作成を許可します。これは、それぞれのフィールド名の前に、テーブル名を付け足します。
- -c, --complete-insert
- 完全な INSERT 文(フィールド名を書いた文) を使用します。
- -C, --compress
- サーバーとクライアントの両方が圧縮をサポートしている場合は、その間でやりとりされる通信を圧縮する。
- -B, --databases
- ダンプするデータベースを指定できます。
例:--databases db1 db2 ... - --delayed
- INSERT DELAYED コマンドを使用してレコードを挿入します。
- -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=...
--lines-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() をこれに使用しています。
- -r, --result-file=...
- Direct output to a given file. This option should be used in MSDOS, because it prevents new line '\n' from being converted to '\n\r' (new line + carriage return).
- -S /path/to/socket, --socket=/path/to/socket
- localhost に接続する際のソケットファイルを指定。デフォルトは「/tmp/mysql.sock」。
- --tables
- Overrides option --databases (-B).
- -T, --tab=path-to-some-directory
- Creates a table_name.sql
file, that contains the SQL CREATE commands,
and a table_name.txt file, that contains the
data, for each give table. NOTE: This only
works if mysqldump is run on the same
machine as the mysqld daemon. The format of
the .txt file is made according to the
--fields-xxx and --lines--xxx options.
与えられたテーブル毎に、 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 # < 16M
- 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 の活用
データベースをファイルにバックアップする場合は以下のとおり。
mysqldump --opt データベース名 > ファイル名
バックアップファイルをデータベースに戻す場合は次のとおり。
mysql データベース名 < ファイル名
もしくは、下記の方法でもいい。
mysql -e "source ファイル名" データベース名
他の MySQL にデータベースをコピーするのにも使える。
mysqldump --opt データベース名 | mysql --host=リモートホスト名 -C データベース名
複数のデータベースを指定してダンプします。
mysqldump --databases database1 [database2 database3...] > my_databases.sql
すべてのデータベースをダンプします。
mysqldump --all-databases > all_databases.sql
mysqlimport テキストファイルからデータを読み込む
mysqlimport は、LOAD DATA INFILE SQL 構文を、コマンドラインインターフェースで提供します。 mysqlimport のオプションのほとんどが、 LOAD DATA INFILE への同じオプションに対応します。
mysqlimport の実行は以下のようにします:
shell> mysqlimport [options] database textfile1 [textfile2....]
mysqlimport は、コマンドラインの引数に与えられたファイル名の拡張子を取り、拡張子を取った後の名前を、ファイルの内容を取り込むテーブルの名前とします。例えば、`patient.txt', `patient.text', `patient' というファイルは全て、patient とという名前のテーブルに取り込まれます。
mysqlimport は以下のオプションをサポートします
- -c, --columns=...
- This option takes a comma-separated list of field names as an argument. The field list is used to create a proper LOAD DATA INFILE command, which is then passed to MySQL.
- -C, --compress
- クライアントとサーバーの両方が圧縮をサポートしているなら、クライアント・サーバー間でやり取りされる全ての情報を圧縮します。
- -#, --debug[=option_string]
- プログラムのトレース(デバッグ)
- -d, --delete
- テキストファイルを取り込む前にテーブルを空にします。
- --fields-terminated-by=...
--fields-enclosed-by=...
--fields-optionally-enclosed-by=...
--fields-escaped-by=...
--lines-terminated-by=... - これらのオプションは、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
- バージョンを表示して終了。
mysqlhotcopy, Copying MySQL Databases and Tables
mysqlhotcopy は、データベースのバックアップを迅速に作るために LOCK TABLES 、 FLUSH TABLES 、および、 cp 、または、 scp を使う perl スクリプトです。1 つのテーブルのデータベースのバックアップを作るのが最も速い方法です。ただし、データベースディレクトリがある同じマシン上でしか実行できません。
mysqlhotcopy db_name [/path/to/new_directory]
mysqlhotcopy db_name_1 ... db_name_n /path/to/new_directory
mysqlhotcopy db_name./regex/
mysqlhotcopy のオプション
- -?, --help
- ヘルプを表示
- -u, --user=#
- ユーザ名を指定してデータベースにログインする
- -p, --password=#
- パスワードを指定してデータベースにログインする
- -P, --port=#
- ポートを指定してデータベースにログインする
- -S, --socket=#
- ソケットを指定してデータベースにログインする
- --allowold
- Don't abort if target already exists (rename it _old)
- --keepold
- Don't delete previous (now renamed) target when done
- --noindices
- Don't include full index files in copy to make the backup smaller and faster The indexes can later be reconstructed with myisamchk -rq..
- --method=#
- Method for copy (cp or scp).
- -q, --quiet
- エラーメッセージを表示しない
- --debug
- デバックをオンにする
- -n, --dryrun
- Report actions without doing them
- --regexp=#
- Copy all databases with names matching regexp
- --suffix=#
- Suffix for names of copied databases
- --checkpoint=#
- Insert checkpoint entry into specified db.table
- --flushlog
- Flush logs once all tables are locked.
- --tmpdir=#
- Temporary directory (instead of /tmp).
You can use perldoc mysqlhotcopy to get a more complete documentation for mysqlhotcopy.
mysqlhotcopy reads the groups [client] and [mysqlhotcopy]
from the option files.
To be able to execute mysqlhotcopy you need write access
to the backup directory, SELECT privilege to the tables
you are about to copy and the MySQL Reload privilege (to
be able to execute FLUSH TABLES).