将包含数据的表从一个MySQL服务器复制到另一个

use*_*392 5 mysql copy

我在计算机上有一个MySQL数据库,在不同的服务器上有相同的MySQL数据库.我需要他们在结构上的长期完全相同,包含的数据和我来的地步,我能做到这一点的唯一途径是通过截断一个表,然后插入到它的其他的所有行(完全相同)表.

我想通过MySQL查询而不是通过备份然后导入它来实现这一点,而不是通过数据库迁移等,而是通过查询,因为我计划在VB项目中使用此查询并在每次更改时使用它这两个表中的任何一个.

我知道如果同一服务器上的表的查询结果如下:

INSERT INTO db.table1 SELECT * FROM db.table2
Run Code Online (Sandbox Code Playgroud)

但我不知道如何编写该SELECT子句以及如何告诉它.table2在另一台服务器上.

我认为它应该是这样的

INSERT INTO db.table1 SELECT * FROM (ServerName/IP).db.table2
Run Code Online (Sandbox Code Playgroud)

但不能完全弄明白自己,任何想法?

Ale*_*tna 6

您可以设置联合表,它基本上将一个服务器上的表链接到另一个服务器上的表.然后使用联合进行数据传输.

首先,您必须使用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
DEFAULT CHARSET=latin1;
Run Code Online (Sandbox Code Playgroud)

接下来,在本地服务器上创建一个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';
Run Code Online (Sandbox Code Playgroud)

然后你可以像任何其他表一样查询它.

但是,您应该阅读有关包括以纯文本格式存储的远程密码的大量限制.如果这是一个纯粹用于一次性复制的临时设置,并且服务器不可用于公众,那么您已经将与之相关的大部分风险降至最低.