MySQLのインストールとデータベースの作成
手順的にはウェブサーバーの構築をしてもいいのですが、先にDBサーバーを作ってしまって足元を固めたいと思います。
MySQL はもっとも普及しているオープンソースのデータベースサーバーです。現在はJavaの開発元であるSun Microsystems社に買収され傘下になりました。DB業界では老舗のOracle社も確かSun Microsystems社に買収されました。両者に互換はありません。開発の世界ではOracleに慣れた人はPostgreSQLの方が使いやすいという方も結構います。
MySQLが人気の理由はLAMP(Linux、Apache、PHP、 MySQLの頭文字をとった言葉で「ランプ」という)という言葉に代表されるように、流行という要素もあるでしょうが、実は処理速度がかなり速く、結果の応答の速さがあります。しかし、他のDBに比べると独特の機能があったりするので、注意が必要です。余談ですが、開発の現場でも、関東圏はMySQL、関西圏はOracleの使用率が高いと聞いたことがあります。まぁ実際はどうかわかりませんが、ウェブの世界ではMySQLが主に使われると言っていいでしょう。
じゃあインストール。
$ yum install -y mysql mysql-server
まずここで注意が必要です。mysqlというパッケージはクライアント。つまりサーバーがセットアップされていてもこいつがないと、たとえ自分自身の中に MySQLサーバーがインストールされていてもそれに接続することはできません。mysql-serverというのはその名の通りサーバー本体です。忘れずにふたつともインストールしましょう。
ひとまずMySQLを起動して、データベースにログインしてみます。
$ /etc/init.d/mysqld start $ mysql -u root
接続確認ができたらいったんログアウトします。標準ではMySQLの文字コードは「latin1」というものになっていますが、日本語環境で使うなら基本はUTF-8でいきたいところです。システムによってはこの辺を吸収できるように作っていたりしますが、MySQLサーバー側の設定もあわせるため、/etc/my.cnfというMySQLの設定ファイルに文字コードの設定を追加しておきます。
地味に重要なのが「skip-character-set-client-handshake」という設定。これしてないと、PHPでMySQLのデータを取得市たときに文字化けします。その場合は実行前に「SET NAMES UTF8」というSQLを実行しないといけません。面倒くさいので設定しておきましょう。
$ vi /etc/my.cnf [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # Default to using old password format for compatibility with mysql 3.x # clients (those using the mysqlclient10 compatibility package). old_passwords=1 character-set-server=utf8 skip-character-set-client-handshake [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid [client] default-character-set=utf8
これを設定したら、MySQLを再起動します。
$ /etc/init.d/mysqld restart
でMySQLにとりあえずrootでログインして以下のSQLを実行して、文字コードがUTF-8になっていることを確認します。
mysql> status; -------------- mysql Ver 14.12 Distrib 5.0.77, for redhat-linux-gnu (i686) using readline 5.1 Connection id: 8 Current database: root Current user: root@localhost SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server version: 5.0.77 Source distribution Protocol version: 10 Connection: Localhost via UNIX socket Server characterset: utf8 Db characterset: utf8 Client characterset: utf8 Conn. characterset: utf8 UNIX socket: /var/lib/mysql/mysql.sock Uptime: 11 min 43 sec Threads: 4 Questions: 299 Slow queries: 0 Opens: 248 Flush tables: 1 Open tables: 64 Queries per second avg: 0.425 -------------- mysql> SHOW VARIABLES LIKE 'char%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec)
ではMySQLの設定をしていきます。MySQLの最高権限者はLinuxと同じrootと名づけられています。そしてデフォルトの状態はパスワードも何も設定されていません。まずはrootのパスワードを設定します。
mysql> SELECT host, user, password FROM mysql.users;
こういったものをSQL文といいます。これはデータベースの問い合わせ言語でデータベースのデータを選択、変更、挿入、削除と操作するためのコマンドになります。データベースは表のような形式でデータを保持し、複数の表の関係性でデータを抽出するためRDBMS(リレーショナルデータベースマネージメントシステム)といわれます。
これで見ていただくとpasswordの欄は空のままです。つまりパスワードは設定されていません。
だからパスワードを設定します。以下のSQL(コマンド)をあなたのパスワードで設定してください。
mysql> SET PASSWORD FOR root@localhost=PASSWORD('new_password');
これでいったんログアウトして、再度ログインのテストをします(ログアウトは「exit」コマンド)。先ほどはユーザー名しか指定しませんでしたが、今度はパスワードが必要なため以下のようなコマンドを打ちます。
mysql> exit $ mysql -u root -p Password:
そうするとパスワードが聞かれるので先ほど設定したパスワードを入力して、ログインできるかどうか確認しましょう。先ほどはlocalhostにしか設定しませんでしたが、他のホスト名にも同じ方法で設定しましょう。ユーザーは同じ名前でも、ホスト名によってパスワードを変更できるので、注意してください。また、ホスト名が設定されているのに、ユーザー名が設定されていない行があれば、以下のSQLを使って削除しておきましょう。
mysql> DELETE FROM mysql.user WHERE user IS NULL;
ここまではサーバーの設定です。次はいよいよ、実際に使うための設定をしていきます。LinuxユーザーwebmasterのためのMySQLユーザー webmasterとデータベースwebmasterをつくります。MySQL側の名前は自由です。Linuxユーザーとも関連付けしないため、 webmasterにこだわる必要はありません。
では作成の一例です。
$ mysql -u root -p Password: rootのパスワードを入力 mysql> CREATE DATABASE webmaster; mysql> GRANT ALL ON webmaster.* TO webmaster@'%' IDENTIFIED BY 'webmaster用のパスワード'; mysql> exit $ mysql -u webmaster -D webmaster -p Password: webmasterのパスワードを入力
では順を追って説明しましょう。まずMySQLにrootでログインします。そしてまずすべきは新しいユーザー用のデータベースを作ることです。これが「CREATE DATABASE」で行っていることです。これでwebmasterというデータベースができました。
しかし、これはだれの所有物かまだわかりません。そこでユーザーの作成と権限の付与を行います。MySQLでは権限付与時に新しいユーザーを作成することができます。
「GRANT」文は権限を付与する場合のSQLです。構文は「GRANT 権限 ON データベース名.テーブル名 TO ユーザー名@ホストアドレス IDENTIFIED BY 'パスワード';」となっています。
権限・・・「ALL」はすべての権限を意味します。ここに制限をかけてもいいですが、ここではそこまで厳密にはしません。
データベース名.テーブル名・・・テーブル名が「*」になっていますが、これはそのデータベース内のすべてのテーブルという意味です。
ユーザー名@ホスト名・・・ホスト名に関してはIPアドレスやホスト名を指定できますが、あらゆるところからのアクセスを許可する場合は「'%'」を指定します。また特定のIP帯からの接続を許可する場合は「'192.168.1.%'」などのように指定します。
パスワード・・・これはwebmasterというMySQLユーザーに対すパスワードではなく、上記のような条件でwebmasterユーザーとして接続するときに必要な条件です。たとえば同じ条件で別のユーザーを作成することもできます。
あとはWindowsなどのクライアントマシンからSQLツールを使ってログインしてみましょう。MySQLの場合MySQL GUI Toolsというのがダウンロードできます。その中にQuerybrowserというのがあります。これをインストールして、接続確認をして見ましょう。
Server Host・・・MySQLが稼動しているサーバーのIPアドレスまたはホスト名
Port・・・MySQLへの接続を受け付けるポート番号。デフォルトは3306
Username・・・ユーザー名
Password・・・パスワード
Default Schema・・・データベース名
このQuerybrowserはSQLを実行したり、実行した結果を閲覧、編集、ファイルに保存することができるMySQL専用のツールです。ファ イルへの保存はExcel、CSV、テキスト、XMLとかなり多種多様にできますが、スプレッド(表)の範囲選択などはできません。またインターフェース が英語ですが、スプレッド内には日本語を表示することができます。しかし、SQLエリアに日本語を記述すると途中でQuerybrowser自体が強制終 了してしまうみたいなので、注意が必要です。とはいっても、タブインターフェースやセミコロンで1つのSQLと解釈してくれるインターフェースはかなり使 いやすいです。