Love澤's Room

技術系ネタをまとめていたブログ。現在はカテゴリにこだわらず更新中。

PHPでSESSIONの有効期限を設定する方法

新サイトへ移転しました
約3秒後に自動的にリダイレクトします。


練習としてあるwebサービスを実装中なのだが、SESSIONを利用して、ログインしている人の情報(ログイン名とか)を保持するようなしくみを組み込んだ。
その際、SESSIONの有効期限などは特に意識していなかったが、どこかのサイトで「何も設定していない場合は24分で期限がきれますよ」的なことが書いてあった。

が、しかし、なぜか一晩放置してもSESSIONの有効期限が切れないという状況になっていたので、今回はSESSIONの有効期限を設定した。
参考サイトによると、php.iniファイルに記述する方法と.htaccessファイルに記述する方法があるらしい。

php.iniファイルをfindで検索してみたが見つからなかったので、Webサービスのトップノードにある.htaccessファイルに以下を記述することで対応した。

php_value session.gc_maxlifetime 900
php_value session.gc_probability 1
php_value session.gc_divisor 10

gc_maxlifetimeがSESSIONの有効期限を設定する変数だそう。秒で指定する。
今回は15分=900秒を設定した。普通は30分とかを設定するっぽいが、今回はとくに深い理由があるわけではない。

gc_probabilityとgc_divisorは、SESSIONを管理しているファイルを削除する頻度を設定するもの。というのも、誰かがSESSIONを発行するたびに、サーバー内部で、SESSIONファイルなるものがその都度作成されるらしい。ほっといたらサーバーの容量を圧迫するので、それを避けるために、SESSIONが発行されたら古いSESSIONファイルを削除する機能(ガーベージコレクタ)を呼び出してお掃除しているそうだ。とはいえ、毎回ガーベージコレクタを起動していても無駄じゃね?ということで、適当なタイミングでお掃除しよう、ということらしい。
今回は、gc_probability / gc_divisor = 1/10 つまり、10回に1回くらいはお掃除する設定にした。普通は1/100とか1/1000くらいにしておくらしい。

(参考サイト)

MariaDB(MySQL)でカラムコメントを追加・確認する方法

新サイトへ移転しました
約3秒後に自動的にリダイレクトします。


テーブル追加時に以下のようにコメントを書くことができる。

MariaDB [test_db]> create table test_table (
    -> id int not null primary key auto_increment,
    -> name varchar(20) not null,
    -> birthday date comment '誕生日'
    -> );
Query OK, 0 rows affected (0.20 sec)

このとき、comment文で書いたコメントを確認する場合、以下の方法で確認することが出来る。

MariaDB [test_db]> show full columns from test_table;
+----------+-------------+-----------------+------+-----+---------+----------------+---------------------------------+-----------+
| Field    | Type        | Collation       | Null | Key | Default | Extra          | Privileges                      | Comment   |
+----------+-------------+-----------------+------+-----+---------+----------------+---------------------------------+-----------+
| id       | int(11)     | NULL            | NO   | PRI | NULL    | auto_increment | select,insert,update,references |           |
| name     | varchar(20) | utf8_general_ci | NO   |     | NULL    |                | select,insert,update,references |           |
| birthday | date        | NULL            | YES  |     | NULL    |                | select,insert,update,references | 誕生日    |
+----------+-------------+-----------------+------+-----+---------+----------------+---------------------------------+-----------+
3 rows in set (0.00 sec)

Webサービスで、ある素材を利用しつつ、素材へのアクセス制限をかける方法(htaccessを利用)

新サイトへ移転しました
約3秒後に自動的にリダイレクトします。


htaccessを用いることで、ファイルにアクセス制限をかけることが出来ます。

今回目標とするのは
「あるサービス内で色々な素材を使うが、その素材自体にはアクセス出来ないようにする」
です。ベーシック認証などの話ではないのでご注意下さい。うだうだ書いていますので結局どうしたら良いのかさっさと知りたい、という方は、記事の最後の方に飛んで下さい。

素材自体にアクセス出来ないようにする方法

素材とそのディレクトリにアクセス制限をかける方法として

  1. そもそも、素材置き場をpublic_html以下ではないどこか別のディレクトリに置く
  2. .htaccessを利用してアクセス制限をかける

といったことが考えられました。

もちろん前者が確実なのでしょうが、もろもろの都合により、どうしてもpublic_html以下に素材を置かなければいけないこともあるかと思います。そういった場合もあるかと思ったので、今回は前者「.htaccessを利用してアクセス制限をかける」ということを試みました。

なお、今回はファイル構成が以下のようになっているとして話を進めます。

  • public_html
    • material_search.php
    • materialディレクトリ
      • creator1ディレクトリ
        • image1.png
        • image2.gif
      • creator2ディレクトリ
        • image3.pdf
        • image4.jpg

materialディレクトリ以下へのアクセスを全て拒否する場合

単に、素材置場(materialディレクトリ)以下の全てのファイル・ディレクトリへのアクセスを拒否したい場合は非常に簡単です。materialディレクトリに.htaccessファイルを作成し、以下のように記述します。

deny from all

しかしこの場合、サービス内で素材を利用したい場合にも利用できなくなります。つまり、material_search.phpでの検索結果、素材を表示する際にも、アクセスできなくなってしまう、ということです。(自分の設定の問題かもしれませんが。)

今回の目標としては、サービス内では素材を利用できるようにしたいので、このままではだめです。

サービス内で素材を利用しつつ、素材へのアクセス制限をかける

そこで、.htaccessファイルを以下のように書き換えます。

SetEnvIf Referer "^http://hogehoge.com" ShowOK
order deny,allow
deny from all
allow from env=ShowOK

1行目の意味ですが、参考サイトによると

「SetEnvIf」とは、「ある条件が成立した場合に環境変数を設定する」という意味です。
上記の場合は、

  • Referer(参照元)に
  • http://hogehoge.com」という文字列が含まれていた場合に
  • 環境変数に「ShowOK」を設定する

という意味になります。

ということだそうです(『「~」という文字列が』の部分のURLだけ書き換えています)。

以上のようにすることで、例えば、外部サイトからリンクをたどってきたの場合は「http://hogehoge.com」の部分の値が変わるので、ShowOKとならず、また、素材へのURLを直接入力する場合は、Refererの値がないので、ShowOKとなりません。

また、参考サイトで、URLを記述する際の注意点が挙げられています。

  • URLを記述する際には、「 . 」(ドット)は「 \. 」のように円記号(=バックスラッシュ)を前に加えて下さい。 これは、正規表現という記述方法を使っているための仕様です。(※半角文字で記述)
  • また、URLは必ず「http://」から書き、先頭には半角で「 ^ 」(ハット)記号を加えて下さい。 これらを省略しても動作はしますが、省略すると、リンク元ページに少し工夫をするだけでアクセス制限を突破されてしまいます。
  • URLの先頭に「www」がある場合、「www」を省略しても同じページにアクセスできる場合があります。 (例えば、http://www.example.com/ でも http://example.com/ でもアクセスできるなど。) その場合は、両方のURLを記述しておきましょう。

※許可したいURLが複数ある場合は、この行を複数回列挙します。

というわけで、長々となりましたが、以上のようにすることで、冒頭に上げた目標を達成することが出来ます。

(参考サイト)
直リンクを防ぐには?…禁止と言っても無駄 [ホームページ作成] All About

MariaDB 10.0.12でDynamic Columns(動的カラム)を試してみた

新サイトへ移転しました
約3秒後に自動的にリダイレクトします。


MariaDBではDynamic Columnsなるものが実装されている。version 5.3から新たに導入されたもののようだ。

Dynamic Columns - MariaDB Knowledge Baseより

MariaDB starting with 5.3
Dynamic columns first appeared in MariaDB-5.3

「MariaDB Dynamic Columns」でぐぐってみたけど、日本語のページがほとんどHITしなかったのでちょっとかいてみる。(実は既にあったりして。。)>>(追記:もうちょっとぐぐったら、すぐ見つかった。結構たくさん。お恥ずかしい。。

今回の記事は、実際にMariaDBでDynamic Columnsを使ってみた過程をそのまま載せています。後日またまとめる予定ですが、長いのであしからず。
最後の方に、動的カラムからJSON形式でデータを得る方法(といっても超簡単)を載せています。そちらが目当ての方は最下部へどうぞ。

◯テーブル作成

「blob」と指定することで、カラムの追加・削除などが動的に行えるようになる。

MariaDB [test_db]> create table assets(
    -> item_name varchar(32) primary key,
    -> dynamic_cols blob
    -> );
Query OK, 0 rows affected (0.20 sec)

ちなみに、blobってどういう意味だろうと思ってALCさんに尋ねたら「輪郭がぼやけているもの、おぼろげなもの、フニャフニャした物体[生き物]」「〈俗〉でぶ、丸ぽちゃ、ふとっちょ」といった意味があるようだ(ALCで調べました)。

さっそくフィールドの制約などを確認してみる。

MariaDB [test_db]> show fields from assets;
+--------------+-------------+------+-----+---------+-------+
| Field        | Type        | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| item_name    | varchar(32) | NO   | PRI | NULL    |       |
| dynamic_cols | blob        | YES  |     | NULL    |       |
+--------------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

おー、Typeがblobになってる(そりゃそうだ。)

◯テーブルに追加

動的カラムにデータをつかするには以下のようにする。以下の例は、2つの動的カラム(color=blue, size=XL)をもつデータを追加するときの例。

MariaDB [test_db]> insert into assets values
    -> ('MariaDB Tshirt', column_create('color', 'blue', 'size', 'XL')
    -> );
Query OK, 1 row affected (0.04 sec)

この段階でテーブルの中身を確認してみる。

+----------------+--------------------------------+
| item_name      | dynamic_cols                   |
+----------------+--------------------------------+
| MariaDB Tshirt |           3 sizecolor!XL!blue |
+----------------+--------------------------------+
1 row in set (0.00 sec)

なんか、よくわからん。が、2でもなく4でもなく、「3」という数字が。どういうことだ。まぁ今は置いておく。
で、上と同様にして、今度はcolor=black, price=500という動的カラムをもつデータを追加する(この表現は正しいのか?)。

MariaDB [test_db]> insert into assets values
    -> ('Thinkpad Laptop', column_create('color', 'black', 'price', 500));
Query OK, 1 row affected (0.03 sec)

書き方が変わってるのはご愛嬌。同様に中身を確認してみる。

MariaDB [test_db]> select * from assets;
+-----------------+---------------------------------+
| item_name       | dynamic_cols                    |
+-----------------+---------------------------------+
| MariaDB Tshirt  |          3 sizecolor!XL!blue  |
| Thinkpad Laptop |
     ` colorprice!black・ |
+-----------------+---------------------------------+
2 rows in set (0.00 sec)

表示が崩れていますが、これは、このブログで表示が崩れているのではなく、本当にこのように崩れて表示されました。なぜだ。今回は「3 pricesize!500!black」と表示されると予想してたのに。

公式ページの説明を読み進めていくと、以下のようにすると決行いい感じの情報が得られることがわかった。

MariaDB [test_db]> select item_name, column_list(dynamic_cols) from assets;
+-----------------+---------------------------+
| item_name       | column_list(dynamic_cols) |
+-----------------+---------------------------+
| MariaDB Tshirt  | `size`,`color`            |
| Thinkpad Laptop | `color`,`price`           |
+-----------------+---------------------------+
2 rows in set (0.00 sec)

◯動的カラムからデータを取り出す

上のままでは、動的カラムからいい感じの情報を取り出せない。ちゃんと取り出すには以下のようにする。

MariaDB [test_db]> select item_name, column_get(dynamic_cols, 'color' as char) from assets;
+-----------------+-------------------------------------------+
| item_name       | column_get(dynamic_cols, 'color' as char) |
+-----------------+-------------------------------------------+
| MariaDB Tshirt  | blue                                      |
| Thinkpad Laptop | black                                     |
+-----------------+-------------------------------------------+
2 rows in set (0.00 sec)

同様にして、色々と試してみる。

MariaDB [test_db]> select item_name, column_get(dynamic_cols, 'size' as char) from assets;
+-----------------+------------------------------------------+
| item_name       | column_get(dynamic_cols, 'size' as char) |
+-----------------+------------------------------------------+
| MariaDB Tshirt  | XL                                       |
| Thinkpad Laptop | NULL                                     |
+-----------------+------------------------------------------+
2 rows in set (0.00 sec)

MariaDB [test_db]> select item_name, column_get(dynamic_cols, 'price' as char) from assets;
+-----------------+-------------------------------------------+
| item_name       | column_get(dynamic_cols, 'price' as char) |
+-----------------+-------------------------------------------+
| MariaDB Tshirt  | NULL                                      |
| Thinkpad Laptop | 500                                       |
+-----------------+-------------------------------------------+
2 rows in set (0.00 sec)

Thinkpad Laptopのsizeだったり、MariaDB Tshirtのpriceのように、設定されていないものはNULLとなるらしい。どうせなら、設定されていないものは表示されないで欲しかったかな。以下の実行結果から想像したことだが、「'color' as char」や「'size' as char」の部分は、データを取り出すときにchar型やint型に変換してくれてるっぽい。

MariaDB [test_db]> select item_name, column_get(dynamic_cols, 'price' as int) from assets;
+-----------------+------------------------------------------+
| item_name       | column_get(dynamic_cols, 'price' as int) |
+-----------------+------------------------------------------+
| MariaDB Tshirt  |                                     NULL |
| Thinkpad Laptop |                                      500 |
+-----------------+------------------------------------------+
2 rows in set (0.00 sec)

MariaDB [test_db]> select item_name, column_get(dynamic_cols, 'price' as char) from assets;
+-----------------+-------------------------------------------+
| item_name       | column_get(dynamic_cols, 'price' as char) |
+-----------------+-------------------------------------------+
| MariaDB Tshirt  | NULL                                      |
| Thinkpad Laptop | 500                                       |
+-----------------+-------------------------------------------+
2 rows in set (0.00 sec)

MariaDB [test_db]> select item_name, column_get(dynamic_cols, 'price' as double) from assets;
+-----------------+---------------------------------------------+
| item_name       | column_get(dynamic_cols, 'price' as double) |
+-----------------+---------------------------------------------+
| MariaDB Tshirt  |                                        NULL |
| Thinkpad Laptop |                                         500 |
+-----------------+---------------------------------------------+
2 rows in set (0.00 sec)

MariaDB [test_db]> select item_name, column_get(dynamic_cols, 'size' as double) from assets;
+-----------------+--------------------------------------------+
| item_name       | column_get(dynamic_cols, 'size' as double) |
+-----------------+--------------------------------------------+
| MariaDB Tshirt  |                                          0 |
| Thinkpad Laptop |                                       NULL |
+-----------------+--------------------------------------------+
2 rows in set, 1 warning (0.00 sec)

MariaDB [test_db]> select item_name, column_get(dynamic_cols, 'size' as int) from assets;
+-----------------+-----------------------------------------+
| item_name       | column_get(dynamic_cols, 'size' as int) |
+-----------------+-----------------------------------------+
| MariaDB Tshirt  |                                       0 |
| Thinkpad Laptop |                                    NULL |
+-----------------+-----------------------------------------+
2 rows in set, 1 warning (0.00 sec)

なるほど、文字で格納されているものを数字に変換しようとなると0、ただし、値が入っていないものはNULLと。まぁ当然といえば当然か。

ちなみに、型変換を行う部分を省略するとエラーとなった。かならず、型を指定して取り出さないといけない様子。

MariaDB [test_db]> select item_name, column_get(dynamic_cols, 'color') from assets;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ') from assets' at line 1

◯カラムの追加・削除

動的カラムは追加・削除が可能らしい。"color"=blackであるデータの"price"情報を削除する場合は以下のようにする。

MariaDB [test_db]> update assets set dynamic_cols=column_delete(dynamic_cols, "price") where column_get(dynamic_col
s, 'color' as char)='black';
Query OK, 1 row affected (0.04 sec)
Rows matched: 1  Changed: 1  Warnings: 0

MariaDB [test_db]> select item_name, column_list(dynamic_cols) from assets;
+-----------------+---------------------------+
| item_name       | column_list(dynamic_cols) |
+-----------------+---------------------------+
| MariaDB Tshirt  | `size`,`color`            |
| Thinkpad Laptop | `color`                   |
+-----------------+---------------------------+
2 rows in set (0.00 sec)

どのようになったか確認もしてみたが、Thinkpad Laptopから'price'の情報がなくなっている。

逆に、新たにカラムを追加する場合は以下のようにする。

MariaDB [test_db]> update assets set dynamic_cols=column_add(dynamic_cols, "warranty", "3 years") where item_name='
Thinkpad Laptop';
Query OK, 1 row affected (0.03 sec)
Rows matched: 1  Changed: 1  Warnings: 0

MariaDB [test_db]> select item_name, column_list(dynamic_cols) from assets;
+-----------------+---------------------------+
| item_name       | column_list(dynamic_cols) |
+-----------------+---------------------------+
| MariaDB Tshirt  | `size`,`color`            |
| Thinkpad Laptop | `color`,`warranty`        |
+-----------------+---------------------------+
2 rows in set (0.00 sec)

◯動的カラムの中身をJSONで取り出す。

Mariadb 10.0.1からは、動的カラムの中身をJSONで取り出す、ということも可能なようだ。なんてことだ。便利すぎる。

MariaDB [test_db]> select item_name, column_json(dynamic_cols) from assets;
+-----------------+----------------------------------------+
| item_name       | column_json(dynamic_cols)              |
+-----------------+----------------------------------------+
| MariaDB Tshirt  | {"size":"XL","color":"blue"}           |
| Thinkpad Laptop | {"color":"black","warranty":"3 years"} |
+-----------------+----------------------------------------+
2 rows in set (0.00 sec)


公式サイトにもっと詳しい情報(英語)が載ってます。
(公式サイト)
Dynamic Columns - MariaDB Knowledge Base
Dynamic Columns from MariaDB 10 - MariaDB Knowledge Base

HTML 5でformの入力チェックを簡単に行う方法

新サイトへ移転しました
約3秒後に自動的にリダイレクトします。


(7月29日 文章を少し修正しました。)

現在、ある事情で、PDFをアップロードしてPNG画像に変換するシステムを作っている。(作っているといっても、だいそれたことはしていないのだけど。)

そこで、PDFファイルをアップロードする簡易フォームを用意した。もちろん、PDFファイルの選択は必須であり、ファイルが選択されていなければ何らかのアラートを出し、その旨をユーザに知らせたい。

通常、HTMLとPHPを用いるだけだと、アップロードボタンを押した後はページが推移し、
  ファイルがアップロードされていたらその旨の、
  ファイルがアップロードできなかったその旨の
メッセージが「遷移先のページ」で表示される。

ここで、JavaScriptを使用することで、ページ遷移前にアラートを出すことが可能になる。というか、そうしたい場合、これまではJavaScriptが必須だったようだ。

しかし、HTML 5になってから、HTML 5自体で、フォームをチェック出来るようになった。前置きが長くなったが、早速使ってみた。

実装は非常に簡単。"required"という文を加えるだけ。

<input type="file" name="pdf_file" required>

これだけで、submitするときに、ファイルが選択していなければ、以下の様な表示がされ、アップロードできなくなる。なんて便利なんだろう。

ちなみに、selectについては、optionにまでrequireを付ける必要はなく、親となるselectにだけつければOK.

<select id = "selector" required>
    <option value="" selected>▼選択</option>
    <option value="apple">りんご</option>
    <option value="grape">ぶどう</option>
    <option value="mango">マンゴー</option>
</select>

MariaDB(MySQL)でテーブルの定義を調べる3つの方法

新サイトへ移転しました
約3秒後に自動的にリダイレクトします。


たまにテーブルの制約の状況を確認したいのだけど、よく忘れてググるのでメモ。ググる時に、サイトによって確認するコマンドが異なるのが覚えにくい原因なのかも(と言い訳しておく)。

以下に2つ3つの例を示す。全く同じ事を確認できるのだけど、もしかしたら、本当は細かに違いがあるのかもしれない。(2014/08/14追記:3つ目の確認方法=describe文を見つけたので追記しています。)

MariaDB [test_db]> show columns from test_table;
+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| id       | int(11)     | NO   | PRI | NULL    | auto_increment |
| name     | varchar(20) | NO   |     | NULL    |                |
| birthday | date        | YES  |     | NULL    |                |
+----------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

MariaDB [test_db]> show fields from test_table;
+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| id       | int(11)     | NO   | PRI | NULL    | auto_increment |
| name     | varchar(20) | NO   |     | NULL    |                |
| birthday | date        | YES  |     | NULL    |                |
+----------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

MariaDB [test_db]> describe test_table;
+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| id       | int(11)     | NO   | PRI | NULL    | auto_increment |
| name     | varchar(20) | NO   |     | NULL    |                |
| birthday | date        | YES  |     | NULL    |                |
+----------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

他のコマンドでも同様のことを確認できる場合は追記していく。

ちなみに、以下の様な環境で実行した。

MariaDB [(none)]> show databases;  // データベース一覧
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test_db            |
+--------------------+
4 rows in set (0.00 sec)

MariaDB [(none)]> use test_db;  // データベースの選択
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [test_db]> show tables;  // テーブル一覧
+-------------------+
| Tables_in_test_db |
+-------------------+
| test_table        |
+-------------------+
1 row in set (0.00 sec)

CentOS 6.5にMariaDB 10.0.12をインストール(yumを使用)

新サイトへ移転しました
約3秒後に自動的にリダイレクトします。


今後はMariaDBが主流になっていきそうだ

これまでMySQLがRDBの主流だったが、今後はMariaDBが主流になっていっぽい。実際、RHEL7やCentOS 7ではMySQLからMariaDBへ移行されたそうだ。

ということで、MariaDBをインストールするときのメモ。基本的にはググりながら進めれば簡単にインストールできた。
今回はこちらの記事を大いに参考にさせていただきました。ありがとうございます。こちらのとおりに進めれば問題なく進みます。

参考サイトではMariaDB 10.0.1をインストールされていましたが、今回は当時(2014/6/20頃)最新だったMariaDB 10.0.12をインストールしました。

MariaDBのインストール

以下、ほぼ参考サイトのままです。先人に多謝ですね。

  • MariaDBのPGP keyをインストール
# rpm --import https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
  • リポジトリの設定

http://yum.mariadb.org/から自分の環境にあったURLを選択。

# vim /etc/yum.repos.d/mariadb.repo
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.0.12/centos6-x86
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
enabled=1
  • MariaDBをyumる

これで問題なければインストールは完了です。「Transaction Check Error:」とかが出たら、mysql-libsを削除すると良いそうな。

yum -y install MariaDB-client MariaDB-server

MariaDBを使う

  • スタートする

MariaDBになっても、MySQLと同様にmysqlというコマンドを使う。

# /etc/init.d/mysql start
Starting MySQL. SUCCESS!
  • パスワードの設定
/usr/bin/mysqladmin -u root password 'passwd'
  • コンソールを立ち上げる
# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 6
Server version: 10.0.12-MariaDB MariaDB Server

Copyright (c) 2000, 2014, Oracle, SkySQL Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

MariaDBの設定

  • ステータスの確認

サーバーの文字コードがlatin1になっている。

MariaDB [(none)]> status
--------------
mysql  Ver 15.1 Distrib 10.0.12-MariaDB, for Linux (i686) using readline 5.1

Connection id:          6
Current database:
Current user:           root@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server:                 MariaDB
Server version:         10.0.12-MariaDB MariaDB Server
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    utf8
Conn.  characterset:    utf8
UNIX socket:            /var/lib/mysql/mysql.sock
Uptime:                 14 min 1 sec

Threads: 1  Questions: 12  Slow queries: 0  Opens: 0  Flush tables: 1  Open tables: 63  Queries per second avg: 0.014
--------------
  • 設定ファイルを編集する。

今回はutf-8にしたいので、以下のように、設定ファイルに追記。またHandlerSocketというものを有効にするとデータベースへのアクセスを高速化出来るらしい。

# vim /etc/my.conf.d/server.cnf
# this is only for the mysqld standalone daemon
[mysqld]
character-set-server = utf8
plugin-load = handlersocket.so
  • 設定を反映させるためにMariaDBを再起動

再起動しないと設定が反映されない。

# /etc/init.d/mysql restart
Shutting down MySQL.. SUCCESS!
Starting MySQL. SUCCESS!
  • 設定の確認(文字コード)
MariaDB [(none)]> status;
--------------
mysql  Ver 15.1 Distrib 10.0.12-MariaDB, for Linux (i686) using readline 5.1

Connection id:          3
Current database:
Current user:           root@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server:                 MariaDB
Server version:         10.0.12-MariaDB MariaDB Server
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    utf8
Db     characterset:    utf8
Client characterset:    utf8
Conn.  characterset:    utf8
UNIX socket:            /var/lib/mysql/mysql.sock
Uptime:                 19 sec

Threads: 1  Questions: 4  Slow queries: 0  Opens: 0  Flush tables: 1  Open tables: 63  Queries per second avg: 0.210
--------------
  • 設定の確認(HanderSocket)

一番最後にhandlersocketと表示されていればよいそう。

MariaDB [(none)]> show plugins;
+-----------------------------+----------+--------------------+------------------+---------+
| Name                        | Status   | Type               | Library          | License |
+-----------------------------+----------+--------------------+------------------+---------+
| binlog                      | ACTIVE   | STORAGE ENGINE     | NULL             | GPL     |
| mysql_native_password       | ACTIVE   | AUTHENTICATION     | NULL             | GPL     |
| mysql_old_password          | ACTIVE   | AUTHENTICATION     | NULL             | GPL     |
| MEMORY                      | ACTIVE   | STORAGE ENGINE     | NULL             | GPL     |
| MRG_MyISAM                  | ACTIVE   | STORAGE ENGINE     | NULL             | GPL     |
| MyISAM                      | ACTIVE   | STORAGE ENGINE     | NULL             | GPL     |
| CSV                         | ACTIVE   | STORAGE ENGINE     | NULL             | GPL     |
| ARCHIVE                     | ACTIVE   | STORAGE ENGINE     | NULL             | GPL     |
| FEDERATED                   | ACTIVE   | STORAGE ENGINE     | NULL             | GPL     |
| InnoDB                      | ACTIVE   | STORAGE ENGINE     | NULL             | GPL     |
| XTRADB_READ_VIEW            | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| XTRADB_INTERNAL_HASH_TABLES | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| XTRADB_RSEG                 | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_TRX                  | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_LOCKS                | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_LOCK_WAITS           | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_CMP                  | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_CMP_RESET            | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_CMPMEM               | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_CMPMEM_RESET         | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_CMP_PER_INDEX        | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_CMP_PER_INDEX_RESET  | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_BUFFER_PAGE          | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_BUFFER_PAGE_LRU      | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_BUFFER_POOL_STATS    | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_METRICS              | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_FT_DEFAULT_STOPWORD  | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_FT_DELETED           | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_FT_BEING_DELETED     | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_FT_CONFIG            | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_FT_INDEX_CACHE       | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_FT_INDEX_TABLE       | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_SYS_TABLES           | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_SYS_TABLESTATS       | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_SYS_INDEXES          | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_SYS_COLUMNS          | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_SYS_FIELDS           | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_SYS_FOREIGN          | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_SYS_FOREIGN_COLS     | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_SYS_TABLESPACES      | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_SYS_DATAFILES        | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| INNODB_CHANGED_PAGES        | ACTIVE   | INFORMATION SCHEMA | NULL             | GPL     |
| PERFORMANCE_SCHEMA          | ACTIVE   | STORAGE ENGINE     | NULL             | GPL     |
| Aria                        | ACTIVE   | STORAGE ENGINE     | NULL             | GPL     |
| BLACKHOLE                   | ACTIVE   | STORAGE ENGINE     | NULL             | GPL     |
| FEEDBACK                    | DISABLED | INFORMATION SCHEMA | NULL             | GPL     |
| partition                   | ACTIVE   | STORAGE ENGINE     | NULL             | GPL     |
| handlersocket               | ACTIVE   | DAEMON             | handlersocket.so | BSD     |
+-----------------------------+----------+--------------------+------------------+---------+
48 rows in set (0.00 sec)

以上です。今回は本当に参考サイトの通りに進めることが出来ました。

(参考サイト)
MariaDBをCentOS 6にyumでインストールする方法│株式会社イー・エージェンシー