MySQLでの運用
MySQLで運用する場合は、adiary.conf.cgiを次のように書き換えます。
# 擬似データベースの場合 #<$DB = loadpm('DB_pseudo', "<@data_dir>db/")> ←コメントアウト # MySQL の場合(データベース名、ユーザー名、パスワード) <$DB = loadpm('DB_mysql', 'database=adiary', 'adiary', 'test', 1.connection_pool, 'ujis')> ↑有効にする
UTF-8版を利用している場合は、最後が ujis ではなく utf8 になります。
本来的にはデータベース文字コードを運用文字コードと一致させてください。そうしないと、データにアクセスする度に文字コード変換処理が発生してしまいます*1。
MySQLの文字コードの設定は文字化け問題を本気で直すが大変参考になります。
ローカル以外のMySQLに接続する場合
database=adiary の部分を次のように書き換えます。
<$DB = loadpm('DB_mysql', 'database=adiary;host=mysql.db-net.tld', (略))> <$DB = loadpm('DB_mysql', 'database=adiary;port=12345',(略))> <$DB = loadpm('DB_mysql', 'database=adiary;host=10.45.67.89;port=12345',(略))>
コロン「":"」ではなくセミコロン「";"」です。ご注意ください。
環境設定メモ
コマンドはFedora Core を例に書かれています。各ディストリビューションによって適時読み替えてください。
- MySQL をインストールする。DBI, DBD::mysql もインストール。(4.1でテスト済)
console~$ yum -y install mysql-server perl-DBD-MySQL
- データベースを初期化。最近のディストリビューションはデーモンを起動すれば勝手に作成してくれます。
- MySQL デーモンを起動する。
console~$ /etc/init.d/mysqld start
- MySQL に接続する。
console~$ mysql -u root console~$ mysql -u root -p ←パスワード指定あり
- MySQLコンソールで rootパスワード を設定する
mysql> use mysql; mysql> select host,user,password from user; ←確認 mysql> SET PASSWORD FOR root@localhost=PASSWORD('password'); mysql> SET PASSWORD FOR root@your.host=PASSWORD('password'); mysql> DELETE FROM user WHERE password='';
- adiary用のデータベース、ユーザーを作成
mysql> CREATE DATABASE adiary DEFAULT CHARSET=ujis; mysql> GRANT all privileges ON adiary.* TO adiary@localhost IDENTIFIED BY 'password';
メモ
コマンドのメモ
mysql> show tables; mysql> show databases; mysql> show variables like 'char%'; mysql> show create table table_name;
[mysqld] default-character-set=ujis # MySQL 4.1.15/5.0.13以降 skip-character-set-client-handshake [client] default-character-set=ujis [mysql] default-character-set=ujis [mysqldump] default-character-set=ujis
adiary Ver2.23以前での注意
MySQLのバージョンによって全く動作しない(記事が書き込めない)ようです。
lib/Satsuki/DB_mysql_auto.pm に以下の修正を加えるか、Ver 2.24以降にアップグレードしてください。
(変更前) $sth = $dbh->prepare("SELECT * FROM $table WHERE pkey IS NULL"); (変更後) $sth = $dbh->prepare("SELECT LAST_INSERT_ID()");