CentOS6 にMariaDB をインストール

CentOS 6.9/MySQL5.1 で動いているシステムを CentOS6.9/MariaDB 10.2 での動作検証を行うため、VMware 上でゲストOSとしてCentOS6.9 用意、MySQL はインストールせず、MariaDB をリポジトリでインストールします。

1. MariaDB のリポジトリ生成
こちらのサイトから「Downloads Setting up MariaDB Repositories」から以下の3ステップでリポジトリの内容が生成されます。

1. Choose a Distro
  => CentOS
2. Choose a Release
  -> CentOS 6 (x86_64)
3. Choose a Version
  -> 10.2 [Stable]

# MariaDB 10.2 CentOS repository list - created 2017-09-18 08:06 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.2/centos6-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

上記内容を /etc/yum.repos.d/MariaDB.repo というファイル名で保存します。

2. MariaDB のインストール
yum コマンドでインストール出来ます。

# yum install MariaDB-client MariaDB-server
# mysql -V
mysql Ver 15.1 Distrib 10.2.8-MariaDB, for Linux (x86_64) using readline 5.1

以上です。

Asterisk キューのログを MySql へ格納

Asterisk 呼情報をODBCでMySqlへ格納する方法を以前やりました。

Asterisk CDR(呼情報)をODBCでMySqlへ格納
Asterisk CDR(呼情報)をODBCでMySqlへ格納(後記)

今回はAsterisk のキュー(待ち呼)のログをODBCでMySqlへ格納する方法を紹介します。

1. キューログ用のテーブルを作成

まずは、キューログ用に queue_log テーブルを作成します。

CREATE TABLE `queue_log` (
    `id`              bigint(255) unsigned NOT NULL AUTO_INCREMENT,
    `time`            varchar(26) NOT NULL DEFAULT '',
    `callid`          varchar(40) NOT NULL DEFAULT '',
    `queuename`       varchar(20) NOT NULL DEFAULT '',
    `agent`           varchar(20) NOT NULL DEFAULT '',
    `event`           varchar(20) NOT NULL DEFAULT '',
    `data`            varchar(100) NOT NULL DEFAULT '',
    `data1`           varchar(40) NOT NULL DEFAULT '',
    `data2`           varchar(40) NOT NULL DEFAULT '',
    `data3`           varchar(40) NOT NULL DEFAULT '',
    `data4`           varchar(40) NOT NULL DEFAULT '',
    `data5`           varchar(40) NOT NULL DEFAULT '',
    `created`         timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    KEY `queue` (`queuename`),
    KEY `event` (`event`)
) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

2. extconfig.conf

/etc/asterisk/extconfig.conf にキューのログを格納する情報を記述します。

queue_log => odbc,asterisk,queue_log

第1パラメータ: ドライバ
第2パラメータ: res_odbc.conf のデータベースの設定情報 (DSN)
第3パラメータ: テーブル名

3. AsteriskとODBC接続の構成

AsteriskとODBC接続の構成は /etc/asterisk/res_odbc.conf で行います。

[asterisk]
enabled => yes
dsn => asterisk-connector
username => asterisk
password => asterpass
pre-connect => yes

4. ODBC設定の追加

Asteriskデータベースへの接続情報を /etc/odbc.ini へ追加します。

[asterisk-connector]
Description           = MySQL connection to 'asterisk' database
Driver                = MySQL
Database              = asterisk
Server                = localhost
UserName              = asterisk
Password              = asterpass
Port                  = 3306
Socket                = /var/lib/mysql/mysql.sock

5. 動作確認

Asterisk 再起動して動作確認します。

# service asterisk restart

キュー情報がMySqlへ格納されるか動作確認してみます。
ここでは、SIP #2501 がキューに入って #2502 が受けた結果を表示しています。

# mysql -u asterisk -p
Enter password: 

mysql> use asterisk;
mysql> select * from queue_log;

+----+----------------------------+--------------+------------+----------+----------------+------+-------+--------------+-------+-------+-------+---------------------+
| id | time                       | callid       | queuename  | agent    | event          | data | data1 | data2        | data3 | data4 | data5 | created             |
+----+----------------------------+--------------+------------+----------+----------------+------+-------+--------------+-------+-------+-------+---------------------+
| 18 | 2016-09-19 12:33:53.249160 | 1474256033.2 | queue_test | NONE     | ENTERQUEUE     |      |       | 2501         | 1     |       |       | 2016-09-19 12:33:53 |
| 19 | 2016-09-19 12:33:56.479286 | 1474256033.2 | queue_test | SIP/2502 | CONNECT        |      | 3     | 1474256033.3 | 3     |       |       | 2016-09-19 12:33:56 |
| 20 | 2016-09-19 12:34:06.721414 | 1474256033.2 | queue_test | SIP/2502 | COMPLETECALLER |      | 3     | 10           | 1     |       |       | 2016-09-19 12:34:06 |
+----+----------------------------+--------------+------------+----------+----------------+------+-------+--------------+-------+-------+-------+---------------------+
3 rows in set (0.01 sec)

参考:
http://stackoverflow.com/questions/30161384/asterisk-11-queue-log-to-mysql
http://work.mikeboylan.com/posts/2012/03/asterisk-queuelog-to-mysql.html
http://lists.digium.com/pipermail/asterisk-users/2009-September/237448.html

以上です。

CPI レンタルサーバーでPHP/MySql UTF-8 文字化け

先日から使用しているCPIレンタルサーバーへシステムを構築しているのですが、PHP でデータベースへ文字を登録すると文字化けしてしまうようです。

CPIレンタルサーバーのコントロールパネルからデータベースを新規作成する際に文字コードをUTF-8を指定したし、CREATE TABLE も UTF-8 を指定してあり、また PHP も mb_internal_encoding もファイルのエンコーディングも UTF-8 を指定していて、ローカルサーバーではきちんと動作しているシステムなので問題ないはずなのですが。

コントロールパネルのMySQL5.5管理画面より変数をしらべると character set 関連が ujis となっていました。

character set server: ujis
character set system: utf8
character set database: ujis
character set client: ujis

ではこれを編集して utf8 にすれば良いのだろうと思い、編集し保存すると権限がないてめ拒否されてしまった。

そこで、PHP/PDO からデータベースへ接続するときに charset=utf8 をつけてみると読み出し、登録も文字化けすることなく解決にいたりました。

http://php.net/manual/ja/ref.pdo-mysql.connection.php
http://php.net/manual/ja/mysqlinfo.concepts.charset.php

CPI レンタルサーバーでPHP/PDO MySql接続エラー

CPIレンタルサーバーにWebシステムを構築していてはまってしまった件なのですが、PHP で PDO を使って MySql へ接続すると以下のエラーが。。。

Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

ローカルのサーバーでは出ていなかったので、Unixソケットも調べたが /tmp/mysql.sock で問題なし。

原因は、host=localhost で接続していたためでした。’localhost’ を ‘127.0.0.1’ に変更したら接続ができました。

AccessとMySQL(UTF-8)をODBC接続

Access を MySql サーバーのフロントエンドにしてシステム開発することになった。PHPで構築したシステムを流用するので、MySqlのデータベースはエンコーディング UTF-8 で構成したい。

ネットで検索するとMySql ODBC と MySql のエンコード設定に関していろいろな情報があり、これはと思うものを試すうちに期待通りに動作した方法を紹介します。

サーバー側設定

1. MySQL Server の my.cnf の設定

characterset が UTF-8 でサーバーを構成。

[mysqld]
... 一部省略 ...
# default encoding
character-set-server=utf8
skip-character-set-client-handshake

[mysql]
default-character-set=utf8

[client]
default-character-set=utf8

2. mysql コンソールから show variables の結果
MySQL サーバーを再起動して、mysql コンソールで接続。

mysql> show variables like '%char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

characterset が UTF-8 になっているのを確認

3. テーブル作成
テーブルは DEFAULT CHARSET=utf8 で作成する。

CREATE TABLE Bar (
...
} ENGINE=InnoDB DEFAULT CHARSET=utf8;

4. ファイアウォールの設定
TCP ポート3306 へのアクセスを許可する設定に変更します。

クライアント側設定

1. MySQL Connector/ODBC をダウンロード
http://dev.mysql.com/downloads/connector/odbc/ から Connector/ODBC 5.3.4 の 「Windows (x86, 32-bit), MSI Installer」または、「Windows (x86, 64-bit), MSI Installer」をダウンロードして、インストーラーを起動してインストール。

※ Windows 8/8.1 では Microsoft Visual C++ 2010 Redistributable Package を事前にインストールしておかないと MySQL Connector/ODBCのインストールが失敗してしまうので、以下からダウンロードしてインストールしておきます。

32ビット版:https://www.microsoft.com/en-gb/download/confirmation.aspx?id=5555
64ビット版:https://www.microsoft.com/en-us/download/confirmation.aspx?id=14632

2. ODBC DSN の作成
Access から接続するために DSN を作成します。

-「コントロール パネル\システムとセキュリティ\管理ツール」から「データソース(ODBC)」をダブルクリック
– 「データ ソースの新規作成」で「MySQL ODBC 5.3 Unicode Driver」を選択
mysql-odbc-driver
– Data Source Name, TCP/IP Server, User, Password, Database を入力
mysql-odbc-conn
(Character Set と Initial Statement は空のまま、何も指定していません。)

3. Access からリンクテーブル
Access からリンクテーブルを上記のDSNを使って作成して、データを表示、編集し、また同テーブルのデータをPHPで作成したプログラムで操作しましたが、双方で問題なし。