AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 975740
Accepted
Bert
Bert
Asked: 2019-07-19 03:58:06 +0800 CST2019-07-19 03:58:06 +0800 CST 2019-07-19 03:58:06 +0800 CST

在 SQL 文件中重写数据

  • 772

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

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

你怎么看,最简单的方法是什么,或者我的解决方案已经是最好的了?正在考虑以某种方式使用该sed命令,但我只是不知道 ATM 如何告诉脚本替换什么,在哪里,多少次以及用什么替换。:/

mysql
  • 3 3 个回答
  • 533 Views

3 个回答

  • Voted
  1. Best Answer
    user532085
    2019-07-19T05:33:30+08:002019-07-19T05:33:30+08:00

    使用 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
    
    • 0
  2. Rick James
    2019-07-19T15:24:05+08:002019-07-19T15:24:05+08:00

    需要考虑的事项:

    • 你“打磁盘”多少次。由于磁盘命中,写入转储文件或 .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.
    • 0
  3. Bert
    2019-07-20T03:30:08+08:002019-07-20T03:30:08+08:00

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

    • https://github.com/arrilot/laravel-data-anonymization
    • https://github.com/fzaninotto/Faker

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

    • 0

相关问题

  • 开源与专有关系 db mgt 系统的优缺点是什么?

  • 在 solaris 10 上为 mysql 设置 max_allowed_pa​​cket

  • 如何移动 MySQL 的数据目录?

  • 通过 VPN 连接什么是远程服务器 IP?

  • mysql崩溃

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve