PHPackages                             eaudeweb/gdpr-dump - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. eaudeweb/gdpr-dump

ActiveLibrary[Database &amp; ORM](/categories/database)

eaudeweb/gdpr-dump
==================

A drop-in replacement for mysqldump that optionally sanitizes DB fields for better GDPR conformity.

1.0.9(2y ago)0506GPL-2.0-or-laterPHP

Since Jun 7Pushed 2y agoCompare

[ Source](https://github.com/eaudeweb/gdpr-dump)[ Packagist](https://packagist.org/packages/eaudeweb/gdpr-dump)[ RSS](/packages/eaudeweb-gdpr-dump/feed)WikiDiscussions master Synced today

READMEChangelogDependencies (7)Versions (14)Used By (0)

GDPR Dump
=========

[](#gdpr-dump)

A drop-in replacement for mysqldump that optionally sanitizes DB fields for better GDPR conformity.

It is based on the [ifsnop/mysqldump-php](https://github.com/ifsnop/mysqldump-php) library, and can in principle dump any database that PDO supports.

How to use
----------

[](#how-to-use)

There are presently two ways of manipulating data, the first is by manipulating the actual SQL queries that are run on the server (given by the gdpr-expressions path), and the second is by replacing column output before the dump is generated (given by the gdpr-replacements option).

```
$ ../vendor/bin/mysqldump drupal --host=mariadb --user=drupal --password=xxxxxxxx users_field_data --gdpr-expressions='{"users_field_data":{"name":"uid","mail":"uid","pass":"\"\""}}' --debug-sql
...
--
-- Dumping data for table `users_field_data`
--

/* SELECT `uid`,`langcode`,`preferred_langcode`,`preferred_admin_langcode`,uid as name,"" as pass,uid as mail,`timezone`,`status`,`created`,`changed`,`access`,`login`,uid as init,`default_langcode` FROM `users_field_data` */

INSERT INTO `users_field_data` VALUES (0,'en','en',NULL,'0','','0','',0,1523397207,1523397207,0,0,'0',1);
INSERT INTO `users_field_data` VALUES (1,'en','en',NULL,'1','','1','UTC',1,1523397207,1523397207,0,0,'1',1);

```

The fields to obfuscate are passed via a `--gdpr-expressions` parameter. Note that we use `uid` expression to satisfy unique keys.

The same without obfuscation:

```
$ ../vendor/bin/mysqldump drupal --host=mariadb --user=drupal --password=xxxxxxxx users_field_data --debug-sql
...
--
-- Dumping data for table `users_field_data`
--

/* SELECT `uid`,`langcode`,`preferred_langcode`,`preferred_admin_langcode`,`name`,`pass`,`mail`,`timezone`,`status`,`created`,`changed`,`access`,`login`,`init`,`default_langcode` FROM `users_field_data` */

INSERT INTO `users_field_data` VALUES (0,'en','en',NULL,'',NULL,NULL,'',0,1523397207,1523397207,0,0,NULL,1);
INSERT INTO `users_field_data` VALUES (1,'en','en',NULL,'admin','$S$Eb6kZl.9OFjoa69Z05pzUhaZJ6vpKaGZVpnjAxxLJ7ip0zOwanEV','admin@example.com','UTC',1,1523397207,1523397207,0,0,'admin@example.com',1);

```

### Using gdpr-replacements

[](#using-gdpr-replacements)

This uses [Faker](https://packagist.org/packages/fzaninotto/faker) for most of the column sanitization.

Presently, the tool searches for the "gdpr-replacements" option, either passed as a command line argument, or as part of a [MySql options file](https://dev.mysql.com/doc/refman/8.0/en/option-files.html).

The "gdpr-replacements" option expects a JSON string with the following format

```
{"tableName" : {"columnName1": {"formatter": "formatterType", ...}, {"columnName2": {"formatter": "formatterType"}, ...}, ...}

```

Where *formatterType* is one of the following

- **name** - generates a name
- **phoneNumber** - generates a phone number
- **username** - generates a random user name
- **password** - generates a random password
- **email** - generates a random email address
- **date** - generates a date
- **longText** - generates a sentence
- **number** - generates a number
- **randomText** - generates a sentence
- **text** - generates a paragraph
- **uri** - generates a URI
- **clear** - generates an empty string

This will replace the given column's value with Faker output.

You can also save replacements mapping to JSON file and use it with `--gdpr-replacements-file` option.

Use with drush
--------------

[](#use-with-drush)

As this mimicks mysqldump, it can be use with drush, backup\_migrate and any tool that uses mysqldump. Drush example:

```
$ export PATH=/var/www/html/vendor/bin:$PATH
$ which mysqldump
/var/www/html/vendor/bin/mysqldump
$ drush sql-dump --tables-list=users_field_data --extra-dump=$'--gdpr-expressions=\'{"users_field_data":{"name":"uid","mail":"uid","init":"uid","pass":"\\"\\""}}\' --debug-sql'

```

### MySqlOptions file

[](#mysqloptions-file)

You are able to have your gdpr-expressions/replacement options set in a mysql options file file. It is to appear under the `[mysqldump]` section.

So, for example, you might have `/etc/my.cnf` with the following content

```
[mysqldump]
gdpr-replacements='{"fakertest":{"name": {"formatter":"name"}, "telephone": {"formatter":"phoneNumber"}}}'

```

Status and further development
------------------------------

[](#status-and-further-development)

Currently this is a proof of concept to spark a community process. Especially the `--gdpr-expressions` option is neither handy to write for humans, nor does it scale well. Here we might need better options.

Contributors notes
------------------

[](#contributors-notes)

- Note that the project follows [PSR-2](https://www.php-fig.org/psr/psr-2/) for formatting.

###  Health Score

32

—

LowBetter than 69% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity16

Limited adoption so far

Community12

Small or concentrated contributor base

Maturity67

Established project with proven stability

 Bus Factor1

Top contributor holds 50.6% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~171 days

Recently: every ~364 days

Total

10

Last Release

1038d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/c740dfce079c47e84c025ae41027543e35f7a2906a330f0ee2bdc5b42e86a229?d=identicon)[cristiroma](/maintainers/cristiroma)

---

Top Contributors

[![bomoko](https://avatars.githubusercontent.com/u/297936?v=4)](https://github.com/bomoko "bomoko (39 commits)")[![geek-merlin](https://avatars.githubusercontent.com/u/15613398?v=4)](https://github.com/geek-merlin "geek-merlin (19 commits)")[![stefanbutura](https://avatars.githubusercontent.com/u/26040792?v=4)](https://github.com/stefanbutura "stefanbutura (8 commits)")[![calimanleontin](https://avatars.githubusercontent.com/u/12694495?v=4)](https://github.com/calimanleontin "calimanleontin (6 commits)")[![Jancis](https://avatars.githubusercontent.com/u/635571?v=4)](https://github.com/Jancis "Jancis (3 commits)")[![balintbrews](https://avatars.githubusercontent.com/u/297418?v=4)](https://github.com/balintbrews "balintbrews (1 commits)")[![beuss](https://avatars.githubusercontent.com/u/3670731?v=4)](https://github.com/beuss "beuss (1 commits)")

---

Tags

drupal

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/eaudeweb-gdpr-dump/health.svg)

```
[![Health](https://phpackages.com/badges/eaudeweb-gdpr-dump/health.svg)](https://phpackages.com/packages/eaudeweb-gdpr-dump)
```

###  Alternatives

[matomo/matomo

Matomo is the leading Free/Libre open analytics platform

21.7k38.9k](/packages/matomo-matomo)[sylius/sylius

E-Commerce platform for PHP, based on Symfony framework.

8.5k5.9M736](/packages/sylius-sylius)[drupal/core

Drupal is an open source content management platform powering millions of websites and applications.

21866.0M1.7k](/packages/drupal-core)[flow-php/flow

PHP ETL - Extract Transform Load - Data processing framework

85036.3k](/packages/flow-php-flow)[blackfire/player

A powerful web crawler and web scraper with Blackfire support

49617.1k](/packages/blackfire-player)[civicrm/civicrm-core

Open source constituent relationship management for non-profits, NGOs and advocacy organizations.

751291.4k43](/packages/civicrm-civicrm-core)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
