在我之前的工作中,通过使用以下语句,我能够轻松地从生产环境中复制数据:
来自tablename @ UNIXPROD2的INSERT INTO tablename @ UNIXTEST2
我目前的工作数据库不是以这种方式设置的。
所以,我做了一些关于MySQL 5.0+的研究,因为这是我们为一个客户使用的。我遇到了FEDERATED表,所以在我阅读时,我发现了这个(here):
从MySQL 5.0.46开始,FEDERATED执行批量插入处理,以便批量发送多个行到远程表。这提供了性能改进。此外,如果远程表是事务性的,则它使远程存储引擎能够在发生错误时正确执行语句回滚。此功能具有以下限制:
对我而言,这表明(A)我可以将数据从我们的prod数据库复制到我们的测试数据库; (B)在联合表上执行的任何操作也将在源表上处理,这是不我想要做的事情。我有一些脚本需要运行,我想针对实际的prod数据运行它,以确保它在我在prod环境中使用之前有效。
我的问题:我的解释是否正确?
假设是,我试过了:
我很感激这方面的任何帮助。
编辑:经过进一步研究,我认为可以使用OUTFILE和INFILE做我需要的工作,我会在prod表上使用OUTFILE,然后在测试中输入那些行表(一个或多个)。想法?
答案 0 :(得分:1)
我的回答:
A - 正确
B - 正确。
您可以将用户权限设置为只读,但在您的情况下,我不会使用联合表,而是将整个数据库转储到文件中,然后在另一台服务器上将其还原。最简单的方法 - 使用MySql Workbench。
以及有关联合表的一些信息:
但是!你不能做任何聚合功能。在一个将被联合的视图上(例如COUNT(),MAX(),UNION ......)(你可以,但它会滞后)
服务器B上的联合表示例:
delimiter $$
CREATE TABLE `schemaName`.`tableName`(
`keyName` VARCHAR(10) NOT NULL,
`key2Name` DATE DEFAULT '2012-01-01',
KEY `keyName` (`keyName`)
)
ENGINE=FEDERATED
DEFAULT CHARSET=utf8
CONNECTION='mysql://USERNAME:PASSWORD@IPADDRESS:PORTNUMBER/baseSchema/baseTable'
$$
服务器A上的视图:
CREATE
ALGORITHM = MERGE
DEFINER = `ANOTHERUSERNAME`@`%`
SQL SECURITY DEFINER
VIEW `baseSchema`.`baseTable` AS
SELECT
... AS `keyName`,
... AS `key2Name`
FROM
...