动态匿名MySQL转储



我正在使用mysqldump创建实时应用程序的DB转储,以供开发人员使用。

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

选项可以是:

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

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

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

您可以试试缅甸:https://myanon.io

匿名化是在转储期间动态完成的:

mysqldump | myanon -f db.conf | gzip > anon.sql.gz

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

对具有数据的安全转储表(配置表等)执行mysqldump,对仅具有结构的敏感表执行mysqldump

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

几天前我不得不开发类似的东西。我不能做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行需要几秒钟),因此导入过程稍微慢一些,但仍然很好。我不得不在路上连接几个表,有一些外键,所以如果你不需要的话,它肯定会更快。此外,如果你在导入时禁用外键检查,它也会加快速度。

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

您还可以使用SELECT…

从SELECT查询中使用INTO OUTFILE语法生成带有列过滤器的转储。

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

    MySQL dump by query
  • MySQL:从SQL查询中转储数据库

phpMyAdmin提供了一个基于SQL查询的SQL格式导出选项。可以选择从PHPmyadmin(可能经过了很好的测试)中提取这段代码并在这个应用程序中使用。

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

相关内容

  • 没有找到相关文章

最新更新