在 SQL 文件中重写数据

在 SQL 文件中重写数据

因此,我在备份服务器上匿名化数据的解决方案.sql如下,我们将 MySQL 数据库的备份存储在文件中:

创建了一个脚本,将.sql文件从备份服务器复制到我的本地工作站,自动将其导入我的数据库服务器,直接匿名化敏感数据,将数据库导出到另一个.sql文件,删除原始文件.sql并删除数据库。因此我最终得到了一个匿名.sql文件。但是,我希望通过直接重写原始.sql文件中的值来使其更快。

您觉得呢?最简单的方法是什么?还是我的解决方案已经是最好的了?我考虑过以sed某种方式使用命令,但我现在不知道如何告诉脚本要替换什么、在哪里替换、替换多少次以及用什么替换。:/

答案1

使用 Mysql 可以轻松地将数据导出和导入为 csv。

因此,也许可以使用循环中的简单 shell 命令来操作数据。这比解析 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

答案2

需要考虑的事项:

  • 您“访问磁盘”的次数是多少?写入转储文件或 .csv 会因为访问磁盘而产生一些成本。有时,解决方法是将步骤“管道化”在一起。
  • UPDATE到位会检查所有事务内容;这会导致额外的点击。所以,也许UPDATEing不是最好的方法。
  • CREATE TABLEDROP 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

答案3

最后,您的所有答案都很好,但并没有提高性能并减少为开发人员提供匿名数据库所需的时间。首先这是我的 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

请忽略本地数据库服务器 root 没有密码的事实。

该 PHP 文件基于这些 GitHub 项目:

只需创建一个知道哪些数据需要匿名化的 php 文件,bash 脚本就会运行它。当然,您需要在本地工作站和 MySQL 服务器上安装 PHP。

相关内容