データベース
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
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
画像登録に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でバックアップも出来るのですが、
まずは、定義を保存してみます。
# /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
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
・クラス内のメンバーは、$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のコマンド群で
/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
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
mysqlのtimestampは自動で更新されるものと思っていましたが、MaxDBモードだと
datetimeと同じで更新はされないそうです。
MaxDBとは?
簡単に言うとエンタープライズ機能を搭載したMySQL。
ストアドプロシージャ、
トリガーなども使えるそうです。
2006-06-07 16:16:03