5

我正在使用 mysqldump 创建供开发人员使用的实时应用程序的数据库转储。

此数据包含客户数据。我想匿名化这些数据,即删除客户姓名/信用卡数据。

一个选项是:

  • 创建数据库副本(创建转储和导入转储)
  • 触发对数据进行匿名化的 SQL 查询
  • 转储新数据库

但这有很多开销。更好的解决方案是在转储创建期间进行匿名化。

我想我最终会解析所有mysqlsqldump输出?有没有更智能的解决方案?

4

7 回答 7

3

如果要随机化数据,为什么要从表中进行选择?

做一个mysqldump可以安全转储数据的表(配置表等),以及一个mysqldump只包含结构的敏感表。

然后,在您的应用程序中,您可以根据随机创建的数据为敏感表构造 INSERT 语句。

于 2013-01-07T16:04:12.270 回答
3

你可以试试 Myanon:https ://myanon.io

在转储期间匿名化是即时完成的:

mysqldump | myanon -f db.conf | gzip > anon.sql.gz
于 2021-11-23T20:06:06.597 回答
2

几天前我不得不开发类似的东西。我不能这样做INTO OUTFILE,因为数据库是 AWS RDS。我最终采用了这种方法:

从某个表中以表格文本形式转储数据:

mysql -B -e 'SELECT `address`.`id`, "address1" , "address2", "address3", "town", "00000000000" as `contact_number`, "example@example.com" as `email` FROM `address`' some_db > addresses.txt

然后导入它:

mysql --local-infile=1 -e "LOAD DATA LOCAL INFILE 'addresses.txt' INTO TABLE \`address\` FIELDS TERMINATED BY '\t' ENCLOSED BY '\"' IGNORE 1 LINES" some_db

执行此操作只mysql需要命令。

由于导出非常快(大约 30.000 行需要几秒钟),导入过程有点慢,但仍然很好。我不得不在途中加入几张桌子,并且有一些外键,所以如果你不需要它肯定会更快。此外,如果您在导入时禁用外键检查,它也会加快速度。

于 2019-05-06T11:05:48.667 回答
1

您还可以使用SELECT查询中的 SELECT ... INTO OUTFILE 语法来使用列过滤器进行转储。

于 2013-01-07T16:09:21.397 回答
1

您可以选择每个表(而不是选择 *)并指定您想要拥有的列并省略或空白那些您不想拥有的列,然后为每个查询使用 phpmyadmin 的导出选项。

于 2013-01-07T15:59:20.127 回答
0

我发现了类似的问题,但看起来你想要的没有简单的解决方案。您必须自己编写自定义导出。

于 2013-01-07T16:48:57.063 回答
0

phpMyAdmin 为基于 SQL 查询的 SQL 格式提供导出选项。从 PHPmyadmin(可能已经过良好测试)中提取此代码并在此应用程序中使用它可能是一个选项。

代码参考phpMyAdmin导出插件-exportData方法

于 2013-01-07T16:46:10.357 回答