即时匿名的MySQL转储

时间:2013-01-07 15:55:41

标签: php mysqldump anonymize

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

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

选项是:

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

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

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

6 个答案:

答案 0 :(得分:2)

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

使用数据进行转储(配置表等)安全的mysqldump个表,以及仅具有结构的mysqldump敏感表。

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

答案 1 :(得分:1)

您可以选择每个表(而不是select *)并指定要包含的列,并省略或删除您不想拥有的列,然后对每个查询使用phpmyadmin的导出选项

答案 2 :(得分:1)

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

答案 3 :(得分:1)

几天前,我不得不开发类似的东西。我无法执行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行),因此导入过程较慢,但仍然可以。我必须在途中加入几个表,并且有一些外键,因此如果您不需要的话,肯定会更快。另外,如果您在导入时禁用了外键检查,也可以加快速度。

答案 4 :(得分:0)

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

有关代码,请参阅phpMyAdmin export plugin - exportData method

答案 5 :(得分:0)

我发现了类似的问题,但看起来没有简单的解决方案可以满足您的需求。您必须自己编写自定义导出。