jairocgr / datashot
一个用于生成部分数据库备份和数据库脚本的工具
Requires
- php: >=7.0
- ext-pdo: *
- ext-zlib: *
- league/flysystem-aws-s3-v3: ^1
- league/flysystem-sftp: ^1
- symfony/console: ^5
- symfony/process: ^5
- vlucas/phpdotenv: ^5
Requires (Dev)
- phpunit/phpunit: ^7
README
一个用于生成部分和压缩的数据库快照的工具,用于测试和开发目的。
而不是进行完整的数据库备份,您可以筛选出要备份的行,从而得到一个更小的数据库快照。
要求
要安装和运行 datashot,您必须具备以下条件:
- PHP >= 5.6 且具备 PDO 扩展
zlib
PHP 扩展,用于 gzip 压缩- MySQL 客户端(路径上的
mysql
和mysqldump
) - 路径上的 gzip
- Composer 依赖管理器
安装
通过 composer 作为常规包安装
composer require jairocgr/datashot
使用方法
您可以将其作为命令行工具调用
php vendor/bin/datashot --help
入门
使用 datashot
,您可以筛选出要备份的行,从而得到一个更小的数据库备份。
您可以将巨大的多吉字节数据库缩小为小型的 gzip 文件,以便在预演和本地开发环境中恢复。
这种功能对于解决生产中的问题以及获得更好的开发体验非常有用,这些体验使用真实的数据来反映您的应用程序使用情况,而不是模拟或种子模式。
例如,您可以使用 datashot
对当前季度的订单进行数据库备份。
您还可以执行其他操作,例如:
- 从主机完全
复制
数据库到另一个主机 恢复
到数据库主机的现有备份- 通过
cp
命令从 SFTP 或 S3 存储库上传/下载备份。
配置
第一步是在应用程序存储库的根目录中设置 datashot.config.php
文件。
这是一个配置文件,您在其中设置数据库主机、密码以及用于切割数据库的 SQL WHERE
子句。
有关更完整和注释的配置文件,请参阅此存储库根目录中的示例
datashot.config.php
文件。
数据库主机
您必须配置所有数据库才能与其一起工作。
return [ 'database_servers' => [ // A database server called 'live1' 'live1' => [ // Only mysql for now, maby postgres in the future 'driver' => 'mysql', // The env function will read from the environment or .env file 'socket' => env('MYSQL56_SOCKET', ''), 'host' => env('MYSQL56_HOST', 'localhost'), 'port' => env('MYSQL56_PORT', 3306), 'user' => env('MYSQL56_USER', 'root'), 'password' => env('MYSQL56_PASSWORD', 'root'), // If you mark it as a 'production' server, a confirmation question // will be pronted in every execution and no drop action will // be performed for safety reasons 'production' => TRUE ] ] ];
存储库
您必须设置存储备份的存储库。
return [ 'repositories' => [ 'local' => [ 'driver' => 'fs', 'path' => __DIR__ . '/snaps' // Local snaps directory ], 'remote' => [ 'driver' => 's3', 'bucket' => env('S3_BUCKET'), 'region' => env('S3_REGION'), // 'profile' => 'remote', 'access_key' => env('S3_ACESS_KEY'), 'secret_key' => env('S3_SECRET_ACESS_KEY'), 'base_path' => 'snaps' // Remote path will be like s3://bucket-name/snaps ], ], ];
快照器
快照器告诉 datashot
如何切割数据库。
return [ 'snappers' => [ 'quick' => [ // If you want to snap the rows only // 'data_only' => TRUE, // If you wanna dump only the ddl, triggers, functions, etc. // 'no_data' => TRUE, // Custom made user-defined property for later interpolation 'cutoff' => '(NOW() - INTERVAL 3 MONTH)', // Table-specific where used to filter the rows witch will be dumped 'wheres' => [ // Interpolate the 'cutoff' parameter in the where clause for the // "logs" table 'logs' => "created_at > '{cutoff}'", // Bring only the active users 'users' => 'active = TRUE', ], ] ] ];
您的第一个快照
要使用先前配置的文件生成数据库快照
php vendor/bin/datashot snap myerp --from live1 --to remote:quick_snap --snapper quick
然后,datashot
将从运行在生产服务器 live1
内的 myerp
方案中生成适当的 mysqldump
,并使用 quick
快照器切割 logs
和 users
表。
然后,它将名为 quick.gz
的文件上传到先前在 datashot.config.php
配置文件中配置的远程 s3 存储库 remote
。
恢复快照
您可以使用 datashot
下载和 恢复
快照
php vendor/bin/datashot restore remote:quick --to dev --database myerp_dev
上述命令将下载先前拍摄的 quick
快照,将其恢复为 dev
数据库服务器上的 myerp_dev
方案。
您还可以像常规 gziped SQL 备份文件一样恢复快照
gunzip < path/to/quick.gz | mysql -h localhost myerp
致谢
我向 ifsnop/mysqldump-php 致敬,感谢其提供了如何通过 PHP/PDO 导出 MySQL 数据库的见解。
许可协议
本项目采用MIT许可证 - 有关详细信息,请参阅LICENSE文件