这可能吗?我所拥有的是一个表(让我们说它的名字是用户列表,在基本的maindb中),有两列包含敏感信息(让他们称之为pers1和pers2),现在我需要定期发布该数据库的公共版本。我现在做的是:
首先,
create database dummydb;
use dummydb;
create table `dummydb`.`userlist` like `maindb`.`userlist`;
insert into `dummydb`.`userlist` select * from `maindb`.`userlist`;
update `dummydb`.`userlist` set `pers1` = ' ', `pers2` = ' ';
接下来,/usr/bin/mysqldump -u %user% -p%password% dummydb > dummydb.sql
然后,drop database dummydb;
之后,我启动了一个与转储的sql一起使用的工具。我需要知道的是,我是否可以在不创建虚拟数据库和处理表的情况下进行更新。是的,我知道我也可以解析转储,但也许有一种不那么迂回的方式,我只是不知道?
答案 0 :(得分:2)
mysqldump生成的文件只是一个包含SQL语句的平面文件。它还包含一些不是SQL的语句,它们是builtin commands for the mysql client。因此,即使您有一个可以解析转储文件的SQL的工具,它也需要解析只有mysql客户端才能理解的命令。
您的任务最简单的方法是使用mysqld的实例,导入转储文件,并使用SQL操作敏感数据。
如果你想要一个mysqld的临时实例,这样你就可以导入你的转储文件而不会冒任何实际数据的风险,你可以尝试使用像https://www.dbdeployer.com这样的工具启动mysqld的沙盒实例
另一种选择是在创建转储时使用mysqldump --tab
选项。这会将数据写入CSV文件,每个表一个,而不是SQL脚本文件。您可以使用许多工具来处理CSV文件中的数据。甚至还有命令行工具允许您对CSV文件使用SQL(请参阅https://nelsonslog.wordpress.com/2015/08/20/csv-query-tools/)