是否可以使用MySQL Client编写跨服务器选择查询。基本上,设置如下。

服务器IP     数据库结果 ---------      --------结果 1.2.3.4     测试结果 a.b.c.d     测试

我想编写一个查询,它将从1.2.3.4上的测试数据库中的表中选择行,并将结果在表中插入到a.b.c.d上的测试数据库中
我的服务器位于数英里之外,所以我将打开一个SSH隧道来连接这两个。

任何指针?

有帮助吗?

解决方案

mysqldump 可能是已经提到的解决方案,或者您可以尝试使用 SELECT ... INTO OUTFILE 然后 LOAD DATA INFILE ... 命令。

MySQL确实拥有可能对您有用的联合存储引擎。这里有一些关于它的文档 http://dev.mysql .com / doc / refman / 5.0 / en / federated-storage-engine.html 我必须承认我没有取得巨大的成功,但它可能适合你。

第三种解决方案是在您的应用程序中完成工作。逐行读入 SELECT 查询的结果,逐行读取 INSERT 到其他服务器的结果。您可能会遇到一些数据类型和null处理问题。

其他提示

如何在其中一台服务器上使用联合表? 根据您将在查询中使用的远程表创建联合表,并运行您的查询,就好像您的数据库都是本地的一样。以下示例来自 MySQL网站

使用FEDERATED表的过程非常简单。通常,您有两台服务器在同一主机或不同主机上运行。 (FEDERATED表可能使用由同一服务器管理的另一个表,尽管没有必要这样做。)

首先,您必须使用FEDERATED表在远程服务器上拥有一个表。假设远程表位于联邦数据库中,并且定义如下:

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),
    INDEX name (name),
    INDEX other_key (other)
)
ENGINE=MyISAM 
CHARSET=latin1;

该示例使用MyISAM表,但该表可以使用任何存储引擎。

接下来,在本地服务器上创建一个FEDERATED表以访问远程表:

CREATE TABLE federated_table (
    id     INT(20) NOT NULL AUTO_INCREMENT,
    name   VARCHAR(32) NOT NULL DEFAULT '',
    other  INT(20) NOT NULL DEFAULT '0',
    PRIMARY KEY  (id),
    INDEX name (name),
    INDEX other_key (other)
)
ENGINE=FEDERATED
DEFAULT CHARSET=latin1
CONNECTION='mysql://fed_user@remote_host:9306/federated/test_table';

(在MySQL 5.0.13之前,使用COMMENT而不是CONNECTION。)

由于mysql客户端一次只能连接一台服务器,简短的答案是否定的。但总有办法......

mysqldump 的最新版本支持 - 其中参数,可用于限制转储的数据。这意味着您可以运行简单的 SELECT (即一个表上的所有列)并生成有效的SQL到 INSERT 。然后,您可以将源服务器的此类 mysqldump 命令的输出通过 mysql 命令传递到目标服务器。

您可能希望在 mysqldump - no-create-info - no-add-locks >命令。测试它直到输出完全符合您的要求。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top