星号、Mysql、Odbc('field list' 中的未知列 'data')

Asterisk, Mysql, Odbc (Unknown column 'data' in 'field list')

我使用 Asterisk 16.5.0、Mysql 5.7.28 和 MySQL ODBC 8.0 Unicode 驱动程序。 我通过 ODBC 连接配置了与 MySql 的连接。 一段时间后,Asterisk 会显示这样的警告。

[2019-12-11 15:34:06] WARNING[1995]: res_odbc.c:538 ast_odbc_print_errors: SQL Prepare returned an error: 42S22: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.28-log]Unknown column 'data' in 'field list'
[2019-12-11 15:34:06] WARNING[1995]: res_config_odbc.c:122 custom_prepare: SQL Prepare failed! [INSERT INTO queue_log (time, data, event, agent, queuename, callid) VALUES (?, ?, ?, ?, ?, ?)]

重启Asterisk后,问题没有出现。 但是一段时间后问题开始出现。

听起来您的 queue_log table 缺少数据字段,它应该看起来像:

CREATE TABLE `queue_log` (
  `recid` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `origid` int(10) unsigned NOT NULL DEFAULT '0',
  `callid` varchar(32) NOT NULL DEFAULT '',
  `queuename` varchar(32) NOT NULL DEFAULT '',
  `agent` varchar(32) NOT NULL,
  `event` varchar(32) NOT NULL DEFAULT '',
  `data` varchar(100) NOT NULL DEFAULT '0',
  `data1` varchar(128) NOT NULL DEFAULT '0',
  `data2` varchar(128) NOT NULL DEFAULT '0',
  `data3` varchar(128) NOT NULL DEFAULT '0',
  `data4` varchar(128) DEFAULT NULL,
  `data5` varchar(128) DEFAULT NULL,
  `time` datetime DEFAULT '1970-01-01 00:00:01',
  `datetime` datetime DEFAULT '1970-01-01 00:00:01'
);

我还是不明白为什么命令 odbc show returns

Number of active connections: 1 (out of 1) 

但是连接中断了。 它从数据库中查找(没有任何内容插入到像 cdr、cel、queue_log 这样的表中),而且我使用命令 show processlist 从 mysql 中查找了已连接的用户。实际上,Asterisk 连接到 Mysql 的用户在已连接的用户中并不存在。 显示命令 odbc 显示 是什么?或者 odbc show?

中可能存在一些错误

主要问题:如何增加 Asterisk 和 Mysql 之间的超时时间(通过 ODBC 连接)?

我知道一些解决这个问题的方法。 每 1 小时使用 cron 作业执行命令。

asterisk -rx 'reload'

用这个命令Asterisk reload 恢复连接或恢复死掉的连接。 但我认为这不是一种专业的做法。

我发现了问题。问题是 mysql 在星号开始之前开始。 在某些版本的 Mysql 服务名称从 mysql 重命名为 mysqld 之后。因为在启动脚本Asterisk中(在Centos上的位置是/etc/init.d/asterisk)我们也必须改变。

# Should-Start:      dahdi misdn lcr wanrouter mysql postgresql

改为

# Should-Start:      dahdi misdn lcr wanrouter mysqld postgresql