適当に・・・

何の目的も無くブログを立ち上げてみました。更新は不定期ですね。

MySQL 文字化け

2009年12月14日 03時03分03秒 | Mysql
MYSQL 文字化け

my.cnfに

[mysqld]
character-set-server = utf8
collation-server = utf8_general_ci
init_connect="SET NAMES utf8"

って設定を書けばとりあえずutf-8のデータを
放り込んでも文字化けしなくなった。

以上。

Mysql WARNING: unrecognized options: --with-innodb

2009年12月06日 19時23分27秒 | Mysql
なんかMysql 5.1.41をソースから
入れるときに WARNING: unrecognized options: --with-innodb
が出た。

前はこんなワーニングでなかったのにと
思いきや前も出てたらしい。
でもinnodb問題なく使えてる。
(使えてない場合はすぐに発覚して調べてたと思う。w)

こんな感じのオプションを指定してるんだけどね。

./configure --with-charset=utf8 --with-extra-charsets=all --with-mysqld-user=mysql --with-innodb --prefix=/usr/local/mysql-5.1.41


--with-innodb は
--with-plugins=innobase になったらしい。

変更して

./configure --with-charset=utf8 --with-extra-charsets=all --with-mysqld-user=mysql --with-plugins=innobase --prefix=/usr/local/mysql-5.1.41

ワーニング出力なしで通った。

っで続き、今までは

create table hogehoge(
hogehoge text
hogehoge2 int


) type=Innodb;

で指定したが、これもワーニングが出る

Query OK, 0 rows affected, 1 warning と返るので

show warnings で確認したら

The syntax 'TYPE=storage_engine' is deprecated and will be removed in MySQL 6.0. Please use 'ENGINE=storage_engine' instead

ゴルァ type=storage_engine なんてオプション使うんじゃねーよ
これから先オメーらは engine=storage_engine って指定するんじゃボケェ
って言われてます(※脚色してます。)

ここは素直に

create table hogehoge(
hogehoge text
hogehoge2 int


) engine=Innodb;

と指定しましょう。

次回からこのオプションを指定していく感じ。

mysql 5.1 インストール

2009年01月18日 13時55分10秒 | Mysql
mysql 5.1 インストール
(シシンデラのインストールなんだけどね)

googlecode に手順載ってる通りにすすめる

cd /home
svn checkout http://cicindela2.googlecode.com/svn/trunk/ cicindela

でこれで/homeディレクトリにcicindelaってディレクトリが出来た

グループとユーザーを適当に作成

groupadd mysql
useradd -g mysql mysql

(もちろんログインとかしないんだったら
useradd -g mysql -s /sbin/nologin mysql とかのオプションを
適当につけて。)

mysql 5.1のソースコードをダウンロードする。
以下ページより

http://dev.mysql.com/downloads/mysql/5.1.html

ここのSourceってのを持ってくるrpmでも良いのかも知れないけど、
ソースの方が細かい設定できる気がする。
(もちろん個人的な主観で妄想的なことは十分承知)

※なんか登録させられるけど適当に入れて。
mysql-5.1.30.tar.gzをダウンロード

/usr/local/srcに配置

cd /usr/local/src

tar xvzf mysql-5.1.30.tar.gz

cd mysql-5.1.30

./configure --with-charset=utf8 --with-extra-charsets=all --with-mysqld-user=mysql --with-innodb --prefix=/usr/local/mysql-5.1.30
(--with-innodbとかつけないと、innodb関連のオプションを設定ファイルに書くと
そんなオプションしらねーよとか言われる。)

make all
make install

シンボリックリンク作成
ln -s /usr/local/mysql-5.1.30/ /usr/local/mysql

ライブラリを登録
echo /usr/local/mysql/lib/mysql > /etc/ld.so.conf.d/mysql.conf
ldconfig

起動スクリプトコピー
cp /usr/local/mysql/share/mysql/mysql.server /etc/init.d/mysql

mysqlの設定
ln -s /home/cicindela/etc/mysql/my.cnf /usr/local/mysql/my.cnf

DB初期化
/usr/local/mysql/bin/mysql_install_db --user=mysql

起動
/etc/ini.d/mysql start
Starting MySQL.............. [ OK ]
と出ればmysqlに関しては終了。

シシンデラを使うには続きがある。

perlモジュールのインストールCPAN経由
perl -MCPAN -e "install DBI; install DBD::mysql; install Ima::DBI;install Time::Piece; install Log::Log4perl;install Module::Pluggable; install Class::Singleton;"

初期設定が出来てないと色々と聞かれるので
Are you ready for manual configuration? [yes] とか出たら
思い切ってNoと答えてみるw
あっ自動でやってくれるのね♪便利ですCPAN。

次apache + mod_perlのインストール
http://httpd.apache.org/download.cgiからダウンロードできる。
(いつのまにかapacheも2.2系まででてるな~。
でもよくわかんねーから。1.3系使います。
うごくのか? apache 1.3+ mod_perl 1.0系で・・・・w)

apacheは何度もインストールしてるから判らなければココをみてくれ。
http://blog.goo.ne.jp/hirohito_japan/m/200807
(sslの手順だけ省けば出来るでしょ。
そろそろ同じことを書くのは面倒になってきたw)

mod_perlのインストール
http://perl.apache.org/download/index.htmlここから
1.0系の方をダウンロードして。

/usr/local/srcに配置

cd /usr/local/src

tar xvzf mod_perl-1.0-current.tar.gz

cd mod_perl-1.30

perl Makefile.PL USE_APXS=1 WITH_APXS=/usr/local/apache/bin/apxs EVERYTHING=1

make all
make install

でmod_perlは完了。

試しに

/usr/local/apache/bin/apachectl start

でエラー無く起動することを確認。

/usr/local/apache/bin/apachectl stop

次、daemontoolsのインストール
googlecodeより

※daemon tools は,入力バッファをフラッシュしたり,定期的に新しいデータで中間集計テーブルを再計算させるために使います。従って,新たなデータが次々に入ってこない場合 ( Demos の例など,固定のデータセットを読み込ませて結果を見るだけの場合など) はこのステップをスキップしても問題ありません。

って書いてあるから次々にデータが入ってくるから入れないと困るんだな。

daemontoolsインストール
http://cr.yp.to/daemontools/install.htmlココから

cd ./admin/daemontools-0.76

./package/install

・・・・・・なんかエラー出たw
教えてグーグル大先生!!!!
パッチが出てるらしいじゃあーりませんか。

wget http://qmail.org/moni.csi.hu/pub/glibc-2.3.1/daemontools-0.76.errno.patch

patch -p1 <daemontools-0.76.errno.patch ./package/install

ココまでOKで
分析用のメインバッチのシンボリックリンク作成
ln -s /home/cicindela/etc/service/cicindela_batch /service/cicindela_batch

データ挿入用バッファをフラッシュするバッチのシンボリックリンク作成
ln -s /home/cicindela/etc/service/cicindela_flush_buffers /service/cicindela_flush_buffers

コレでインストールはOK

で、

cd /home/cicindela/misc

perl create_init_sql.pl --db_name=test_recommend | /usr/local/mysql/bin/mysql -uroot

でテスト用のDBを作成

vi /home/cicindela/lib/Cicindela/Config/_common.pm

$C{DEFAULT_DATASOURCE} = [ 'dbi:mysql:cicindela;host=localhost', 'cicindela', 'japana' ];

の記述を

$C{DEFAULT_DATASOURCE} = [ 'dbi:mysql:test_recommend;host=localhost', 'root', '' ];

に変更して保存

でapache起動

http://localhost/cicindela/record?set=item&op=insert_pick&user_id=1&item_id=1

でアクセスしてみる。.....

なにも反応なし。

ログを確認すると
WARN: Can't connect to data source 'HASH(0x89f79f0)' because I can't
work out what driver to use (it doesn't seem to contain a 'dbi:driver:' prefix and the DB
I_DRIVER env var is not set) at /usr/lib/perl5/site_perl/5.8.8/Ima/DBI.pm line 328
となっている。

google大先生に聞いてみた

http://localhost/cicindela/record?set=item&op=insert_pick&user_id=1&item_id=1
のURLのset=itemと言うパラメータが鍵で、
set=xxxのxxxのフィルタを

cicindela/lib/Cicindela/Config/_common.pmに登録しないとならないらしい。
面倒なのでclip_simpleの記述をコピーしてclip_simpleをitemに変更。

再度アクセス。
またログを確認するとエラーが・・・・
Perhaps the DBD::mysql perl module hasn't been fully installed,
なんかDBDのモジュールが完全にインストールされてねーよ
って言われてるのか?

仕方無いので 再度 perl -MCPAN -e shell
> install DBD::mysqlでインストール

なんかエラー出てるしw コレが原因か。
ln -s /usr/local/mysql/bin/mysql_config /usr/local/bin/mysql_config
で解消できた。

再度アクセス

おお。ログにエラーなし。データが登録されたのかな?

/usr/local/mysql/bin/mysql -uroot -p test_recommend

mysql> select * from picks;

おぉ入ってるじゃありませんかー 一応成功ですです。
でもぉ~ user_id と item_idは番号ではないのですよー

フィルタ定義を以下のように書くと user_id item_id共に数値以外でも
変換してくれる模様

'item' => {
datasource => [ 'dbi:mysql:test_recommend;host=localhost', 'root', '' ],
filters => [
[ 'PicksExtractor', { interval => '1 year' } ],
'InverseUserFrequency',
'ItemSimilarities',
],

# user_id item_idが番号以外
use_user_char_id => 1,
use_item_char_id => 1,

# レコメンドフィルタにItemSimilaritiesを使う設定かな?
recommender => 'ItemSimilarities',
calculation_track => 1,

# 10分毎にレコメンドを再計算
refresh_interval => 10 * 60 * 1,
},

あとはテストデータを放り込んでいくだけ。

以下テーブル一覧だけど。

categories
categories_buffer
item_id_char2int
last_processed
picks
picks_buffer
ratings
ratings_buffer
tagged_relations
tagged_relations_buffer
uninterested
uninterested_buffer
user_id_char2int

う~んpicksにはデータが入るが、extracted_picks も item_similarities_online
も出来ない・・・・・

ログを見ると
WARN: prepare_cached(desc picks_buffer) statement handle DBIx::ContextualFetch::st=HASH(0x8b910dc) still Active at /usr/lib/perl5/site_perl/5.8.8/Ima/DBI.pm line 398

なんかワーニングでてまっせ大先生。

/usr/lib/perl5/site_perl/5.8.8/Ima/DBI.pmを編集

sub _mk_sql_closure の中
? $dbh->prepare_cached($sql)を
? $dbh->prepare_cached($sql,undef,3)に変更

ワーニングはコレで解消された。
それでもでないw 何が悪いのか。。。

良くわからないけど、フィルタを登録しなおしたら
出た。

'item' => {
datasource => [ 'dbi:mysql:test_recommend;host=localhost', 'root', '' ],

filters => [
'PicksExtractor',
'InverseUserFrequency',
'ItemSimilarities',
],

use_user_char_id => 1,
use_item_char_id => 1,

recommender => 'ItemSimilarities',
refresh_interval => 10 * 60 * 1,

},

OKトニー

あとは実装されてるフィルタが何かとか、
この場面ではどのフィルタが有効だとか、
そうゆうことが判ればイケる。

シシンデラ

2009年01月16日 18時59分00秒 | Mysql
シシンデラ

ライブドアのレコメンドエンジン(シシンデラ)Cicindela
面白そうだし、便利そうだから使ってみようかと。

apache + perl + mysqlの組み合わせ

perlとmysqlは初めて
(適当に遊ぶことはあっても本気で作ることは無いな~)

ライブドア+perlは有名だけど。
(Sledge(スレッジ)とか。でもあんまりperl良く知らね)

次はmysqlのインストールになる予感。