是否可以在转储期间更改行的内容?

时间:2019-07-08 15:42:14

标签: mysql row updates

我想在哑处理过程中更改某些行的内容,以解决匿名问题。 (例如:姓名/地址/等)

是否有可能,如果可以的话,有人对此有想法吗?

我要转储的数据库的简化版本:

|ID|NAME      |ADDRESS   |JOB            |
|0 |Elizabeth |address 1 |Dentist        |
|1 |Lionel    |address 2 |Baker          |

我想让一些东西像这样:

|ID|NAME      |ADDRESS           |JOB            |
|0 |Charles   |another address 1 |Dentist        |
|1 |Peter     |another address 2 |Baker          |

因此,基本上,我想“随机化”某些列,并保留其他原始列。

2 个答案:

答案 0 :(得分:0)

是的,来自mysqldump的转储是常规文本文件。存在常规的Linux实用程序来修改这些文件,例如trsedawk,您可以使用自己喜欢的编辑器手动对其进行编辑。

对于您来说,要使数据匿名,sed就足够了。确定模式,然后用******代替完全匿名。如果您要替换为看起来真实的数据,例如约翰·史密斯(John Smith),您可以使用awk进行搜索和替换,或以您选择的语言滚动显示自己的语言。

我敢肯定,如果您提供转储中的示例记录,且预期结果,我们可能可以提供完整的工作示例。

答案 1 :(得分:0)

我最终通过对bash脚本进行编码解决了该问题,该脚本的目标是创建一个临时数据库,在其上使用转储文件,以便可以通过一些基本的SQL请求直接编辑数据。

完成此步骤后,脚本将在删除新数据库之前将其转储。

所以我有一个过程:

通过使用gzip压缩实际数据库来转储实际数据库(对于大型数据库超级有用):

array_of_functions.push("first_function('a string')");

for (var Func of array_of_functions) {
   eval(Func);
   }

创建临时数据库:

bot.recognizer(new builder.RegExpRecognizer( "CancelIntent", { en_us: /^(cancel|nevermind)/i, ja_jp: /^(キャンセル)/ }));

将转储应用于新数据库:

mysqldump -h ${HOST} -u ${USER} -p${PASSWORD} $1 | gzip > $2

更新新数据库(在此示例中,我使用soundex匿名化一个简单示例的数据,但是您也可以通过创建另一个包含实名的数据库并随机选择其中的一个来更新此数据库,从而影响实值:

mysql -e "CREATE DATABASE IF NOT EXISTS $1temp" -h ${HOST} -u ${USER} -p${PASSWORD}

将临时数据库转储到“真实数据库”中:

gunzip < $2 | mysql -h ${HOST} -u ${USER} -p${PASSWORD} $1"temp"

最后删除临时数据库:

mysql -e "UPDATE individu SET NAME=SOUNDEX(NAME)" $1"temp"

注意:这可能不是最佳解决方案,但它非常符合我的期望,如果您有更好的解决方案,请在下面写下:)