MariaDB - CONNECT ENGINE - ORDER BY 错误

Posted

技术标签:

【中文标题】MariaDB - CONNECT ENGINE - ORDER BY 错误【英文标题】:MariaDB - CONNECT ENGINE - ORDER BY error 【发布时间】:2017-07-07 09:02:54 【问题描述】:

我正在尝试通过运行 MariaDB (10.0.29) 的其他服务器上的 CONNECT 引擎从 mysql 表 (5.5.45) 中获取 Asterisk CDR 记录。

我可以轻松地创建表之间的连接:

CREATE TABLE `calls` engine=CONNECT table_type=MYSQL
CONNECTION='mysql://user@IP/asteriskcdrdb/calls';

当我运行简单的 SELECT * FROM 调用时,一切正常,当我添加一些 WHERE 条件时,一切正常。

但是当我添加 ORDER BY column 参数时问题开始了,然后我从 MariaDB 收到了这个错误:

#1032 - Can't find record in 'calls'

我检查了 MySQL 日志、MariaDB 日志 - 完全没有错误。

我错过了什么吗?

谢谢!

更新:整个查询很简单:

SELECT * FROM `calls` ORDER BY `calldate`

表结构:

CREATE TABLE `calls` (
  `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 '',
  `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 '',
  `call_charge` float NOT NULL default '0',
  `from_did` varchar(30) NOT NULL,
  `did` varchar(50) NOT NULL default '',
  `user_id` int(8) unsigned default NULL,
  `client_id` int(8) unsigned default NULL,
  KEY `IDX_UNIQUEID` (`uniqueid`),
  KEY `src` (`src`),
  KEY `dst` (`dst`),
  KEY `calldate` (`calldate`),
  KEY `uniqueid` (`uniqueid`),
  KEY `userfield` (`userfield`),
  KEY `from_did` (`from_did`),
  KEY `user_id` (`user_id`),
  KEY `client_id` (`client_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

更新 #2: 更新表名,以免混淆,但这不是问题。 CONNECTION 表创建正常。

查询有效

SELECT * FROM `calls`

查询有效

SELECT * FROM `calls` WHERE `user_id`=X

查询返回错误

SELECT * FROM `calls` ORDER BY `calldate`

更新#3: MySQL 已更新至版本 5.5.45,类型更改为 InnoDB,字符集转换为 UTF8。但没有成功。

问题已解决 好吧,这是 MariaDB 的错误,当我更改为 FederatedX 引擎(基本上是 CONNECT 的有限版本)时,一切正常。

【问题讨论】:

能否添加完整的查询和表格示例? @DaniloBustos 更新了我原来的帖子,抱歉。 表名是cdr? 是的,正如@Joseph Mwema 帖子中所写。 一切都好。 asteriskcdrdb.calls|检查 |状态 |好的 【参考方案1】:

在您的查询中,您执行 选择 * 从calls

但是在你的表结构中你有 创建表cdr

两者都有 calldate 列。检查您是否查询了正确的表。

【讨论】:

这是 Asterisk 服务器上的表,但是当我使用 CONNECT 时,定义中是 CREATE TABLE calls... 来自连接字符串 mysql://user@IP/asteriskcdrdb/cdr 如果 cdr 是数据库,执行 SELECT * FROM cdr.calls ORDER BY calldate cdr 是其他服务器上的表。 CONNECT 引擎就像远程视图。所以你创建表calls,它可以工作,直到添加 ORDER BY。 试试这个 SELECT * FROM 调用 ORDER BY calldate 没有调用和 calldate 中的引号。 您可以做的另一件事是发出此 SQL 命令刷新权限;然后重新启动您的 MySQL 服务并再次尝试该查询。它应该可以工作。

以上是关于MariaDB - CONNECT ENGINE - ORDER BY 错误的主要内容,如果未能解决你的问题,请参考以下文章

MariaDB数据基础应用

随着微软加入MariaDB基金会,Azure 将支持 MariaDB

mariadb远程不能访问,出现Can't connect to MySQL server on '' (10061)

解决报错:错误1130- Host xxx is not allowed to connect to this MariaDb server 九五小庞

解决ERROR 1130: Host 'x.x.x.x' is not allowed to connect to this MariaDB server 方法

mariadb报:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/my