ashleyhindle / private-dump
CLI 脚本,用于导出 MySQL 数据库,并清理敏感数据输出,适用于开发/测试环境
Requires
- php: ^7.3|^8.0|^8.1|^8.2
- ext-json: *
- dflydev/dot-access-data: ^1.0
- fakerphp/faker: ^1.14.0
- ifsnop/mysqldump-php: ^2.9
- nategood/commando: ^0.3.0
- pelmered/fake-car: ^1.6
Requires (Dev)
- phpunit/phpunit: 9.5.4
- dev-master
- v0.2.2
- v0.2.1
- v0.2
- v0.1.1
- v0.1
- v0.0.7
- v0.0.6
- v0.0.5
- v0.0.4
- v0.0.3
- v0.0.2
- v0.0.1
- dev-feat/value-persistency
- dev-fixup/restore-private-dump
- dev-analysis-vQg7Pl
- dev-update-phar
- dev-pass-params-to-faker-commands
- dev-add-vehicle-options
- dev-add-gravitar-support
- dev-unit-test-action
- dev-php8-support-fakerphp
This package is auto-updated.
Last update: 2024-09-09 11:15:08 UTC
README
Private Dump 是一个 CLI 工具,可以创建 MySQL 数据库的匿名化备份,通常用于开发或测试环境。
它通过读取一个 JSON 配置文件来完成,该文件描述了哪些表列需要修改及其修改方式。
Private Dump 需要 PHP >= 7.3
目录
安装
使用 Composer 安装
composer require ashleyhindle/private-dump
使用 curl 安装
curl -Lo private-dump https://github.com/cazana/private-dump/releases/download/v0.1.1/private-dump chmod a+x private-dump
使用方法
当 private-dump 在有效配置下运行时,它将输出到 stdout,允许您将其重定向到文件或将它传递给另一个程序(用于压缩、传输、加密等)。
Composer:
vendor/bin/private-dump.phar -c private-dump.json > /backups/mysql-backup-with-sensitive-data-overwritten.sql
Curl:
private-dump -c private-dump.json > /backups/mysql-backup-with-sensitive-data-overwritten.sql
您也可以从命令行覆盖 MySQL 用户名、密码和主机名
Composer:
vendor/bin/private-dump.phar -c private-dump.json -u bigben -p bingbong -h rds-213121231-13gb.amazon.com > /backups/mysql-backup-with-sensitive-data-overwritten.sql
Curl:
private-dump -c private-dump.json -u bigben -p bingbong -h rds-213121231-13gb.amazon.com > /backups/mysql-backup-with-sensitive-data-overwritten.sql
注意:最好不在命令行中传递密码,因为它可能会在进程列表中显示,并保留在用户的历史记录中。
配置文件
配置文件是一个包含以下内容的 JSON 字典:
- 数据库连接详情
- 要备份的数据库列表
- 具有替换或转换器的表列表
- 种子器 - 一列可以用作行种子器,以获得连续备份的可重复性
- 保留 - 如果指定列匹配正则表达式,则某些行可以保持原样
- 具有替换或转换器的列
- 限制输出的选项
where- 在检索要备份的数据时添加到查询中:... WHERE xxx...limit- 在检索要备份的数据时添加到查询中:... LIMIT xxx...
示例配置和流行应用的配置位于 configs 目录中。
注释示例配置 - private-dump.json
{
"connection": { -- Database connection details
"username": "bigben",
"password": "bingbong",
"hostname": "192.168.56.81"
},
"databases": { -- Databases to dump - databases not present will not be dumped
"databaseName": { -- All tables in this database are dumped
"tableName": { -- Referenced tables allow replacements
"email_address": "@email", -- Column and its replacement
"full_name": "@fullName",
"is_active": 0, -- Column with hardcoded value
"$options": { -- Special options array for limit/where
"where": "last_login > NOW() - INTERVAL 1 WEEK",
"limit": 25
}
}
},
"databaseTwo": {}, -- Dump entire database and tables, with no replacements
"databaseThree": {
"users": {
"$options": { -- Only options to limit data, no replacements
"where": "is_active=1"
}
}
}
"databaseThree": {
"users": {
"@seed": "id", -- Seed each row using user id, to get repeatability
"@keepif": { -- Keep all rows with emails using domain @ourdomain.com intact
"column": "email",
"regex": "^.*@ourdomain.com$"
}
"first_name": "@user(current_user).firstName",
"last_name": "@user(current_user).lastName",
"email": "@user(current_user).email", - email will be based on the first and last names
}
}
}
}
键值表
Private Dump 通过在配置文件中使用数组来支持替换键值存储中的值,将 value 列与 key 列链接如下
{
"connection": {...},
"databases": {
"wordpress": {
"wp_options": {
"option_value": {
"$link": "option_name",
"$transformers": {
"admin_email": "@email",
"mailserver_pass": "@password",
"autoload": "yes"
}
}
}
}
}
}
这比标准的替换更复杂,但为匿名化所有类型的数据提供了很大的灵活性。
替换
这些功能中的大多数都是由惊人的Faker库实现的。在Faker的文档中列出的所有格式化器都支持在Private Dump的配置文件中
以下所有替换都应该以一个@开头,如下例配置文件所示:示例配置文件。
如果您需要使用硬编码的值(active=0,completed=1),可以在配置文件中省略@:例如"active": 0。
您可以将变量传递给命令,如下所示:@numberBetween|100,1000
文本
original- 原始值,与修饰符一起使用很有用string- 随机长度的字符串,最多255个字符realText- 书籍中的引用loremSentence- 一句LoremloremParagraph- 三句LoremloremParagraphs- 三段Lorem
日期
iso8601- 2019-01-20iso8601Recent- 最近3个月的ISO 8601日期
互联网
email- bigben@example.comurl- https://www.parliament.uk/bigbenipv4ipv6userAgentdomainName- bigben.netslug- big-ben-bing-bong
随机
randomDigit- 单个数字randomNumber- 最多8位数字randomLetterrandomString- 随机长度的字符串,最多255个字符
用户
firstNamelastNametitle- Ms. Mr. Dr.fullName- Brian MayfullAddress- 一行:建筑物号,街道,城市,州/县,邮政编码/邮编buildingNumber- 368streetName- BroadwaystreetAddress- 368 Broadwaycity- Londonpostcode- SW1A 0AAcountry- Englandstate- Texascounty- Londonlatitude- 51.5008longitude--.1246phoneNumberemail- bigben@example.comusername- BigBenpasswordurl- https://www.parliament.uk/bigbenipv4- IPv4地址ipv6- IPv6地址
支付
creditCardType- MastercardcreditCardNumber- 4444 1111 2222 3333creditCardExpirationDate- 04/22creditCardExpirationDateString- '04/13'iban- BI6B3N8497112740YZ575DJ28BP4swiftBicNumber- BIGBEN22263
公司
company- Company-NamejobTitle- Croupier
杂项
booleanmd5sha1sha256countryCode- UKcurrencyCode- EUR
条形码
barcodeEan13barcodeEan8barcodeIsbn13barcodeIsbn10
转换器
uppercaselowercase
这些注释主要供我自己的开发使用,请随意忽略。
开发步骤
- 安装Box
- 修改PHP配置以设置
phar.readonly = Off box buildchmod a+x bin/private-dump.phar
发布流程
- 构建PHAR:
box build - 重命名PHAR:
mv bin/private-dump.phar ./private-dump - 根据
git tag --list的下一个版本更新README.md中的安装说明中的版本 - 标记下一个发布:
git tag -a vx.x.x -m "发布 x.x.x" - 推送:
git push origin --tags - 在GitHub上编辑发布,附加新创建的
bin/private-dump文件