MySQL/MariaDBでの運用

以下を踏まえた上でご利用ください。

  • 外部DB運用はDBモジュールロードに時間がかかります。先に高速動作を設定してください。
  • 標準のText-DBは、よほど多くの記事を扱わない限り十分なパフォーマンスがあります。
  • DBエンジンは InnoDB をご利用ください(MyISAMは非推奨です)。

DebianのMySQLがMariaDBに置き換わったので、現在はMariaDBでのみ動作確認を行っています。

準備

adiaryをインストールするサーバに、MySQLのクライアントライブラリ(DBD::mysql)をインストールしてください。

# apt-get install libdbd-mysql-perl

設定

まずMySQLに、adiary用のアカウントと、そのアカウントからフルアクセス可能なデータベースを作成してください。

その際、データベースの文字コード(やクライアントコード)はutf8で統一してください

次に adiary.conf.cgiを設定します。

# テキストDBの場合
#<$DB = loadpm('DB_text', "<@data_dir>db/")>	←コメントアウト

# MySQL の場合(データベース名、ユーザー名、パスワード)
<$DB = loadpm('DB_mysql', 'database=adiary', 'adiary', 'test', {Pool=>1})>

ローカル以外のMySQLサーバに接続する場合のサンプル。

<$DB = loadpm('DB_mysql', 'database=adiary;host=mysql.example.com', (略))>
<$DB = loadpm('DB_mysql', 'database=adiary;port=12345',(略))>
<$DB = loadpm('DB_mysql', 'database=adiary;host=10.45.67.89;port=12345',(略))>

サーバの環境構築メモ

  1. MySQL をインストールする。
    # apt-get install mysql-server
    
  2. my.confを設定する(最近は設定しなくてもInnoDBがデフォルトになっているようです)。
    [mysqld]
    character-set-server  = utf8mb4
    collation-server      = utf8mb4_general_ci
    
    default-storage-engine=InnoDB
    
  3. MySQL デーモンを起動する。
    # /etc/init.d/mysqld start
    
  4. MySQL に接続する。
    # mysql -u root
    # mysql -u root -p	←パスワード指定あり
    
  5. MySQLコンソールで rootパスワード を設定する
    mysql> use mysql;
    mysql> select host,user,password from user;			←確認
    mysql> select host,user,authentication_string from user;	←MySQL 8
    mysql> ALTER USER root@localhost IDENTIFIED BY 'ROOT-PASS';
    
  6. adiary用のデータベース、ユーザーを作成
    mysql> CREATE DATABASE adiary DEFAULT CHARSET=utf8mb4;
    mysql> CREATE USER adiary@localhost IDENTIFIED BY 'ADIARY-PASS';
    mysql> GRANT all privileges ON adiary.* TO adiary@localhost;
    

メモ

mysql> show tables;
mysql> show databases;
mysql> show variables like 'char%';
mysql> show create table TABLE_NAME;
mysql> show indexes from TABLE_NAME;
mysql> SELECT table_name,engine FROM information_schema.tables WHERE table_schema = 'DB NAME';
mysql> SELECT user,host,password FROM mysql.user;