MySQLの微妙な設定をマスターする為に、手元マシンにもMySQLを導入する事に。
MySQLのサイトを見てみると、開発版では4.0系列が出ている様子。
後々の事を考え、今の内から4.0系列に移行しておこうかと少し考えたが、α版なのと、開発版では日本語の扱いはぞんざいになっていそうな気がしないでもないので、普通に安定版の3.23.49を導入する事に。
とりあえず、アカウントを用意。
# groupadd mysql
# useradd -d / -g mysql mysql
構築。
$ wget http://prdownloads.sourceforge.net/mysql/mysql-3.23.49.tar.gz
$ tar xvfz mysql-3.23.49.tar.gz
$ cd mysql-3.23.49
$ ./configure --help
$ CFLAGS="-O3 -march=i686" CXXFLAGS="-O3 -march=i686 -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --enable-assembler --with-mysqld-ldflags=-all-static --with-mysqld-user=mysql --without-debug --with-charset=ujis --with-extra-charsets=sjis
$ make
$ su
# make install
# scripts/mysql_install_db
PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
This is done with:
/usr/local/mysql/bin/mysqladmin -u root -p password 'new-password'
/usr/local/mysql/bin/mysqladmin -u root -h tinymetal -p password 'new-password'
See the manual for more instructions.
だそうなので、憶えておく。
mysql/varは、/varパーティション以下に移動しておきたいので、移動させる。
# mkdir -p /var/mysql
# mv /usr/local/mysql/var /var/mysql
# ln -s /var/mysql/var /usr/local/mysql/var
# chown -R root:root /usr/local/mysql
# chown -R mysql:mysql /var/mysql/var
設定ファイルをコピー。
# cp support-files/my-medium.cnf /etc/my.cnf
動かしてみる。
# /usr/local/mysql/bin/safe_mysqld --user=mysql &
とりあえず、起動する事だけ確認して、終了。
# /usr/local/mysql/bin/mysqladmin -u root shutdown
忘れないように、/etc/rc.d/rc.local辺りに、コメントアウトした状態で追記しておく。いや、コメントアウトでは、普段使えないか。勉強の為に、積極的に利用しなくてはならないのだから、多少リソースを食っても、常時起動させておくべきか。
普段起動していないなら、おそらくほとんど使わずに、勉強にならないのは容易に想像できるので。
よって、上記行をrc.localに追記。
引き続き、MySQLのセッティングを行う。
# jvim /etc/my.cnf
一応、この設定を勉強する、という目的なのだが、今のところ、変更したのは、bindするIPアドレスを127.0.0.1にした点のみ。
下記の行を、[mysqld]の後に追加。
mysqldを起動。
# /usr/local/mysql/bin/safe_mysqld --user=mysql &
とりあえず、mysqlのrootのパスワードを設定する。
先に、mysqladminコマンドからパスワードを設定する手順が出ていたが、折角なので、mysqladminは使わずに、mysql自身のデータベースに直接接続して設定してみる事にする。
$ /usr/local/mysql/bin/mysql -u root mysql
UPDATE user SET Password=PASSWORD('********')
WHERE user='root';
FLUSH PRIVILEGES;
\q
早速試してみる。
$ /usr/local/mysql/bin/mysql -u root mysql
最早、パスワード無しではrootで接続は出来ない。
$ /usr/local/mysql/bin/mysql -u root mysql -p
-pオプションを使って、パスワードを入力してrootで接続できる事を確認。
新しいデータベースを作り、怪しげなテーブルを作り、データを収め、見てみる。
$ /usr/local/mysql/bin/mysql
CREATE DATABASE test_socrates;
SHOW DATABASES;
USE test_socrates;
CREATE TABLE name2Id (
keyId INT UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(64) NOT NULL,
KEY index_key(keyId), # トートロジーを表現する為に、本質は一つ、
PRIMARY KEY (name) # 名前は複数、に、できるようにしてみた(それが良いのかは不明‥‥)。
);
CREATE TABLE knowledge (
keyAId INT UNSIGNED NOT NULL,
keyBId INT UNSIGNED NOT NULL,
relId ENUM('be_included', 'be_excluded'),
PRIMARY KEY (keyAId, keyBId)
);
SHOW TABLES;
SHOW FIELDS FROM name2Id;
SHOW FIELDS FROM knowledge;
# 追加テスト
INSERT INTO name2Id VALUES ( NULL, 'ソクラテス' ); # 1
INSERT INTO name2Id VALUES ( NULL, '人間' ); # 2
INSERT INTO name2Id VALUES ( NULL, 'ミドリムシ' ); # 3
INSERT INTO knowledge VALUES ( 1, 2, 'be_included' ); # ソクラテスは人間である
INSERT INTO knowledge VALUES ( 1, 3, 'be_excluded' ); # ソクラテスはミドリムシではない
# 確認
SELECT * FROM name2Id;
SELECT * FROM knowledge;
# 調査テスト
SELECT keyId FROM name2Id WHERE name = 'ソクラテス';
SELECT keyId FROM name2Id WHERE name = '人間';
SELECT name FROM name2Id WHERE keyId = 3;
# 変更テスト
UPDATE name2Id SET name = '植物' WHERE name = 'ミドリムシ';
SELECT * FROM name2Id;
SELECT keyId FROM name2Id WHERE name = 'ミドリムシ';
SELECT keyId FROM name2Id WHERE name = '植物';
# 以下、少しだけ本番っぽいテスト
SELECT @A:=keyId FROM name2Id WHERE name = 'ソクラテス';
SELECT @B:=keyId FROM name2Id WHERE name = '人間';
SELECT relId FROM knowledge WHERE keyAId = @A and keyBId = @B;
# なんとなく、マトモに動いている気がする‥‥
# 削除テスト
DELETE FROM name2Id WHERE name = 'ソクラテス';
SELECT * FROM name2Id;
# とりあえず、テストは上手くいった気がするので、データを全部消しておく
DROP DATABASE test_socrates;
SHOW DATABASES;
それとなく正常に動作している様子。
あとは、このページを参考に、my.cnfの調整の練習をする予定。
↓
http://www.SoftAgency.co.jp/mysql/TIPS/tune.html
最後に、perlからMySQLを扱えるように、DBI, MySQLそれぞれのモジュールを導入しておく。
# perl -MCPAN -e shell
cpan> install Bundle::DBI
cpan> install Data::ShowTable
cpan> install Bundle::Mysql
何故か、インストールに失敗するので、手動でインストールを試してみる事にする。
cpan> clean Bundle::Mysql
cpan> look Bundle::Mysql
# more README
# perl Makefile.PL
# make
# make test
# make install
上手くいった‥‥気がする。
上手くいっていないのであれば、上手くいかないので、そういう事なのであろう。多分。
しかし、perlの方のテストはまた今度に行う事にする。今度。後で。