マソム自宅サーバ構築の記録
- ■
-
MySQL5.0のインストール
-
作成日:08/02/27
更新日:09/08/07
前置き
バージョンは
http://www.mysql.com/で確認して2008年2月現在の最新版の5.0.51aにしました。
文字コードはUTF-8にします。Fedora 7 も PHPもUTF-8にしている為です。
ユーザの作成
mysql用のユーザを作成しておきます。私の場合ログインシェルを利用しない設定です。
$ su
# mkdir /usr/local/mysql50
# /usr/sbin/groupadd mysql50
# /usr/sbin/useradd -g mysql50 -d /usr/local/mysql50 -s /sbin/nologin mysql50
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
MySQLのインストール
まず、ミラーサイトからダウンロード 。
私はユーザディレクトリにソース置き場を作ってあるので、そこにダウンロードします。 勿論/usr/local/srcでも良いと思います。
$ wget http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-5.0.51a.tar.gz/from/http://ftp.iij.ad.jp/pub/db/mysql/
ソースを展開します。
$ tar xzf mysql-5.0.51a.tar.gz
ソースディレクトリに移動しコンパイルします。
./configureのオプションでデフォルトの文字コードをUTF-8にしています。UTF-8はバージョン4.1からサポートされるようになったそうです。EUCの場合はujis、Shift-JISの場合はsjisです。
私はトランザクション処理を行いたいのでInnoDB型を使う予定です。バージョン4.0からInnoDB型はデフォルトでサポートされているということなので、オプションは指定していません。
$ cd mysql-5.0.51a
$ ./configure --prefix=/usr/local/mysql50 \
--with-mysqld-user=mysql50 \
--with-charset=utf8 \
--with-extra-charsets=all 2>&1 |tee configure.log
$ make 2>&1 |tee make.log
インストールします。
$ su
# make install 2>&1 |tee install.log
次に設定ファイルを設置します。
/usr/local/mysql50/share/mysql/*.cnfの中から環境にあったものを選びます。
# cp /usr/local/mysql50/share/mysql/my-medium.cnf /etc/my.cnf
全ユーザがMySQLを使えるようにする為、bash初期化スクリプト/etc/bashrcを編集して環境変数"PATH"にMySQLのパスを追加します。もし、使えるユーザを限定したい時は、各ユーザの.bashrcに追加します。
# vi /etc/bashrc
...省略...
## Add MySQL5.0 Path
export PATH=$PATH:/usr/local/mysql50/bin
保存します。
次に、DBを初期化します。
# cd /usr/local/mysql50
# ./bin/mysql_install_db --user=mysql50
Installing MySQL system tables...
OK
Filling help tables...
OK
To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system
PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:
/usr/local/mysql50/bin/mysqladmin -u root password 'new-password'
/usr/local/mysql50/bin/mysqladmin -u root -h mithril.mathomfactory.com password 'new-password'
Alternatively you can run:
/usr/local/mysql50/bin/mysql_secure_installation
which will also give you the option of removing the test
databases and anonymous user created by default. This is
strongly recommended for production servers.
See the manual for more instructions.
You can start the MySQL daemon with:
cd /usr/local/mysql50 ; /usr/local/mysql50/bin/mysqld_safe &
You can test the MySQL daemon with mysql-test-run.pl
cd mysql-test ; perl mysql-test-run.pl
Please report any problems with the /usr/local/mysql50/bin/mysqlbug script!
The latest information about MySQL is available on the web at
http://www.mysql.com
Support MySQL by buying support/licenses at http://shop.mysql.com
作成されたDBのディレクトリ/usr/local/mysql50/varのオーナーはmysql50になっていましたので、以前のようにオーナーを変更する必要はありませんでした。
MySQLの起動
起動スクリプトmysqld_safeで起動するかテストします。本来はmysql50ユーザになって実行するべきでしょうが、私はmysq50lユーザをログインシェル無しで作っているので、rootで試してしまいました。
# mysqld_safe &
[1] 20340
# nohup: ignoring input and redirecting stderr to stdout
Starting mysqld daemon with databases from /usr/local/mysql50/var
停止します。
# mysqladmin shutdown
STOPPING server from pid file /usr/local/mysql50/var/mithril.mathomfactory.com.pid
080227 23:25:03 mysqld ended
[1]+ Done mysqld_safe
無事起動できるようです。
起動スクリプトで起動します。
# /usr/local/mysql50/share/mysql/mysql.server start
Starting MySQL [ OK ]
自動起動の設定をします。起動スクリプト/usr/local/mysql50/share/mysql/mysql.serverを/etc/rc.d/init.dコピーします。
# cp /usr/local/mysql50/share/mysql/mysql.server /etc/rc.d/init.d/mysqld
各rcにサービスを追加します。
# chkconfig --add mysqld
S64、K36でシンボリックリンクが作成されました。
データベースユーザの設定
セキュリティの為rootユーザにパスワードを設定し、匿名ユーザは削除します。
まずmysqlクライアントにrootでログインします。
$ /usr/local/mysql50/bin/mysql -u root
rootユーザにパスワードを設定します。
mysql> set password for 'root'@'localhost'=password('パスワード');
mysql> set password for root@'ホスト名.ドメイン名'=password('パスワード');
mysql> set password for root@'127.0.0.1'=password('パスワード');
確認してみます。一旦ログアウトしてからもう一度ログインします。今度はパスワードを入力します。
mysql> exit
Bye
$ /usr/local/mysql50/bin/mysql -u root -p
Enter password:パスワード
ユーザの状態を表示してみます。
mysql> select User,Host,Password from mysql.user;
+------+---------------------------+-------------------------------------------+
| User | Host | Password |
+------+---------------------------+-------------------------------------------+
| root | localhost | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| root | ホスト名.ドメイン名 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| root | 127.0.0.1 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| | ホスト名.ドメイン名 | |
| | localhost | |
+------+---------------------------+-------------------------------------------+
5 rows in set (0.00 sec)
Userが空白なのは匿名ユーザです。これを削除します。
mysql> delete from mysql.user where User='';
確認してみます。
mysql> select User,Host,Password from mysql.user;
+------+---------------------------+-------------------------------------------+
| User | Host | Password |
+------+---------------------------+-------------------------------------------+
| root | localhost | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| root | ホスト名.ドメイン名 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| root | 127.0.0.1 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
+------+---------------------------+-------------------------------------------+
3 rows in set (0.00 sec)
データベースの作成
テスト用のデータベースを作成します。
mysql> create database my_db;
作成されたか確認してみます。
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| my_db |
| mysql |
| test |
+--------------------+
4 rows in set (0.00 sec)
my_dbを操作する一般ユーザを作成しておきます。普段はこのユーザを使います。
mysql> grant all on my_db.* to my_user@localhost identified by 'パスワード';
一旦ログアウトして、my_userでmy_dbにログインします。今度はDB名も入力します。
mysql> exit
Bye
$ /usr/local/mysql50/bin/mysql -u my_user -p my_db
Enter password:
テスト用テーブルを作成します。
mysql> create table test(
-> no integer not null,
-> name varchar(32) unique,
-> primary key ( no ) );
Query OK, 0 rows affected (0.00 sec)
作成できたか確認します。
mysql> show columns from test;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| no | int(11) | NO | PRI | NULL | |
| name | varchar(32) | YES | UNI | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
レコードを追加します。
mysql> insert into test values (1,'apple');
Query OK, 1 row affected (0.00 sec)
mysql> insert into test values (2,'grape');
Query OK, 1 row affected (0.00 sec)
mysql> insert into test values (3,'melon');
Query OK, 1 row affected (0.00 sec)
レコードが出来ているが確認します。
mysql> select * from test;
+----+-------+
| no | name |
+----+-------+
| 1 | apple |
| 2 | grape |
| 3 | melon |
+----+-------+
3 rows in set (0.00 sec)
無事テスト用のデータベースとテーブルが出来ました。
PHPのテスト
PHPからMySQLに接続できるか確認します。
Apacheのインストールと
PHPのインストールはテスト前に済ませておきます。
データベースの内容を表示するテストプログラムmysql_tst.phpを作成します。 ソースは以下の通り。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title> MySQL接続テスト</title>
</head>
<body>
<?php
//===========================================================================
// MySQL接続テスト
//===========================================================================
define("MYSQL_SERVER" ,"localhost");
define("MYSQL_USER" ,"my_user");
define("MYSQL_PASS" ,"パスワード");
define("MYSQL_DB" ,"my_db");
$link = mysqli_connect(MYSQL_SERVER, MYSQL_USER, MYSQL_PASS, MYSQL_DB);
if( mysqli_connect_errno() ){
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$result = mysqli_query($link, "select * from test");
if (!$result) {
printf("Errormessage: %s\n", mysqli_error($link));
} else {
print("MySQL テスト接続<br>\n");
while( $ary_data=mysqli_fetch_assoc($result) ){
foreach( $ary_data as $key => $val ){
printf("%s[%s],\t", $key,$val);
}
print("<br>\n");
}
}
mysqli_close($link);
?>
</body>
</html>
ドキュメントルートに置いて、ブラウザからアクセスしてみます。
ブラウザに以下の文字列が出ました。接続できているようです。
MySQL テスト接続
no[1], name[apple],
no[2], name[grape],
no[3], name[melon],
phpMyAdminのインストール
MySQLを管理するツールとしてphpMyAdminをインストールします。バージョンは
http://www.phpmyadmin.net/で確認して2008年3月現在の最新版 2.11.5 にしました。
動作環境はソース内のドキュメントに詳しく載っていますが、
PHP 4.2.0以降
認証方法に「cookie」を使うなら、PHPの./configureオプション--with-mcrypt (Mcrypt暗号化関数を使えるようにする)を奨励
です。
まず、ミラーサイトからダウンロード 。私はユーザディレクトリのソース置き場にダウンロードしましたが、任意のディレクトリで良いと思います。
$ cd /home/ユーザ名/src/
$ wget http://prdownloads.sourceforge.net/phpmyadmin/phpMyAdmin-2.11.5-all-languages.tar.gz?download
ソースを展開します。
$ tar xzf phpMyAdmin-2.11.5-all-languages.tar.gz
展開したディレクトリ名をお好みに変更して、Apacheドキュメントルート以下の設置したい場所に移動します。
私はディレクトリ名をphpMyAdminとしました。
$ su
# mv phpMyAdmin-2.11.5-all-languages /ドキュメントルート以下の任意のディレクトリパス/phpMyAdmin
# cd /ドキュメントルート以下の任意のディレクトリパス/
chownで各ファイルのオーナをドキュメントルートに合わせ、グループはApacheの実行ユーザのグループにします。
# cd /ドキュメントルート以下の任意のディレクトリパス/
# chown -R ドキュメントルートユーザ名.Apache実行ユーザグループ名 phpMyAdmin
phpMyAdminディレクトリ内に移動します。
# exit
$ cd /ドキュメントルート以下の任意のディレクトリパス/phpMyAdmin
config.sample.inc.phpをコピーして、設定ファイルconfig.inc.phpにします。設定ファイルにパーミッションを設定します。
$ cp config.sample.inc.php config.inc.php
$ chmod 660 config.inc.php
config.inc.phpを編集します。
認証は「cookie」を使うことにしました。「config」にしてconfig.inc.phpファイルの$cfg['Servers'][$i]['user']と$cfg['Servers'][$i]['password']にMySQLのユーザ名とパスワードを記述すると、DBの追加等でユーザを変えてログインしたくなった時に不便だからです。
「cookie」の場合は$cfg['blowfish_secret'] に、キー(認証を使う時に暗号化アルゴリズムで使われる最大46文字の文字列)を設定するだけです。
なお、サーバがlocalhostでない場合は
$cfg['Servers'][$i]['host'] の変更も必要です。
$ vi config.inc.php
$cfg['blowfish_secret'] = 'xxxxxxxxxxxxxxxxxxxx';
$cfg['Servers'][$i]['auth_type'] = 'cookie'
$cfg['Servers'][$i]['host'] = 'localhost'
ブラウザからインストールしたディレクトリにアクセスしてみてindex.phpが表示されればOKです。
紆余曲折Tips
キャラクタセット
mysqlクライアントからキャラクタセットを確認すると以下のようになりました。
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/local/mysql50/share/mysql/charsets/ |
+--------------------------+------------------------------------------+
8 rows in set (0.00 sec)
PHPから確認すると、mysqlクライアントと同様の結果になりました。
Variable_name[character_set_client], Value[utf8],
Variable_name[character_set_connection], Value[utf8],
Variable_name[character_set_database], Value[utf8],
Variable_name[character_set_filesystem], Value[binary],
Variable_name[character_set_results], Value[utf8],
Variable_name[character_set_server], Value[utf8],
Variable_name[character_set_system], Value[utf8],
Variable_name[character_sets_dir], Value[/usr/local/mysql50/share/mysql/charsets/],
以前、Windows版のMySQL5.0.18 と PHP5.1.4 を使った時は結果が違う為に文字化けが起きましたが、今回は問題ありませんでした。
なお、文字化けへの対応には、/etc/my.cnf (Windowsはmy.ini) に skip-character-set-client-handshake を追加していました。