Назад | Перейти на главную страницу

Перезаписать данные в файл SQL

Итак, мое решение анонимизировать данные на нашем сервере резервного копирования, где мы храним резервные копии баз данных MySQL в .sql файлы следующие:

Создал скрипт, копирующий .sql файл с резервного сервера на мою локальную рабочую станцию, автоматически импортирует его на мой сервер базы данных, анонимизирует конфиденциальные данные, экспортирует базу данных в другую .sql файл, удаляет оригинал .sql а также удаляет базу данных. Таким образом, я получаю анонимный .sql файл. Однако я хочу сделать это быстрее, напрямую переписав значения в исходном .sql подать сам.

Как вы думаете, какой для этого самый простой способ или мое решение уже самое лучшее? Думал об использовании sed команда каким-то образом, но я просто понятия не имею, банкомат, как сказать скрипту, что заменить, где, сколько раз и чем. : /

В конце концов, все ваши ответы были хорошими, но не повысили производительность и не сократили время, необходимое для обслуживания анонимной базы данных для разработчиков. Вот мой сценарий bash:

#!/bin/bash

if [ -z "$1" ]; then
    echo ""
    echo "No anonymization PHP file present."
    echo "Please create first a project specific anonymization PHP file!"
    echo ""
    exit
fi

if [ -z "$2" ]; then
    echo ""
    echo "You have not specified where the backup SQL files are located"
    echo "Example: /backup/daily-raid/websites/projectnumberone/sqldump/"
    echo ""
    exit
fi

phpconfig=$1
route=$2

file=$(ssh backup "ls -t $route | head -1 && exit")
dbname=$(echo $file | head -c -11)
dbslug=$(echo $dbname | sed -e "s/-/_/g")
createdb="create database $dbslug"
dropdb="drop table $dbslug"


scp backup:$route$file /home/sysadmin/dumps

mysql -u root -e "$dropdb"
mysql -u root -e "$createdb"
mysql -u root $dbslug < /home/sysadmin/dumps/$file

rm -rf /home/sysadmin/dumps/$file

php $phpconfig $dbslug

exit

Не обращайте внимания на тот факт, что корень локальных серверов БД не имеет пароля.

Файл PHP основан на следующих проектах GitHub:

Просто создайте файл php, который знает, какие данные необходимо анонимизировать, и сценарий bash запустит его. OFC вам необходимо установить PHP на локальную рабочую станцию ​​и сервер MySQL.

Что следует учитывать:

  • Сколько раз вы "ударяете по диску". Запись файла дампа или .csv чего-то стоит из-за попадания на диск. Иногда обходной путь состоит в том, чтобы соединить шаги вместе.
  • UPDATE на месте проходит весь транзакционный материал; это приводит к лишним попаданиям. Так что, возможно UPDATEing не лучший подход.
  • CREATE TABLE и DROP TABLE потребовать некоторых усилий, но не таких, как чтение или запись всей таблицы.

Я бы рассмотрел следующее (если это сработает для вашей ситуации):

CREATE DATABASE AnonDB ...;
USE AnonDB;
CREATE TABLE t1 LIKE RealDB.t1;
INSERT INTO t1
    SELECT id, ok_data, Anonymizer(sensitive_data), ...
        FROM RealDB.t1;
... t2 ...
etc.

Ноты...

  • Необходимость DROP RealDB в конце?
  • Вам нужны функции Anonymizer.
  • Все вручную (какую таблицу преобразовать, какие столбцы и т. Д.).
  • Нет CSV или sed.

С Mysql легко экспортировать и импортировать данные в формате csv.

Таким образом, можно было бы манипулировать данными с помощью простых команд оболочки в цикле. Намного проще, чем разобрать sql.

Такой же простой пример для работы:

for row in $(cat test.csv);
  col1 = (echo $row | cut -d ',' -f 1);
  col2 = (echo $row | cut -d ',' -f 2);
  col3 = "Value to change"
echo "$col1,$col2,$col3" >> outpu.csv
done