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の文字コードの設定は文字化け問題を本気で直すが大変参考になります。

*1 : 利用する分にはまったく分かりませんが確実にアクセスが遅くなります

ローカル以外の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 を例に書かれています。各ディストリビューションによって適時読み替えてください。

  1. MySQL をインストールする。DBI, DBD::mysql もインストール。(4.1でテスト済)
    console~$ yum -y install mysql-server perl-DBD-MySQL
    
  2. データベースを初期化。最近のディストリビューションはデーモンを起動すれば勝手に作成してくれます。
  3. MySQL デーモンを起動する。
    console~$ /etc/init.d/mysqld start
    
  4. MySQL に接続する。
    console~$ mysql -u root
    console~$ mysql -u root -p	←パスワード指定あり
    
  5. 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='';
    
  6. 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以前での注意 2012/08/07

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()");