ブログシステム - BLOG.BBTUNE.COM -

データベース

tritonn mysql+senna

http://qwik.jp/tritonn/

すでにmysqlもsennaも入れていましたが、

MySQL-client-5.0.67-tritonn.1.0.12.i386.rpm
MySQL-devel-5.0.67-tritonn.1.0.12.i386.rpm
MySQL-server-5.0.67-tritonn.1.0.12.i386.rpm
MySQL-shared-5.0.67-tritonn.1.0.12.i386.rpm
mecab-ipadic-2.7.0.20070801-tritonn.1.0.12.i386.rpm
senna-1.1.4-tritonn.1.0.12.i386.rpm
mecab-0.97-tritonn.1.0.12.i386.rpm

rpm -Uvh *

ですべて入れてみる。

特に問題なく
/etc/rc.d/init.d/mysql start
で起動

テストdatabaseで確認
http://qwik.jp/tritonn/userguide.html

# mysql -u root test
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.0.67-modified MySQL Community Server (GPL) (portions (c) Tritonn Project)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> show tables;
Empty set (0.00 sec)

mysql> CREATE TABLE t1 (c1 TEXT, FULLTEXT INDEX ft USING NGRAM (c1)) ENGINE = MyISAM DEFAULT CHARSET utf8;
Query OK, 0 rows affected (0.02 sec)

mysql> SHOW SENNA STATUS\G
*************************** 1. row ***************************
Table: t1
Key_name: ft
Column_name: c1
Encoding: utf8
Index_type: NGRAM
Sectionalize: OFF
Normalize: ON
Split_alpha: OFF
Split_digit: OFF
Split_symbol: OFF
Initial_n_segments: 512
Senna_keys_size: 0
Senna_keys_file_size: 4268032
Senna_lexicon_size: 0
Senna_lexicon_file_size: 4268032
Senna_inv_seg_size: 167936
Senna_inv_chunk_size: 135168
1 row in set (0.01 sec)

mysql> INSERT INTO t1 VALUES ("すもももももももものうち");
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO t1 VALUES ("生麦生米生卵");
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO t1 VALUES ("東京特許許可局");
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM t1 WHERE MATCH(c1) AGAINST("特許");
+-----------------------+
| c1 |
+-----------------------+
| 東京特許許可局 |
+-----------------------+
1 row in set (0.00 sec)

mysql>

いちを大丈夫そうです。
2009-05-03 22:41:14

[pgpool] php (sql) エラーの話。

php -> pgpool -> postgresql

と普通のあれですが、

SQLが間違えていたりしたときのエラーだと大丈夫なのかな?

$stmt = $this->dbh->prepare( self::check_sql );
$stmt->bindParam(':user_id',$user_id);
if( $stmt->execute() ){

まぁこんな感じでPDOを使って、excute した時に、bindParamの数が間違えていたら、apache のプロセスが落ちました。

pgpoolなしだったら普通に Exception を catch 出来るのですが。
まぁ仕方ないようで。

当然ですが、テストサーバでテスト用のDBで切り離してからのほうが良さそうですね。

pgpool を通してテストしていたのですが、まさか落ちるとは思ってませんでした。
2007-07-27 02:44:24

[pgpool]pgpool2を導入してみました!

画像登録にOIDを利用していたので失敗しました。。。

oid は使わないほうが良さそうです。

http://pgpool.sraoss.jp/
pgpool-IIのチュートリアルを読むとそのまま使えます。

・同期レプリケーション
・ロードバランス負荷分散(SELECT)

が出来るのでとてもいいですね。

インストールは簡単です。
が一箇所エラーが出たので
チュートリアルにも書いてありますが、postgresql-develを入れると大丈夫です。

$ ./configure

configure: error: libpq is not installed or libpq is old

libpq.so.4.1とかはあるけど?
ヘッダファイルやlibpq.aがないとダメっぽい。

# yum install postgresql-devel
# yum update postgresql-*

make
make install
で問題なく

設定も簡単でした。

pgpool.conf
listen_addresses = '*'
port = 9111
replication_mode = true
load_balance_mode = true

backend_hostname0 = '192.168.234.198'
backend_port0 = 5432
backend_weight0 = 1

backend_hostname1 = '192.168.234.199'
backend_port1 = 5432
backend_weight1 = 1

変えたのはこれだけです。

postgresql を外部からつなげる様に設定するだけです。

// data/pg_hba.conf

# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
host all all 192.168.234.0/24 trust

// data/postgresql.conf

listen_addresses = '*'

あとは、iptables で postgresql と pgpoolのポートを自分のネットワークでつなげるようにするだけ!

! 起動
# pgpool > /tmp/pg.log 2>&1
! 終了
# pgpool stop

問題ないです。

ひとまず、同期バックアップが出来るので落ちたとき安心?です。


-----A----- -----B-----
- httpd - (httpd)

- [A]pgpool -
↓ 同期・分散 ↓
- postgres - postgres
----------- -----------
こんな感じで[A]だけpgpoolが動いています。

まだhttp部分は分散されていないので、
httpdを[A]で動かした場合は、Bが落ちてもBのpostgresqlは無視するので大丈夫そうです。
[A]が落ちても大丈夫なように[B]でもpgpoolをすぐ動かせるようにしておきます。
[A]が落ちたら、[B]へhttpdとpgpoolを切り替えるだけでOKです。

データが同期しているというだけでも相当なことです。

次に、pound で httpdも分散してみたいと思います。




□問題あったのは・・・
OID と データ移行です。
元のデータをただコピーしても上手く行かないというか
OIDを使ってなければ特に問題ありませんが・・・
2007-07-26 08:00:15

pg_dump で スキーマ保存。

pg_dumpでバックアップも出来るのですが、


まずは、定義を保存してみます。

# /usr/local/pgsql/bin/pg_dump -s -u drdb > drdb_dump
User name: user
Password:

-s はスキーマ (定義)だけ抽出
-u はユーザ認証する。

データも全部SQLで取るには
-d

データのみは
-a

これでテーブルやビューなど、すべて保存できるので
簡単に複製できます。
2007-06-23 02:46:16

OID ラージオブジェクト

PDO_PGSQL DSN
PDO:: pgsqlLOBCreate
PDO:: pgsqlLOBOpen
PDO:: pgsqlLOBUnlink

PDOでそのまま使えるのかと思ったら、pgsql 特有のLOB関数を使わないといけなかった。。。
2007-05-26 03:44:15

画像をデータベースに入れるべきか?

わかりません。。。
パフォーマンスが落ちなければ問題ないとは思いますが。

◎部分としては、管理のしやすさです。
バックアップ、りかばリをデータと一括でできると。

今までは別でやってきましたが試しに一緒に入れてみます。
ただ、キャッシュ機能的な使い方をするので、その分HDD領域は倍使うと考えられます。

どうなるでしょうか?

オラクルの解説。
データベースに画像を格納するメリット
http://otndnld.oracle.co.jp/products/database/orac・・・
まぁオラクルを使わないので、どれほどのパフォーマンスかはあれですが。
利点としては、これ以外にないといったところでしょうか
2007-05-26 02:53:35

PHP5 Class PDO

・クラス内のメンバーは、$this-> が付いていないとその関数ないの変数と判断されてしまう!

・PDOクラス、PDOStatment の errorInfo errorCode が取れない・・・
SQLが間違っていたんだけど、何が間違っているのか分からない。。。

Postgresql 用のDNS
pgsql:host=localhost port=5432 dbname=dash user=jun password=sure
こんな感じ。

MySQL
mysql:host=localhost,dbname=dash,
みたいな感じ。

違うので注意。
2007-05-16 18:48:05

Postgresql 新規ユーザ&パスワード設定

Postgresqlのコマンド群で
/usr/local/pgsql/bin

postgresになっておく
# su postgres

ユーザを作成
# createuser junx
Shall the new role be a superuser? (y/n) y


psql を利用して、パスワードを設定。
$ ./psql
Welcome to psql 8.2.3, the PostgreSQL interactive terminal.

Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit

postgres=# alter user junx password \'xxxx\';
ALTER ROLE
postgres=# \q
2007-05-16 16:51:48

PDO PHP Database Object を使ってみる。

http://jp2.php.net/manual/ja/ref.pdo.php
インストールでの設定。

./configure --with-apxs2 --enable-force-cgi-redirect --enable-zend-multibyte --enable-mbstring --enable-mbstring --enable-mbsrt-enc-trans --enable-mbregex --enable-trans-sid --with-dbx=shared
--enable-sqlite-utff8
--with-sqlite=shared
--with-pgsql=/usr/local/pgsql
--with-mysql=/usr/local/lib/mysql
--enable-pdo=shared
--with-pdo-sqlite=shared
--with-pdo-mysql=shared
--with-pdo-pgsql=shared
--with-openssl=/usr --with-soap=yes --with-zlib=/usr --with-gd=/usr/local --with-jpeg-dir=/usr --with-freetype-dir=/usr --with-ttf --with-png-dir=/usr --with-curl --enable-calendar

コンフィグにPDO関連を追加した。
sharedにしている場合は、.soを php.ini に追加する必要がある。
extension=pdo.so
extension=pdo_mysql.so
extension=pdo_pgsql.so
extension=pdo_sqlite.so
こんな感じで。

実際に動くか確認。

try {
$user = \"ahoho\";
$pass = \"uhoho\";
$dbh = new PDO(\'mysql:host=localhost;dbname=mydb\', $user, $pass);
foreach ($dbh->query(\'SELECT * from item_table\') as $row) {
print_r($row);
}
$dbh = null;
} catch (PDOException $e) {
print \"エラー!: \" . $e->getMessage() . \"
\";
die();
}


インストールは成功。
2007-05-15 12:59:26

timestampとMaxDB モード

mysqlのtimestampは自動で更新されるものと思っていましたが、MaxDBモードだと
datetimeと同じで更新はされないそうです。

MaxDBとは?
簡単に言うとエンタープライズ機能を搭載したMySQL。
ストアドプロシージャトリガーなども使えるそうです。
2006-06-07 16:16:03
引越
Google Android
S11HT emonster
windows mobile
silverlight
podcast
apple
ssh
Perl
samba ファイルサーバ
ludia
pound
High Availavility高可用性
pgpool
Google Maps API
Ruby
Postfix
プロバイダー
javascript
PostgreSQL
システム監査
HDD換装
時計
Felica
C#
携帯用サイト作成関連
ネットワーク
XML + XSLT
W-ZERO3 willcom
MySQL
さくらの専用サーバ
ブログ関連
Apache
サーバー管理
情報処理試験
データベース
PHP
Unix-Linux
動画関連メモ
人気商品情報
アマゾン関連
追加機能予定
システムメモ

データベース 記事一覧
tritonn mysql+senna
[pgpool] php (sql) エラーの話。
[pgpool]pgpool2を導入してみました!
pg_dump で スキーマ保存。
OID ラージオブジェクト
画像をデータベースに入れるべきか?
PHP5 Class PDO
Postgresql 新規ユーザ&パスワード設定
PDO PHP Database Object を使ってみる。
timestampとMaxDB モード
phpmyadmin
表明 / CHECK ASSERTION X CHECK (condition)
第4正規形と多値従属
SQLの基本。総まとめ。
データベース。絶対出る問題。
第三正規形とボイスコッド正規形の違い。
概念データモデル:E-R図
集合関数が使えない場所。
相関副問合せ。と EXISTS
冗長と繰り返し。