【发布时间】:2020-01-31 11:51:48
【问题描述】:
这个话题非常关键,因为也许没有确切的答案。我在生产环境中有一个 22Gb MySql 数据库。但出于测试目的,我需要从数据库中提取例如 2Gb,并且此提取必须具有所有依赖项(键、索引、FK 等)。如何在 MySql 数据库中执行此部分提取?
【问题讨论】:
-
只能“手动”。转储结构(无数据)并恢复到新数据库。使用
INSERT INTO new_db.root_table TABLE old_db.root_table LIMIT xxx将一些(不是全部)记录复制到根表。然后使用INSERT IGNORE复制依赖表 - 只有那些与复制到新根表相关的记录才会被复制。然后备份这个新数据库并在另一台服务器上恢复。 PS。如果存在某些触发器,则必须在复制所有数据后恢复它们。 -
@Akina 嗨。感谢您的回答并理解问题所在。但是此时一个有大量的表并且将很难“手动”使用这种策略。现在我将尝试另一种形式来提取数据,如果我没有得到另一种方法,我会尝试你的策略。非常感谢您的回复。
-
有大量表格,“手动”使用这种策略会非常困难 为什么?从 INFORMATION_SCHEMA 获取数据库中所有外键的父子数据并构建正确排序的表列表(此外,如果您添加
level字段,递归 CTE 将自动完成)。 -
@Akina 嗨。谢谢你的回复。事实是我没有数据库技能来执行您解释的内容。我怎样才能获得这样做的教程?对于临时解决,我使用“head -n 5000
> temp.sql”从 sql 导出数据中获得 5000 行第一行。使用这个临时文件,我将填充数据库。但我知道这是错误的方式!!!
标签: mysql database mysql-workbench database-restore