这是一个有点抽象的问题,但希望同时也很简单。除了导出/导入之外,我只是不知道解决此问题的最佳方法,并且由于许可问题我无法这样做。所以我需要一些替代方案。
在一台服务器上,我们将其称为 1.2.3
我有一个具有 2 个架构的数据库:Rdb
和 test
。这些模式分别有 27 个和 3 个表。该数据库存储来 self 们电话系统的调用信息,但我们只有读取器访问权限,因此除了选择和加入数据记录和信息之外,我们能做的事情非常有限。
然后,我有一个生产数据库服务器,将其称为 3.2.1
以及我的主模式,我想将之前的 30 个表放入其中一个生产模式中。迁移完成后,我需要创建一个脚本来检查第一个连接上的数据,然后更新生产连接上的新架构,但这是在批量迁移完成之后。
不过,我想知道 php 脚本是否是进行初始迁移的方法。我正在使用 MySQL Workbench,导出向导对于只读数据库失败,但如果界面中有其他方法,那么我不知道。
这是相当多的数据,我不一定要寻找最快的方法,而是寻找最简单且最安全的方法。
最佳答案
对于一次性数据移动,最简单的方法是使用命令行工具 mysqldump
将表转储到文件,然后使用 mysql
加载结果文件。这假设您要关闭 1.2.3
,或者重新配置您的电话系统
以指向 3.2.1
(或适当更新 DNS) )。此外,如果您可以让电话系统停机来移动数据,这会容易得多。
we have reader access only so we're very limited in what we can do beyond selecting and joining for data records
这确实限制了您的选择。
- 主/从复制需要
REPLICATION SLAVE
权限,您可能需要具有SUPER
权限的用户来创建复制用户。 - 基于触发器的复制解决方案,例如 SymetricDS将需要用户使用
CREATE ROUTINE
才能创建触发器 - “提取、转换、加载”解决方案,如 Clover ETL如果表具有
LAST_CHANGED
时间戳,效果最佳。如果他们不这样做,那么您将需要ALTER TABLE
权限。
针对不同目标的不同工具。
- 主/从复制通常用于灾难恢复、可用性或读取扩展
- 异构复制以连续但异步的方式在不同环境(可以是不同的 RDBMS 或不同的副本集)之间复制部分(或全部)表。
- 用于批量、每小时/每日/定期数据移动的 ETL,能够选择列的子集、聚合、转换时间戳格式、与多个源合并,以及通常修复您需要的数据处理任何内容。
这应该可以帮助您确定您的实际情况 - 是否是临时数据同步的一次性加载,或者是否是持续复制(实时或延迟)。
编辑: https://www.percona.com/doc/percona-toolkit/LATEST/index.html 查看角色工具包。特别是 pt-table-sync 和 pt-table-checksum。他们会为此提供帮助。
关于php - Mysql,数据库/服务器之间的数据迁移(现在迁移,稍后定期更新),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46220599/