Можно ли изменить содержимое строк во время дампа? - PullRequest
0 голосов
/ 08 июля 2019

Я хотел бы изменить содержание некоторых строк во время тупого процесса для вопросов анонимизации. (напр .: имя / адрес / и т. д.)

Возможно ли это вообще, и если да, у кого-нибудь есть идеи, как это сделать?

Упрощенная версия базы данных, которую я хочу вывести:

|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 голосов
/ 11 июля 2019

Я окончательно решил эту проблему, написав сценарий bash, целью которого является создание временной базы данных, используя для этого файл дампа, чтобы можно было редактировать данные напрямую с некоторыми базовыми запросами SQL.

После этого шагаготово, сценарий будет выгружать эту новую базу данных перед ее удалением.

Итак, я выполнил процесс:

Выгрузил реальную базу данных, используя gzip, чтобы немного сжать ее (супер полезно для большихБазы данных):

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

Создание временной базы данных:

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"

Обновление новой базы данных (в этомВ качестве примера я использую soundex для анонимизации данных в более простом примере, но вы также можете влиять на реальные значения, создав ранее другую базу данных с реальными именами в ней и случайно выбрав некоторые из них для обновления этой:

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

Вывод временной базы данных в «реальную»:

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

И, наконец, удаление временной базы:

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

Примечание.Это оптимальное решение, но оно очень хорошо соответствует моим ожиданиям. Если у вас есть лучшее решение, напишите его ниже:)

0 голосов
/ 08 июля 2019

Да, дамп из mysqldump - это обычный текстовый файл.Существуют обычные утилиты Linux для проверки этих файлов, такие как tr, sed и awk, и вы можете редактировать их вручную, используя ваш любимый редактор.

В вашем случае, чтобы анонимизировать данные,sed должно быть достаточно.Определите шаблон, затем замените ****** на полную анонимность.Если вы хотите заменить реально выглядящие данные, например, Джон Смит, вы можете использовать awk для поиска и замены или перевести свой собственный на выбранный вами язык.

Я уверен, если вы предоставитеПример записи из дампа, с ожидаемым результатом, мы, вероятно, можем предоставить полный рабочий пример.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...