В Asterisk 1.8 и выше рекомендуют в качестве бэкенда для CDR, использовать драйвер ODBC.  Этот драйвер является прослойкой между Asterisk и базой данных. Это позволяет унифицировать подключения между Asterisk и различными  базами данных, легко меня их. Рассмотрим запись CDR логов используя ODBC.

Установим необходимые пакеты

yum install mysql-server mysql mysql-devel mysql-connector-odbc unixODBC unixODBC-devel -y

Добавляем  в файл “/etc/odbc.ini”, следующие строчки

;
; DSN definitions
;
[asterisk-cdr]
Description = Asterisk CDR Backend ODBC
Driver = MySQL
Socket = /var/lib/mysql/mysql.sock
Server = localhost
User = asterisk
Pass = Your-Password
Database = asterisk
Option = 3

В конец файла “/etc/asterisk/res_odbc.conf” добавляем строчки

;
; CDR ODBC Backend
; Environment variables
[ENV]
; Connections
[asterisk-cdr]
enabled => yes
dsn => asterisk-cdr
username => asterisk
password => Your-Password
pre-connect => yes
idlecheck => 600

Проверяем файл “/etc/asterisk/cdr_odbc.conf”, что он такого вида. Меняется только DSN.

[global]
dsn=asterisk-cdr
loguniqueid=yes
dispositionstring=yes
table=cdr               ;"cdr" is default table name
usegmtime=no             ; set to "yes" to log in GMT
hrtime=yes              ;Enables microsecond accuracy with the billsec and duration fields

Создаем базу под CDR.

create database asterisk default charset utf8;

use asterisk;

CREATE TABLE `cdr` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `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 '',
  `peeraccount` varchar(20) NOT NULL DEFAULT '',
  `linkedid` varchar(32) NOT NULL DEFAULT '',
  `sequence` int(11) NOT NULL DEFAULT '0',
  `userfield` varchar(255) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`),
  KEY `calldate` (`calldate`),
  KEY `accountcode` (`accountcode`),
  KEY `uniqueid` (`uniqueid`),
  KEY `dst` (`dst`),
  KEY `src` (`src`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

grant all on asterisk.cdr to asterisk@'localhost' identified by 'Your-Password';

flsuh priveleges;

Перегружаем Astersik

service asterisk restart

Делаем звонок и смотрим как ложатся в базу CDR записи.