MySQL/Startup Guide/ja

この文書は、ユーザーによるMySQLのセットアップと使用を手助けします.

背景
MySQL は様々なアプリケーションで使用されている人気のあるデータベースサーバーです. SQL は (S)tructured (Q)uery (L)anguage (訳注: 構造化クエリー言語)を意味しており、MySQL はこれを他のプログラムとのやりとりに使っています. それに加えて、MySQL はユーザーに追加機能を提供するため独自の拡張された SQL 機能を有しています. この文書では、MySQL の初期インストール、データベースやテーブルのセットアップ、新しいユーザーの作成をする方法を見ていきます. それでは、インストールの方法から始めましょう.

MySQL のインストール
まず、システムに MySQL がインストールされていることを確認してください. MySQL の特定の機能が必要な場合は、インストールをうまく調整するために必要なUSEフラグを有効化しているか確認してください.

インストールが完了すると、以下の通知が表示されるはずです:

今回は新規インストールなのでこのコマンドを実行します. MySQL データベースの設定中に何か尋ねられた場合には  を押す必要があります. 設定ではデータベース、テーブル、ユーザー、権限などの管理情報を含む MySQL のメインデータベースをセットアップします. ここでは、できる限り root パスワードを変更することが推奨されています. 必ずこれを行ってください、さもないとたまたまやってきた誰かがデフォルト設定の MySQL サーバーを乗っ取ってしまうかもしれません.

MySQL についての ebuild 特有でない情報の一部は、この文書をできるだけ一貫したものに保つためにここでは省略しています.

設定スクリプトがパスワードを設定するために実行すべきコマンドを出力していますから、それらを今実行してください.

OpenRC をお使いの場合はこのコマンドを実行します:

systemd をお使いの場合は代わりに以下のコマンドを実行してください:

>=-10.1.18 では:

その後、root パスワードを設定します:

MySQL サーバーにログインして、root パスワードが正しく設定されているか確かめることができます:

スイッチでログインしようとしているユーザーを指定します. スイッチでホストを指定します. リモートサーバーをセットアップしているのでない限り、これは通常 localhost です. 最後に  は、データベースへのアクセスのためにパスワードを入力することを mysql クライアントに通知します. プロンプトに注目してください. ここがすべてのコマンドを入力する場所です. これで root ユーザーとして mysql プロンプトに入れたので、データベースのセットアップに進めます.

データベースの作成
既にログインして mysql プロンプトが表示されています. まず、今あるデータベースを見てみましょう. これを行うには、 コマンドを使用します.

既にテストデータベースが一つ作成されていますが、ここでは自分で作ってみましょう. データベースは  コマンドを使って作成します. "gentoo" という名前で作成します.

応答から、コマンドがエラーなく実行されたことが分かります. この場合、1行が変更されました. これはメインの mysql データベースを指しており、そこで全データベースのリストが保持されています. 背景の詳細についてはさほど気にする必要はありません. 最後の数字はクエリーがどれくらいの速さで実行されたかを表します. コマンドを再度実行して、データベースが作成されたことを確認できます.

実際にデータベースが作成されています. 新しい gentoo データベースでテーブルの作成をするためには、それを現在のデータベースとして選択する必要があります. このためには  コマンドを使います. コマンドは現在のデータベースとして使用したいデータベースの名前をとります. もう一つの選択肢は、これをコマンドラインの  スイッチの後に設定することです. それでは gentoo データベースに切り替えましょう.

現在のデータベースが先ほど作成した gentoo データベースになりました. これでテーブルの作成や情報の挿入を始めることができます.

テーブルの作成
MySQL の構造の中には、データベース、テーブル、レコード、そしてフィールドがあります. データベースはテーブルをまとめており、テーブルはレコードをまとめており、レコードはフィールドをまとめており、フィールドが実際の情報を格納しています. ユーザーは、この構造に従って情報へアクセスする方法を選択します. 私たちはここまでデータベースを扱ってきましたが、ここからはテーブルについての作業をしていきましょう. まず、 コマンドを使ってデータベースと同様にテーブルを一覧表示できます. 現在 gentoo データベースにはテーブルがないので、このコマンドは以下のように出力します:

これは、テーブルを作成する必要があることを意味します. そのためには、 コマンドを使用します. しかしながら、このコマンドは単純な  コマンドとはかなり違います. このコマンドは引数のリストをとります. その形式は以下の通りです:

table_name は作成したいテーブルの名前です. 今回は  という名前のテーブルを作成してみましょう. このテーブルには開発者の名前(name)、電子メール(email)、そして仕事(job)を格納します.

field_name にはフィールドの名前を含めます. 今回は3つの名前が必要です: name、email、そして job です. また、他のテーブルとの関連を容易にするための  フィールドが定義され、データが挿入されるたびに auto-increment されます. は定義することが推奨されますが、 MySQL によって内部的に1つ維持されるので必須ではありません. インデックスには  も含まれますが、これを使うとテーブルが大きくなっても高速にデータへアクセスできます.

field_data_type は格納する情報の型です. 利用可能な様々な型が MySQL Column Types Page にあります. 今回は、すべてのデータフィールドでは  データ型を、また key フィールドについては   を使用します. は文字列を扱う場合において最も単純なデータ型の一つです.

size は1つのフィールドが格納するデータの大きさです. 今回は128とします. これは、そのフィールドが128バイトの  データを持てることを意味します. これについてはさらなる幾らかの技術的説明が先ほどのサイトで提供されていますが、さしあたってはこれを128文字と考えて構いません. これでテーブルの作成方法が分かったので、やってみましょう.

正常にテーブルが作成できたようです. コマンドで確認してみましょう:

はい、これが作成したテーブルです. しかしながら、セットアップしたフィールドの型についての情報がないようです. それを見るには、  コマンド(または短縮して  )を使用します. このコマンドは引数としてテーブルの名前をとります. developers テーブルについてどのように表示されるか見てみましょう:

ここには様々なフィールドとその型が表示されます. また、このガイドの範囲外のいくつかの追加属性も表示されます. 詳細については、MySQL Reference Manual を参照してください. これで、作業をするテーブルができました. 次はデータを挿入してみましょう.

MySQL Database にデータを挿入する
テーブルに初期データを挿入する(またはデータを追加する)には  コマンドを使用します. のように、このコマンドにも特有のフォーマットがあります:

このコマンドはテーブルにレコードを追加するために使われます. table は情報を入力したいテーブルを含みます. テーブルの名前の後には、データを挿入したい列のリストと、テーブルに挿入したい値を含む  が続きます. すべての列に値を挿入する場合には、値を列が定義された順番どおりに書けば列のリストを省略できます. auto-increment な列では、NULL 値は次の利用可能な値になります. 今回はデータを developers テーブルに挿入します. サンプルレコードを挿入してみましょう:

返された結果によるとレコードは正しく挿入されたようです. では、複数のレコードを入力したい場合にはどうすればよいでしょう？ それが  コマンドが働く場面です. このコマンドはレコードをタブ区切りのファイルから読み込みます. ホームディレクトリーでレコードを含むファイルを編集してそれを試してみましょう. このファイルを とします. 以下は一例です:

現在の  コマンドはかなり長い定義を持っていますが、ここでは最も単純な形式を使います.

は使用するファイルのディレクトリーおよびファイル名です. table はテーブルの名前です. 今回はファイルが 、table が developers になります.

うまくいきました. しかしながら、これでは単にレコードを挿入するだけで、MySQL のコントロールはまったくできません. 多くのウェブアプリケーションは MySQL を手早く簡単にセットアップするために sql スクリプトを使用します. sql スクリプトを使用したい場合、mysql をバッチモードで実行するか、またはファイルをソースとして読み込む必要があります. これは mysql をバッチモードで実行する例です:

と同様、 が何をするのか必ず理解しておいてください. さもないと、あなたのデータベースへのセキュリティ侵害が生じる可能性があります！ sql ファイルを使用するもう一つの方法は  コマンドです. このコマンドは mysql のインタラクティブモード中に mysql コマンドを sql ファイルから実行します. sql ファイルをソースとして読み込む方法は以下の通りです:

sql ファイルの実行を求めるウェブアプリケーションを見つけた場合には、その作業をするために上の2つのコマンドを使用できます. これでテーブルのセットアップは済みましたが、それではフィールドのチェックはどうやるのでしょう？ クエリーを使ってテーブル検索をすることでこれを行っていきます.

クエリーを使って MySQL のテーブルを閲覧する
クエリーはすべての SQL データベースの主要機能の一つです. テーブル内のデータを有用な形に変換するのに役立ちます. 多くのクエリーは  コマンドを使って実行されます. コマンドはかなり複雑なので、この文書ではコマンドの3つの基本的な形式のみを見ていきます.

最初の形式を簡単に見てみましょう. これは比較的単純で、テーブル全体を表示します. 実行して、これまでにどのようなデータを持っているか見てみましょう.

以前に  で挿入したデータと   で挿入したデータ両方が表示されています. では、今度は Chris White のレコードだけが必要だとします. これは、以下で示すように select の2つめの形式で実現できます.

期待した通り、探していた特定の項目が選択されました. 今度は、人の名前ではなく、仕事(job)と電子メール(email)アドレスだけが必要な場合を考えます. これは、以下で示すように3番目の形式で実現できます.

この選択方法は、後々わかることですが大量の情報を扱う場合には特に、管理がはるかに容易です. さて、現在は mysql の root ユーザーになっているので MySQL データベースで望むことを何でもできる無制限の権限があります. サーバー環境では、一ユーザーがそのような特権を持っていることにはかなり問題があります. データベースで誰が何をするのか制御するために、特権を設定しましょう.

MySQL における特権
特権は、データベース、テーブル、その他ほとんどすべてのものに対してユーザーが持っているアクセス権の種類です. 現在の gentoo データベースでは、権限により MySQL の root アカウントが唯一そこにアクセス可能なアカウントです. それでは、gentoo データベースにアクセスしてその中の情報を扱える、もう少し一般的な2つのユーザー guest と admin を作成しましょう. guest アカウントは制限されたアカウントにします. できるのはデータベースから情報を得ること、それだけです. admin は root と同様のコントロールができますが、gentoo データベースについてのみ(メインの mysql データベースにはできない)にします.

ユーザーの作成
CREATE USER SQL 文はユーザーを定義してその認証方法を設定します. 認証は一般的にはパスワードによる方法ですが、他のプラグインも利用可能です.

CREATE USER コマンドの例:

user がユーザー名、host がそのユーザーのアクセス元のホスト名です. 多くの場合、これは localhost でしょう. この例で使うユーザーを作成するには:

(admin)

(guest)

GRANT で特権を付与する
幾分簡略化した GRANT コマンドの形式をよく見てみましょう.

まず割り当てたい特権を決めます. これまでに学んできたものに関して設定できる特権には以下のようなものがあります:


 * - このデータベースのコントロールについてすべての特権を与える
 * - ユーザーにテーブルの作成を許可する
 * - ユーザーにテーブルへのクエリーを許可する
 * - ユーザーにテーブルへのデータの挿入を許可する
 * - ユーザーにデータベースの一覧表示を許可する
 * - ユーザーは何も特権を持たない
 * - ユーザーに特権の付与を許可する

admin ユーザーには ALL がよいでしょう. guest ユーザーは読み取り専用アクセスのため  で十分です. database はユーザーにこれらの権限を持たせたいデータベースです. この例では、gentoo が database になります. .* はすべてのテーブルを意味します. お望みなら、テーブルごとにアクセス権を適用できます.

これでユーザーがセットアップできたので、それらをテストします. まずコマンドプロンプトで  と入力して mysql を終了します:

これでコンソールに戻ってきました. 次でセットアップしたユーザーが何をできるか見てみましょう.

ユーザーの権限をテストする
今度は guest ユーザーとしてログインを試みます. 現在、guest ユーザーは  特権のみを持っています. これは基本的には検索のみができ、それ以外は何もできないということになります. では、guest アカウントとしてログインしてください.

それではユーザーの制約をテストします. gentoo データベースに切り替えてください:

想定していない何らかの操作をしてみましょう. テーブルの作成を試みます.

このように、ユーザーが適切なアクセス権を持っていないためこの関数は失敗します. しかしながら、唯一付与したアクセス権は  文です. それを試してみましょう:

コマンドは成功し、ユーザー権限でできることがちょっと理解できましたね. しかしながら、私たちは同様に admin アカウントも作成しました. これは、すべての権限を付与されたユーザーにも限界があることを示すために作成したものです. 次は MySQL を終了し admin としてログインします.

はじめに、admin ユーザーで新しいデータベースの作成を試みます. この admin ユーザーはroot MySQL アカウントと似たアクセス権を持ち、選択したあらゆる種類の gentoo データベースへの変更をすることができます. ここでは、ユーザーのメイン MySQL データベースへのアクセスをテストします. 以前、特定のデータベースの権限のみを設定したことを思い出してください.

実際に admin ユーザーは gentoo データベースでのあらゆる権限に関わらずメイン MySQL データベースでデータベースを作成することはできません. しかしそれでも、admin アカウントを以下のデータ挿入の例で示すように gentoo データベースの変更に使用することはできます.

admin ユーザーはこのデータベースに好きなだけアクセスできます. さて、しばしばユーザーの権限を取り除かなければならないことがあります. 問題のあるユーザーの場合もあれば、退職した従業員の場合もあるでしょう. コマンドを使ってユーザーの権限を無効にする方法を見ていきましょう.

REVOKE コマンドでユーザーのアクセス権を削除する
コマンドはユーザーのアクセス権を否定するのに使います. すべてのアクセス権を否定することも、特定のアクセス権を否定することもできます. 実際のところ、そのフォーマットは  とよく似ています.

ここにあるオプションは  コマンドの節で説明されています. しかしながらこの節では、ユーザーのアクセスをすべて否定します. guest アカウントがセキュリティー上何らかの問題を発生させたことに気付いたと仮定します. すべての特権の取り消しが決まりました. root としてログインし、必要な作業をしましょう.

それでは、mysql を終了して guest ユーザーとしてログインしてください.

ログインすることはできましたが、gentoo へのアクセス権はもはや無くなっています.

これで、問題のあるユーザーはもはや gentoo データベースにアクセスできなくなりました. ユーザーがまだログインできることに留意してください. これは、ユーザーがメインの MySQL データベースに残っているためです. を使ってアカウントを完全に削除する方法を見ていきましょう.

アカウントの削除
root としてログインしていることを確認してください.

DROP USER はユーザーテーブルとすべての特権テーブルのレコードを削除します. やってみましょう:

うまくいったようです. ログアウトして guest ユーザーとしてログインを試みてください.

ユーザーが正常に削除されました！

おわりに
このガイドは主にコマンドラインでの MySQL のセットアップに焦点を当てていますが、いくつかの GUI 形式の代替策も利用可能です:


 * phpMyAdmin - php ベースの人気の MySQL 管理ツール.

これで MySQL の入門チュートリアルは終わりです. これが MySQL の背後にある基礎のよりよい理解やデータベースのセットアップに役に立つことを願っています.