jairocgr/datashot

一个用于生成部分数据库备份和数据库脚本的工具

3.0.5 2023-06-16 02:16 UTC

This package is auto-updated.

Last update: 2024-09-16 05:23:26 UTC


README

一个用于生成部分和压缩的数据库快照的工具,用于测试和开发目的。

而不是进行完整的数据库备份,您可以筛选出要备份的行,从而得到一个更小的数据库快照。

要求

要安装和运行 datashot,您必须具备以下条件:

  • PHP >= 5.6 且具备 PDO 扩展
  • zlib PHP 扩展,用于 gzip 压缩
  • MySQL 客户端(路径上的 mysqlmysqldump
  • 路径上的 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 快照器切割 logsusers 表。

然后,它将名为 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文件