我正在使用mysqldump来创建开发人员使用的实时应用程序的数据库转储。
此数据包含客户数据。我想匿名化这些数据,即删除客户名称/信用卡数据。
选项是:
但这需要很多开销。 更好的解决方案是在转储创建期间进行匿名化。
我想我最终会解析所有mysqlsqldump
输出?有没有更智能的解决方案?
答案 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(可能经过充分测试)中提取此代码并在此应用程序中使用它的选项。
答案 5 :(得分:0)
我发现了类似的问题,但看起来没有简单的解决方案可以满足您的需求。您必须自己编写自定义导出。