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 をお使いの場合は代わりに以下のコマンドを実行してください:

その後、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 です.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Let's take a quick look at the first form. It's relatively simple and gives you an overall look of your table. We'll go ahead and run it to see what data we have so far.

We see both the data we inserted through  and those inserted by   present. Now, let's say that we just want to see the record for Chris White. We can do so with the second form of select as shown below.

As expected, the specific entry that we were looking for has been selected. Now, let's say we only wanted to know the person's job and email address, not their name. We can do so with the third form of  as shown here.

This method of selection is a lot easier to manage, expecially with larger amounts of information, as we'll see later on. Right now, being the root mysql user, we have unlimited permissions to do what we wish with the MySQL database. In a server environment, a user with such privileges can be quite problematic. In order to control who does what with the databases, we setup privileges.

Granting Privileges with GRANT
Privileges are what kind of access users have to databases, tables, pretty much anything. Right now in the gentoo database, the MySQL root account is the only account that can access it, given its permissions. Now, let's create two somewhat generic users, guest and admin, who will access the gentoo database and work with the information in it. The guest account will be a restricted one. All it will be able to do is get information from the database, and that's it. admin will have the same control as root, but only for the gentoo database (not the main mysql databases). Before we start on that, let's have a closer look at this somewhat simplified format of the  command.

First we have the privileges we wish to assign. With what we've learned so far, here are some of the privileges you can set:


 * - Gives the all privilege control for the database
 * - Allows users to create tables
 * - Allows users to query tables
 * - Allows users to insert data into a table
 * - Allows users to see a list of databases
 * - User has no privileges
 * - Allows users to grant privileges

For our admin user, ALL will do. For the guest user,  will be sufficient for read only access. database is the database we wish the user to have these permissions on. In this example, gentoo is the database. The .* means all tables. If you wanted to, you could apply per table access. user is the name of the user and host is the hostname the user will be accessing from. In most cases, this will be localhost. Finally, password is the user's password. Given the information, let's go ahead and create our users.

Now that we have the users setup, let's test them out. First we quit mysql by typing  at the command prompt:

We're now back at the console. Now that we have our users setup, let's go ahead and see what they can do.

Testing User Permissions
We shall now attempt to login as the guest user. Currently, the guest user has  only privileges. This basically comes down to being able to search and nothing more. Go ahead and login with the guest account.

Now we should test the user restriction(s). Let's switch to the gentoo database:

Now let's try to do something we are not supposed to. We'll attempt to create a table.

As you can see, this function fails, as our user does not have the appropriate access. However, one access we did grant is the  statement. Let's go ahead and try that:

The command succeeds, and we're given a glimpse of what user permissions can do. We did, however, create an admin account as well. This was created to show that even all permissions granted users can still have limitations. Go ahead and quit MySQL and login as the admin.

To begin, we'll try creating a new database with our admin user. This admin user will have access similiar to the root MySQL account, and will be able to do any kind of modification to the gentoo database it chooses. This will test the user's access to the main MySQL database. Remember ealier that we only set permissions to a specific database.

Indeed, the admin user cannot create databases on the main MySQL database, despite all his permissions on the gentoo database. However, we're still able to use the admin account to modify the gentoo database, as shown here by this example data insertion.

The admin user can access the database as they please. Now sometimes, we need to get rid of user permissions. This could be anything from a problematic user to a retired employee. Let's take a look at how to disable user permissions with the  command.

Removing User Access With The REVOKE Command
The  command lets us deny access to a user. We can either deny full access, or specific access. In fact, the format is very similiar to.

Options here are explained in the  command section. In this section however, we're going to deny full access to a user. Let's say we find out the guest account is causing some problems security wise. We decide to revoke all privileges. We login as root and do the needful.

Now let's quit and attempt to login as a guest user.

Although we're able to login, our access to gentoo is now gone.

And our problematic user is no longer able to access the gentoo database. Please note that the user was still able to login. That is because they remain in the main MySQL database. Let's take a look at how to completely remove an account with  and the MySQL user table.

Removing Accounts Using DELETE
The MySQL user table is a listing of all users and information about them. Make sure you're logged in as root. Then go ahead and use the main MySQL database.

Now let's see what tables the mysql database has:

The user table is the table we're after. However, the user table contains 30 different fields, making it very hard to read. In order to make things easier to read, we'll go ahead and use the third version of the  statement. The fields we're after are Host and User.

Now that we have our information, we can get rid of the guest user. This is done with the  command and the syntax is shown below.

You may notice that  is somewhat similiar to the   statement in its format. In this case, the field will be User, and the value guest. This will delete the record in the user table where the user is guest, successfully deleting our guest user account. Let's go ahead and do that:

It seems to have worked ok. Let's test by logging out and attempting to login as our guest user.

Our user is now successfully deleted!

Conclusion
While this guide focuses mainly on setting up MySQL on the command line, a few alternatives are available in GUI form:


 * phpMyAdmin - Popular php based MySQL administration tool.
 * mysqlnavigator - QT frontend to MySQL.
 * gmyclient - A GNOME based MySQL client.
 * knoda - A KDE MySQL client.

This ends the MySQL introductory tutorial. I hope this gives you a better understanding of the basics behind MySQL and getting a database set up.