我正在尝试使用MariaDB 10.1.12的联合引擎来创建基于远程数据库中的表的表。关于如何使用FederatedX实现的MariaDB instructions之后,在数据库db1
中我创建了一个表
CREATE TABLE test_table (
id int(20) NOT NULL auto_increment,
name varchar(32) NOT NULL default '',
other int(20) NOT NULL default '0',
PRIMARY KEY (id),
KEY name (name),
KEY other_key (other))
DEFAULT CHARSET=latin1;
现在,当我想使用Federated引擎在第二个数据库db2
中看到此表时,我可以发出
CREATE TABLE test_table (
id int(20) NOT NULL auto_increment,
name varchar(32) NOT NULL default '',
other int(20) NOT NULL default '0',
PRIMARY KEY (id),
KEY name (name),
KEY other_key (other)
) ENGINE=FEDERATED
DEFAULT CHARSET=latin1
CONNECTION='mysql://user_x:pass_y@localhost/db1/test_table';
所有这些都是从MariaDB文档中复制的,效果很好。但是,如果我尝试创建表而没有明确地复制表结构的定义 - 在同一文档中给出的示例
CREATE TABLE test_table ENGINE=FEDERATED DEFAULT CHARSET=latin1
CONNECTION='mysql://user_x:pass_y@localhost/db1/test_table';
MariaDB以错误回复
ERROR 1113 (42000): A table must have at least 1 column
我是否遗漏了某些内容,或者在未指定各列的情况下无法使用联合表?
答案 0 :(得分:2)
似乎在Ubuntu 14.04上使用MariaDB的标准安装,旧的Federated引擎是活动的,而不是新的FederatedX变体。只有后者支持自动发现列。为了纠正这个问题,我采取了以下步骤:
uninstall soname 'ha_federated';
删除联合插件。服务器重启后,正确加载
install plugin federated soname 'ha_federatedx';
这将加载支持自动发现列的新FederatedX实现。要查看已安装的引擎,可以使用
列出它们show engines;
如果一切正确,输出中应该有这一行:
| FEDERATED | YES | FederatedX pluggable storage engine |