| ■ 【ぷろじぇくと ぞうさん】 〜E-Bananaサーバ 構築日記〜
|
第14日目:教えて('A`) 〜MySQLって何?(その1)〜
|
どうも、('A`)です。
今日はロードバランサー(その5)をお話したかったのですが、、、テスト用サーバの用意が
間に合いませんでした(涙
(再インストールの要請が立て込んでしまって・・・)
なので、鯖子J( 'ー`)し から振られたMySQLに関する質問&回答とか概要とかをお話します。
('A`):「で、どんな質問が来ているの?」
J( 'ー`)し:「えーとね、あ、これだ。」
「・・・サーバ上で販売サイトを運営したいと考えています。私が
持っているシステム(スクリプト)では、データをデータベースに
登録して下さい、と書かれているのですが、よく判りません。
データベースって何ですか?どうやって使えば良いのですか?
教えて下さい。・・・」
('A`):「あー、こりゃ「データベースとは?」から説明しないと駄目かなあ・・・」
J( 'ー`)し:「じゃあ、説明お願いね♪」
('A`):「うー、えー、、、」
|
レンタルサーバを借りるお客様には色々な方がいらっしゃいます。
ものすごくサーバ(OSとかソフトウェアとか)詳しい人もいますが、あまり詳しくない
人もいます。(むしろそういう人が多いかと思います。)
('A`)も含めBIG-serverのメンバーはお客様に代わって煩わしい設定とかをサポートし、
快適にサーバを利用して頂く様日夜励んでいます。
で、先ほど紹介した様な問い合わせも頂いたりします。
今まで問い合わせ内容に応じて色々な回答をお客様に差し上げましたが、今回は
('A`)なりにデータベースに関して説明しようと思いました。
うまく説明できるかなあ。
・・・と思って実際に説明を書いていたら、とてもじゃないですが1日分として
まとまらなくなりました(泣
(本当はphpMyAdminの使い方だけ説明書けばよかったのかなあ・・・)
なので、今日はMySQLの大まかなところを解説して、明日はphpMyAdminを使っての
データベース構築について解説しますです。
【多くの人に利用されているMySQL】
皆さんの中には既にご存知の方もいらっしゃるかと思いますが、Bananaサーバ&
T-BananaサーバではMySQLをデータベースとして採用し、サービスをご提供しています。
このMySQLは世界で利用されているメジャーなDBMS(データベースマネージメントシステム)の
1つです。しかもフリーソフトなんです。
もう1つメジャーなDBMSとしてPostgreSQLが挙げられます。日本ではこちらの方が有名
だそうですが、世界的にはMySQLが古くから使われていて(初めて世に出たのは1995年)、
たくさんの人達が利用しています。いろんな文献や解説サイトなども多く出ています。
MySQLは今も改良され続け、2008年3月時点ではFreeBSD版では5.0.51が最新と
なっています。
また今年(2008年)1月には商用データベースOracleで有名なSun Microsystems 社が
買収したというニュースも流れました。
今後の機能開発や動向も含めて多くの人が注目しています。
【データベース‥‥実はテーブルが本体】
さて、BananaサーバやT-BananaサーバではFTPアカウントを1つ作成すると、
FTPアカウントと同じ名前でMySQLのユーザが作成されます。
(パスワードはFTPパスワードと同じ内容が設定されています。)
と同時にMySQLユーザ名と同じ名称でデータベースが作成されます。
BIG-Serverでは「1FTPにつき1データベース」でご提供しています。
(1つのFTPアカウントで複数のデータベースを提供する事はシステムの管理上
行なっておりません。)
詳しい事はBIG-serverのFAQページをご覧下さい。
ではMySQLはどの様に構成されているのでしょうか?
Bananaサーバ上でのMySQLのディレクトリ構成は以下の様になっています。
/var/db/mysql
|
-----ibdata1
| (InnoDB本体)
|
-----ib_logfile0
| ib_logfile1
| (InnoDBのログファイル)
|
-----mysql
| (MySQLの管理データベース)
|
-----各ユーザのデータベース
|
--------(テーブル名).fmr
|
--------(テーブル名).MYD
|
--------(テーブル名).MYI
|
大きく分けると3つの部分から成り立っています。
1) 各ユーザのデータベース部分
2) MySQLシステムを管理する為のデータベース部分
3) トランザクション型データベース部分
まず、1) 各ユーザのデータベース部分について解説します。
ここのディレクトリ内には、以下の3種類のファイル(テーブル)が存在します。
(これらのファイル(テーブル)が集まってデータベースとして機能します。)
参考書で例えると、参考書という本そのものが「データベース」、各章が
「テーブル」、目次が「インデックス」とするとなんとなく感じが掴める
かと思います。
・ .frmファイル
テーブル構造(項目やデータ型など)のデータが格納される
・.MYDファイル
テーブルのレコードデータ(実データ)が格納される
・.MYIファイル:
テーブルに対して作成された複数のインデックスデータが格納される
|
次に、2) MySQLシステムを管理する為のデータベース部分について解説します。
MySQLではユーザに関する情報(ユーザ名、パスワード、割り当てられている
データベースとか)や各ユーザの権限(テーブルの追加、更新、削除ができるか
禁止されているか)、接続に関する情報(サーバ内の該当ユーザからしか接続を
許可しない、とか、サーバ外部からの接続を許可する、とか)を特別なデータ
ベース(mysqlというディレクトリ)に格納しています。
このデータベースはMySQLのシステム管理・制御で使用する重要なデータなので
一般ユーザでは操作できない様になっています。
このmysqlというディレクトリを「特権データベース」という場合もあります。
最後に、3) トランザクション型データベース部分について解説します。
実はこの部分は('A`)が苦手な部分(というか、実際に使った事が無いです・・・)
なので、あくまでも概要だけ説明します。
よく銀行のシステムが引き合いに出されるのですが、「ある口座から別の口座に
いくらいくら振り込む」という処理を行なう場合、データベースの処理としては
・振込元の口座データからいくらいくら減らす
・振込先の口座データからいくらいくら加える
という2つの処理に分かれます。
しかしこれらの処理は2つ合わせて初めて意味のある処理となるので、これらを
「1つのまとまった形で」処理する必要があります。
この様な「1つのまとまった処理」を「トランザクション」といいます。
MySQLでは4.0.x系からこのトランザクション処理に対応したデータベースを
サポートしています。それが「InnoDB」と呼ばれるものです。
そして重要なのはトランザクションの処理を行なう場合、「全部OK」か
「全部NG」かのいずれかしか許されない、という事です。
つまり仮に片方の処理がNGとなった場合には、何らかの方法で処理を
「振りだし」に戻さなくてはいけません。
MySQLではトランザクション処理の際に「どこまで処理したのか」をログ
として記録しています。(ib_logfileというファイルに記録されます。)
そして処理がNGとなった場合にはここの記録から、今まで処理していた
内容を把握し、元の状態に更新し直す(これをロールバックといいます)
事を行ないます。
Banana&T-BananaサーバではMySQLインストール時に自動的にInnoDB関連の
ファイルが作成されますが、実際に使用する事はできません。
(有効化されていない、という事です。)
InnoDBを有効化するにはMySQLの設定ファイル(/etc/my.cnf)を作成し、
その中でInnoDBの細かい設定を記述する必要があります。
またそれだけでなく、サーバのディスクスペースとパーティション(区画)
の割り当てなどサーバ全体の構成も調整しなければなりません。
もし自宅でサーバを構築しトランザクション型のデータベースを
作成しようと考えている方がいらっしゃるなら、以上の点に注意して
サーバ構築を行なって下さい。
【MySQLのインストール‥‥バージョンと文字コードに気をつけて】
もし自宅でサーバを構築し、OSがFreeBSDだったら、MySQLのインストールは
・ソースからのコンパイル&インストール
・Portsからのインストール(pkg_addコマンド使用)
の2つの方法があります。
Banana&T-Bananaサーバでは後者の方法でインストールしています。
pkg_addコマンドでMySQLをインストールした場合には、サーバの
起動スクリプトは /usr/local/etc/rc.d に格納されます。
(このディレクトリはOS起動時に参照され、そこに設置されている
スクリプトが実行可能な状態である場合、自動的に起動されます。)
インストールできるMySQLのバージョンは 4.0.x系、4.1.x系、5.0.x系が
ありますが、文字コードの取り扱いが4.0.x系と他のバージョンで大きく
異なりますので、注意が必要です。
ちなみにpkg_addコマンドでインストールした場合、文字コードはlatin1
がデフォルトとなります。
・4.0.x系では文字コード(charsets)は.confファイルで追加できる
(/usr/local/share/mysql/charsets 内に各文字コードのコードデータが
.conf ファイルの形で存在します。)
sjis、ujisはデフォルトでは作られませんが、コードデータを作って
設置すれば利用可能です。
但しunicode(utf-8)には対応していません。
・4.1.x & 5.0.x では文字コードはバイナリ(xml形式)で生成される
unicode(utf-8)はサポートされているが、sjisやujisを使う場合には
ソースからのコンパイル&インストールでconfigureパラメータで
使用する文字コード(sjisとかujisとか)を明示する必要があります。
J( 'ー`)し:「説明はできたー?」
('A`):「えーと、文章が長くなったので、続きは明日書くから・・・」
J( 'ー`)し:「あ、そう。じゃあ、大急ぎで書いてね。」
('A`):「は、はい・・・」
|
今日はデータベースの具体的な操作方法まで書けなかった・・・
明日はphpMyAdminを使ってMySQLデータベースへのテーブル作成とかデータ追加とかの
方法について説明します。
それでは、また。
|
|
|
|
|
13日目に戻る。 15日目に続く。
解析
|