MySQLユーティリティー

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).
 

PAGE TOP

新着記事

タグクラウド

Smartからのお知らせ

関連サイト