• YH YH
  • — 1 month ago
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

以上になります。

YH

System engineer

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

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

お問い合わせ