星号、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
我使用 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