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',(略))>
サーバの環境構築メモ
- MySQL をインストールする。
# apt-get install mysql-server
- my.confを設定する(最近は設定しなくてもInnoDBがデフォルトになっているようです)。
[mysqld] character-set-server = utf8mb4 collation-server = utf8mb4_general_ci default-storage-engine=InnoDB
- MySQL デーモンを起動する。
# /etc/init.d/mysqld start
- MySQL に接続する。
# mysql -u root # mysql -u root -p ←パスワード指定あり
- 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コンソールで rootパスワード を設定する
use mysql; select host,user,authentication_string,plugin from user; ALTER USER root@localhost IDENTIFIED BY 'ROOT-PASS';
もし、pluginが「auth_socket」になっていた場合、rootアカウント以外ではログインできない(パスワード設定しても無効)。この場合は、pluginを変更することもできる。
# MariaDB ALTER USER root@localhost IDENTIFIED WITH mysql_native_password; ALTER USER root@localhost IDENTIFIED WITH mysql_native_password BY 'ROOT-PASS'; # MySQL ALTER USER root@localhost IDENTIFIED WITH caching_sha2_password; ALTER USER root@localhost IDENTIFIED WITH caching_sha2_password BY 'ROOT-PASS';
メモ
show tables; show databases; show variables like 'char%'; show create table TABLE_NAME; show indexes from TABLE_NAME; SELECT table_name,engine FROM information_schema.tables WHERE table_schema = 'DB NAME'; SELECT user,host,password FROM mysql.user;