2012年7月16日月曜日

さくらVPSにTengをインストールしてみました


前回のエントリの続き。
きっかけはPerl Begginers#3に参加して、MySQLとO/Rマッパーに興味を持ったから。
(Perl今のところ関係ないw)

本家サイトはこちらになります。
http://search.cpan.org/~nekokak/Teng-0.12/lib/Teng.pm

1.さくらVPSにrootユーザでログイン。

2.前提としてDBDモジュールが必要なので、DBDモジュールをインストール

# cpanm DBD::mysql
--> Working on DBD::mysql
Fetching http://www.cpan.org/authors/id/C/CA/CAPTTOFU/DBD-mysql-4.021.tar.gz ... OK
Configuring DBD-mysql-4.021 ... OK
Building and testing DBD-mysql-4.021 ... FAIL
! Installing DBD::mysql failed. See /root/.cpanm/build.log for details.

なんか失敗した・・・?
エラーメッセージでログを見なさい、と言われてるのでログを見てみた。

----ログ抜粋----
gcc -c  -I/usr/lib64/perl5/auto/DBI -I/usr/include/mysql  -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -fno-strict-aliasing -fwrapv -fPIC   -DUNIV_LINUX -DDBD_MYSQL_WITH_SSL -DDBD_MYSQL_INSERT_ID_IS_GOOD -g  -D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic   -DVERSION=\"4.021\" -DXS_VERSION=\"4.021\" -fPIC "-I/usr/lib64/perl5/CORE"   dbdimp.c
In file included from dbdimp.c:20:
dbdimp.h:24:49: error: mysql.h: No such file or directory
:(後略)
と何やらコンパイル関係でわらわらエラーが出ている。

MySQLをインストールしただけではDBDのインストールで失敗するということか・・・

調べてみたら、
yum install mysql-devel

で、Perlモジュールなどのその他のMySQLクライアントをコンパイルする場合に必要なライブラリとインクルードファイルがインストールされるらしいので、実行してみる。
(MySQL-devel.rpmについての詳細は http://dev.mysql.com/doc//refman/4.1/ja/linux-rpm.html に記載あり)
確認すると/usr/include/mysql以下にmysql.hが入っていた。これでうまくいくかな?

再度、cpanm DBD::mysqlを実行するとエラーも出ずにインストールできたのでうまくいったようだ。
# cpanm DBD::mysql
--> Working on DBD::mysql
Fetching http://www.cpan.org/authors/id/C/CA/CAPTTOFU/DBD-mysql-4.021.tar.gz ... OK
Configuring DBD-mysql-4.021 ... OK
Building and testing DBD-mysql-4.021 ... OK
Successfully installed DBD-mysql-4.021 (upgraded from 4.013)
1 distribution installed

3.Tengをインストールしてみる。

# cpanm Teng
:(中略)
Successfully installed Teng-0.14
16 distributions installed

こちらはすんなりうまくいった。

4.テスト用データベース・テーブル・ユーザの作成
テスト用データベースとテーブル、ユーザを作成する。
とりあえず動作確認用なので、テーブルは1カラムだけ設定することに。

mysql> create database testdb;

mysql> use testdb

mysql> create table tengtest(
name text
);

mysql> show tables;
+------------------+
| Tables_in_testdb |
+------------------+
| tengtest         |
+------------------+
1 row in set (0.00 sec)

mysql> grant all privileges on testdb.* to testuser@localhost identified by 'testpassword';

mysql> quit

mysql -u testuser -p

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| test               |
| testdb             |
+--------------------+
3 rows in set (0.00 sec)

mysql> use testdb

mysql> select * from tengtest;
Empty set (0.00 sec)

mysql> quit

5.Perlスクリプト実行
以下のtest.plを準備、実行して、データをテーブルにInsertしてみる。
(本家サイトを参考に見よう見まね・・・)

------------------------------------------------------------
#!/usr/bin/env perl
package main;
use Teng;
use Teng::Schema::Declare;

{
    package TestDB;
    use parent 'Teng';
}
{
    package TestDB::Schema;
    use Teng::Schema::Declare;
    table {
        name 'tengtest';
        columns qw(name);
    };
}

my $teng = TestDB->new(connect_info => [
    'dbi:mysql:database=testdb',
    'testuser',
    'testpassword'
]);

$teng->insert('tengtest', {
    name => 'penguinjr1',
});
------------------------------------------------------------
スクリプト実行後、MySQLにログインしてデータが登録されたかどうか確認したところ、正しくデータ登録されていた。

mysql -u testuser -p

mysql> use testdb

mysql> select * from tengtest;
+------------+
| name       |
+------------+
| penguinjr1 |
+------------+
1 row in set (0.00 sec)

<所感>
Tengは慣れれば非常に使いやすいと思います。とてもシンプルだな、という印象を受けました。スクリプト実行時のエラーメッセージもわかりやすい。
MySQLだけでなく、Oracleとも連携させてみたいです。
また、次回の Perl Begginers#4 は8/24(金)開催、「オブジェクトとパッケージ」がテーマということで今からとても楽しみです。
http://atnd.org/events/30711

2012年7月8日日曜日

さくらVPSにMySQLをインストール


さくらVPSにMySQLをインストールしました。
前回参加した Perl Begginers#3 でPerl→MySQLのO/Rマッパーについてたくさん紹介があったので、その事前準備です。

インストール手順については、既に色んな方がブログでエントリーを書かれているので、こちらの内容は自分用メモです。


1.さくらVPSにrootユーザでログイン

2.MySQLインストール
yum install mysql-server

3.MySQL起動
/etc/init.d/mysqld start

4.MySQLルートパスワード変更
mysql -u root

5.rootパスワードを更新
UPDATE mysql.user SET Password = PASSWORD('設定するパスワード')  WHERE User = 'root';

6.グラントテーブルを再読み込み
FLUSH PRIVILEGES;

7.MySQLとの接続を切断
quit

8.MySQLの再起動
/etc/init.d/mysqld restart

------------------------------------------------------------------------------------------------------
1.MySQLにログイン

mysql -u root -p
MySQLのrootパスワード入力

2.データベースの一覧表示
SHOW DATABASES;