我正在使用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…
我发现了类似的问题,但看起来没有简单的解决方案,你想要什么。您必须自己编写一个自定义导出。
- MySQL dump by query
- MySQL:从SQL查询中转储数据库
phpMyAdmin提供了一个基于SQL查询的SQL格式导出选项。可以选择从PHPmyadmin(可能经过了很好的测试)中提取这段代码并在这个应用程序中使用。
参考phpMyAdmin导出插件- exportData方法获取代码