【问题标题】:Copy a table with data from one MySQL server to another将包含数据的表从一个 MySQL 服务器复制到另一个
【发布时间】:2014-05-23 06:46:18
【问题描述】:

我在计算机上有一个 MySQL 数据库,而在不同的服务器上有相同的 MySQL 数据库。我需要它们在结构和包含的数据方面完全相同,我已经到了这样的地步,我可以做到这一点的唯一方法是截断一个表,然后将另一个表的所有行插入其中(确切地说同)表。

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

我知道,如果在同一台服务器上查询的表如下所示:

INSERT INTO db.table1 SELECT * FROM db.table2

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

我觉得应该是这样的

INSERT INTO db.table1 SELECT * FROM (ServerName/IP).db.table2

但我自己也搞不明白,有什么想法吗?

【问题讨论】:

  • 我将获取插入空表的值的表来自服务器

标签: mysql copy


【解决方案1】:

您可以设置federated tables,它基本上是将一台服务器上的表链接到另一台服务器上的表。然后使用联邦进行数据传输。

首先,您必须在远程服务器上有一个要使用 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;

接下来,在本地服务器上创建一个 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';

然后你可以像查询其他表一样查询它。

但是有相当数量的limitations you should read about,包括以纯文本形式存储的远程密码。如果这是一个临时设置,纯粹是为了一次性复制,并且服务器不向公众开放,那么您已经将与之相关的大部分风险降至最低。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-05
    • 1970-01-01
    • 1970-01-01
    • 2011-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多