お問い合わせ

ブログ

これまでに経験してきたプロジェクトで気になる技術の情報を紹介していきます。

AsteriskのRealtime DatabaseでODBCを使わずにMySQLへ接続する

YH YH 3 years
AsteriskのRealtime DatabaseでODBCを使わずにMySQLへ接続する

公式リファレンスでは ODBCを介してMySQLへ接続する手順が記述されています。

CDR(通信履歴)以外は設定次第で、ODBCを使わずに直接MySQLへ接続可能です。

同様の手順でおそらくmariaDBでも使えます。

公式リファレンスでODBCを介してMySQLへ接続する手順のみが示されている一因として

CDRをMySQLに直接保存するためのアドオンcdr_mysqlが、(MySQL8以降のみ?)makeでエラーとなり

CDR以外が直接MySQLで接続できても、CDRで結局ODBCが必要となるからだそうです。

mariaDBであればそのエラー部分が通る可能性があります。

環境は

・CentOS 7.8.2003

・Asterisk 16.13.0

・MySQL 8.0.22

インストールで Asterisk Module and Build Option Selection を開きます。

# meke menuselect

Add-ons の res_config_mysql と app_mysql を選択して

Save & Exit

# make && make install

modules.confに追加

preload => res_config_mysql.so

res_config_mysql.confを設定

[general]
dbhost = 127.0.0.1
dbname = asterisk
dbuser = user
dbpass = password
dbport = 3306
dbsock = /var/lib/mysql/mysql.sock
dbcharset = utf8mb4
requirements=warn ; or createclose or createchar

MySQLへの接続を確認します。

再起動してからAsteriskのCLIに入ります。

# systemctl restart asterisk
# asterisk -cvvvvvr
> realtime mysql status

結果 接続できている場合

general connected to asterisk@127.0.0.1, port 3306 with username root for 1 days, 1 hours.

CLIから抜けます

> exit

各設定の参照先をODBC接続から直接MySQLに変更します。

sorcery.confを設定

;を消して有効化します。(ここはODBCを介する場合と同様)

[res_pjsip]
endpoint=realtime,ps_endpoints
auth=realtime,ps_auths
aor=realtime,ps_aors
domain_alias=realtime,ps_domain_aliases
contact=realtime,ps_contacts

[res_pjsip_endpoint_identifier_ip]
identify=realtime,ps_endpoint_id_ips

[res_pjsip_outbound_publish]
outbound-publish=realtime,ps_outbound_publishes

[res_pjsip_pubsub]
inbound-publication=realtime,ps_inbound_publications

[res_pjsip_publish_asterisk]
asterisk-publication=realtime,ps_asterisk_publications

extconfig.confを設定

見やすいように定義をアルファベット順に並べ替えました。

ps_contactsを追加しています。

Alembicによって自動的に作成されたテーブルの;を消して、有効化します。

矢印の右側 参照先定義をmysql,generalに変更します。

'general'の指定によってres_config_mysql.confの接続先[general]が参照されます。

ということはres_config_mysql.confで複数の接続先を定義しておき、

テーブルごとに分散できるようです。

;acls => odbc,asterisk
extensions => mysql,general
;iaxpeers => odbc,asterisk
;iaxusers => odbc,asterisk
meetme => mysql,general
musiconhold => mysql,general
musiconhold_entry => mysql,general
ps_aors => mysql,general
ps_asterisk_publications = mysql,general
ps_auths => mysql,general
ps_contacts => mysql,general
ps_domain_aliases => mysql,general
ps_endpoints => mysql,general
ps_endpoint_id_ips => mysql,general
ps_inbound_publications = mysql,general
ps_outbound_publishes => mysql,general
queues => mysql,general
queue_log => mysql,general
queue_members => mysql,general
queue_rules => mysql,general
sippeers => mysql,general
;sipregs => odbc,asterisk ; (avoid sipregs if possible, e.g. by using a view)
voicemail => mysql,general

Alembicで自動的に生成されるテーブル

Asteriskの解凍ディレクトリの中にある contrib/realtime/mysql/mysql_config.sqlにテーブル定義があります。 Alembicはこれを実行するようです。

再起動して反映します。

# systemctl restart asterisk

以上になります。

AsteriskのRealtime DatabaseでODBCを使わずにMySQLへ接続する 2021-08-18 12:39:40

コメントはありません。

4826

お気軽に
お問い合わせください。

お問い合わせ
gomibako@aska-ltd.jp