Voipnotes
Услуги
  • 3CX Phone System
    • Купить IP АТС - 3CX Phone System
Ещё
    Задать вопрос
    +7 (499) 113-65-73
    Заказать звонок
    sale@voipnotes.ru
    г. Москва 2-й Михайловский проезд 9
    +7 (499) 113-65-73
    Заказать звонок
    Voipnotes
    Услуги
    • 3CX Phone System
      • Купить IP АТС - 3CX Phone System
      Voipnotes
      Услуги
      • 3CX Phone System
        • Купить IP АТС - 3CX Phone System
        Voipnotes
        Voipnotes
        • Услуги
          • Назад
          • Услуги
          • 3CX Phone System
            • Назад
            • 3CX Phone System
            • Купить IP АТС - 3CX Phone System
        • +7 (499) 113-65-73
        sale@voipnotes.ru
        г. Москва 2-й Михайловский проезд 9
        • Главная
        • Блог
        • Подключение Asterisk к MySQL через драйвер ODBC

        Подключение Asterisk к MySQL через драйвер ODBC

        1 Сентября 2015

        В первых версиях Asterisk для сбора и хранения данных CDR и CEL в MySQL использовался драйвер cdr_mysql.so и cel_mysql.so, соответственно. В настоящий момент эти драйверы устарели и разработчики рекомендуют использовать технологию ODBC.

        ODBC (Open Database Connectivity) — это программный интерфейс (API) доступа к базам данных, разработанный фирмой Microsoft, в сотрудничестве с Simba Technologies на основе спецификаций Call Level Interface (CLI), который разрабатывался организациями SQL Access Group, X/Open и Microsoft. Впоследствии CLI был стандартизован ISO. Стандарт CLI призван унифицировать программное взаимодействие с СУБД, сделать его независимым от поставщика СУБД и программно-аппаратной платформы. Спасибо Википедии.

        Проще говоря, драйвер ODBC позволяет подключать какое-либо приложение или программу (в нашем случае это Asterisk) к различным базам данных.

        В этой статье мы рассмотрим, как подключить Asterisk к MySQL для записи CDR на сторонний сервер.

        Что мы имеем:

        - Сервер с Asterisk 13, на ОС Centos 6.5 (x86_64) / Ubuntu Server 14.10 (x86_64)

        - Сервер с MySQL 5.5, на какой ОС нам в принципе не важно.

        Для установки драйвера на Red Hat подобных ОС, необходимо ввести следующую команду:

        yum install unixodbc unixodbc-devel libtool-ltdl libtool-ltdl-devel mysql-connector-odbc

        Для Debian подобных ОС, необходимо выполнить следующую команду:

        sudo apt-get install unixodbc unixodbc-dev libmyodbc

        Далее необходим отредактировать файл /etc/odbcinst.ini. В Centos он уже существует, в Ubuntu он существует, но файл пустой.

        nano /etc/odbcinst.ini

        Проверьте правильно ли указаны пути к драйверам ODBC.

        1) Для Centos x86_x64:

        # Driver from the mysql-connector-odbc package
        # Setup from the unixODBC package
        [MySQL]
        Description = ODBC for MySQL
        Driver = /usr/lib/libmyodbc5.so
        Setup = /usr/lib/libodbcmyS.so
        FileUsage = 1

        Для Centos x64:

        # Driver from the mysql-connector-odbc package
        # Setup from the unixODBC package
        [MySQL]
        Description = ODBC for MySQL
        Driver = /usr/lib64/libmyodbc5.so
        Setup = /usr/lib64/libodbcmyS.so
        FileUsage = 1

        2) Для Ubuntu:

        # Driver from the mysql-connector-odbc package
        # Setup from the unixODBC package
        [MySQL]
        Description = ODBC for MySQL
        Driver = /usr/lib/x86_64-linux-gnu/odbc/libmyodbc.so
        Setup = /usr/lib/x86_64-linux-gnu/odbc/libodbcmyS.so
        FileUsage = 1

        Далее проверяем видит ли ODBC драйвер для MySQL. Вводим команду

        odbcinst -q -d

        и должны увидеть следующее:

        odbcinst -q -d
        [MySQL]

        После этого отредактируем файл /etc/odbc.ini, это файл используется для создания идентификатора для Asterisk. Т.е. Asterisk, в своей конфигурации, будет ссылается на название, указанное в этом файле.

        nano /etc/odbc.ini

        1) Для Centos:

        [MySQL-asteriskcdrdb]Description=MySQL connection to 'asterisk' database
        driver=MySQL
        server=localhost
        database=asteriskcdrdb
        Port=3306
        Socket=/var/lib/mysql/mysql.sock
        option=3

        2) Для Ubuntu:

        [MySQL-asteriskcdrdb]
        Description=MySQL connection to 'asterisk' database
        driver=MySQL
        server=localhost
        database=asteriskcdrdb
        Port=3306
        Socket=/var/run/mysqld/mysqld.sock
        option=3

        Т.е. в нашем примере, Asterisk в своих конфигурационных файлах будет использовать идентификатор [MySQL-asteriskcdrdb].

        Если мы хотим подключиться к сторонней базе данных, т.е. установленной на другом сервере, нежели Asterisk, то в файле /etc/odbc.ini необходимо просто изменить строчку server=localhost на server=IPадресБД (в нашем примере 192.168.7.17)

        1) Для Centos:

        [MySQL-asteriskcdrdb]
        Description=MySQL connection to 'asterisk' database
        driver=MySQL
        server=192.168.7.17
        database=asteriskcdrdb
        Port=3306
        Socket=/var/lib/mysql/mysql.sock
        option=3

        2) Для Ubuntu:

        [MySQL-asteriskcdrdb]
        Description=MySQL connection to 'asterisk' database
        driver=MySQL
        server=192.168.7.17
        database=asteriskcdrdb
        Port=3306
        Socket=/var/run/mysqld/mysqld.sock
        option=3

        Далее необходимо проверить сможем ли мы подключиться к базе данных, используя утилитку ISQL. Введите следующую команду и вы должны увидеть схожий вывод.

        echo "select 1" | isql -v MySQL-asteriskcdrdb
        +---------------------------------------+
        | Connected! |
        | |
        | sql-statement |
        | help [tablename] |
        | quit |
        | |
        +---------------------------------------+
        SQL> select 1
        +---------------------+
        | 1 |
        +---------------------+
        | 1 |
        +---------------------+
        SQLRowCount returns 1
        1 rows fetched
        SQL> [root@asterisk mysql]#

        Теперь перейдем к настройкам MySQL.

        1) Подключаемся к MySQL

        mysql -urootuser -prootpassword

        2) Создадим базу данных asteriskcdrdb

        mysql> CREATE DATABASE asteriskcdrdb default charset utf8;

        3) Переходим в базу данных

        mysql> use asteriskcdrdb;

        4) Создадим две таблицы CDR и CEL.

        CREATE TABLE `cdr` (
        `calldate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
        `clid` varchar(80) NOT NULL DEFAULT '',
        `src` varchar(80) NOT NULL DEFAULT '',
        `dst` varchar(80) NOT NULL DEFAULT '',
        `dcontext` varchar(80) NOT NULL DEFAULT '',
        `channel` varchar(80) NOT NULL DEFAULT '',
        `dstchannel` varchar(80) NOT NULL DEFAULT '',
        `lastapp` varchar(80) NOT NULL DEFAULT '',
        `lastdata` varchar(80) NOT NULL DEFAULT '',
        `duration` int(11) NOT NULL DEFAULT '0',
        `billsec` int(11) NOT NULL DEFAULT '0',
        `disposition` varchar(45) NOT NULL DEFAULT '',
        `amaflags` int(11) NOT NULL DEFAULT '0',
        `accountcode` varchar(20) NOT NULL DEFAULT '',
        `uniqueid` varchar(32) NOT NULL DEFAULT '',
        `userfield` varchar(255) NOT NULL DEFAULT '',
        `did` varchar(50) NOT NULL DEFAULT '',
        `recordingfile` varchar(255) NOT NULL DEFAULT '',
        `cnum` varchar(40) NOT NULL DEFAULT '',
        `cnam` varchar(40) NOT NULL DEFAULT '',
        `outbound_cnum` varchar(40) NOT NULL DEFAULT '',
        `outbound_cnam` varchar(40) NOT NULL DEFAULT '',
        `dst_cnam` varchar(40) NOT NULL DEFAULT '',
        KEY `calldate` (`calldate`),
        KEY `dst` (`dst`),
        KEY `accountcode` (`accountcode`),
        KEY `uniqueid` (`uniqueid`),
        KEY `did` (`did`)
        )
        CREATE TABLE `cel` (
        `id` int(11) NOT NULL AUTO_INCREMENT,
        `eventtype` varchar(30) NOT NULL,
        `eventtime` datetime NOT NULL,
        `cid_name` varchar(80) NOT NULL,
        `cid_num` varchar(80) NOT NULL,
        `cid_ani` varchar(80) NOT NULL,
        `cid_rdnis` varchar(80) NOT NULL,
        `cid_dnid` varchar(80) NOT NULL,
        `exten` varchar(80) NOT NULL,
        `context` varchar(80) NOT NULL,
        `channame` varchar(80) NOT NULL,
        `src` varchar(80) NOT NULL,
        `dst` varchar(80) NOT NULL,
        `channel` varchar(80) NOT NULL,
        `dstchannel` varchar(80) NOT NULL,
        `appname` varchar(80) NOT NULL,
        `appdata` varchar(80) NOT NULL,
        `amaflags` int(11) NOT NULL,
        `accountcode` varchar(20) NOT NULL,
        `uniqueid` varchar(32) NOT NULL,
        `linkedid` varchar(32) NOT NULL,
        `peer` varchar(80) NOT NULL,
        `userdeftype` varchar(255) NOT NULL,
        `eventextra` varchar(255) NOT NULL,
        `userfield` varchar(255) NOT NULL,
        PRIMARY KEY (`id`),
        KEY `uniqueid_index` (`uniqueid`),
        KEY `linkedid_index` (`linkedid`)
        )

        5) Дадим права пользователю asterisk на работы с БД asteriskadcdb

        GRANT ALL PRIVILEGES ON asteriskcdrdb.* TO 'asteriskuser'@'localhost';

        Если сервер с БД и Asterisk разные машины, то необходимо внести такую запись.

        GRANT ALL PRIVILEGES ON asteriskcdrdb.* TO 'asteriskuser'@'IP адрес сервера Asterisk' identified by 'Your-Password';

        Обновляем привилегии.

        FLUSH PRIVILEGES;
         

        Далее необходимо пересобрать Asterisk, выбрав модули связанные с odbc.

        $ cd /usr/src/asterisk-13.4.0/
        $ ./configure
        $ make menuselect
        $ make install

        В файл /etc/asterisk/res_odbc.conf добавляем следующие строчки.

        [asteriskcdrdb]
        enabled=>yes
        dsn=>MySQL-asteriskcdrdb
        pooling=>no
        limit=>1
        pre-connect=>yes
        username=>asteriskuser
        password=>your_password_from_database

        Параметр DSN отвечает за подключение Asterisk к базе данных, указанной в файле /etc/odbc.ini. Этот параметр говорит Asterisk, что необходимо открыть и поддерживать соединение с базой данных при загрузке модуля res_odbc.so.

        Перезапустим сервис Asterisk

        service asterisk restart

        Через CLI Asterisk проверим подключение к БД через драйвер ODBC/

        *CLI> odbc show

        ODBC DSN Settings
        -----------------

        Name: asteriskcdrdb
        DSN: MySQL-asteriskcdrdb
        Last connection attempt: 1970-01-01 03:00:00
        Pooled: No
        Connected: Yes

        Далее отредактируем файлы, связанные с CDR и CEL.

        1) В файл /etc/asterisk/cdr_odbc.conf добавляем следующие строчки.

        [asteriskcdrdb]
        connection=asteriskcdrdb
        loguniqueid=yes
        table=cdr
        alias start => calldate

        2) В файл /etc/asterisk/cel_odbc.conf добавляем следующие строчки.

        [cel]
        connection=asteriskcdrdb
        loguniqueid=yes
        table=cel
         

        Нужна консультация?

        Наши специалисты ответят на любой интересующий вопрос

        Задать вопрос
        Поделиться
        Назад к списку
        © 2021 Все права защищены.
        +7 (499) 113-65-73
        Заказать звонок
        sale@voipnotes.ru
        г. Москва 2-й Михайловский проезд 9
        Политика конфиденциальности
        Версия для печати
        © 2021 Все права защищены.
        Заказать звонок
        Написать сообщение