如何在不指定列的情况下在 MariaDB 中创建联合 table
How to create a federated table in MariaDB without specifying columns
我正在尝试使用 MariaDB 10.1.12 的联合引擎在远程数据库中创建基于 tables 的 tables。在 MariaDB instructions 关于如何使用 FederatedX 实现之后,我在数据库 db1
中创建了一个 table as
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;
现在,当我想使用联合引擎在第二个数据库 db2
中查看此 table 时,我可以发出
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 文档中复制的并且运行良好。但是,如果我尝试在不显式复制 table 结构的定义的情况下创建 table - 同一文档中给出的示例
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
我是不是遗漏了什么,或者如果不指定各个列就无法使用联合 table?
似乎在 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 |
我正在尝试使用 MariaDB 10.1.12 的联合引擎在远程数据库中创建基于 tables 的 tables。在 MariaDB instructions 关于如何使用 FederatedX 实现之后,我在数据库 db1
中创建了一个 table as
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;
现在,当我想使用联合引擎在第二个数据库 db2
中查看此 table 时,我可以发出
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 文档中复制的并且运行良好。但是,如果我尝试在不显式复制 table 结构的定义的情况下创建 table - 同一文档中给出的示例
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
我是不是遗漏了什么,或者如果不指定各个列就无法使用联合 table?
似乎在 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 |