khaleejinfotech / laravel-db-sync
同步远程数据库到本地数据库或反之亦然
v1.0.5
2023-01-04 12:47 UTC
Requires
- ext-json: *
README
简介
同步远程数据库到本地数据库或反之亦然
注意 这需要远程MySQL连接来同步数据库,并且需要在database.php中定义
安装
安装此包。
注意:此扩展在Laravel 8及以上版本中工作。
composer require khaleejinfotech/laravel-db-sync
配置
您可以使用以下命令发布配置文件
php artisan vendor:publish --provider="Khaleejinfotech\LaravelDbSync\LaravelDbSyncServiceProvider" --tag="laravel-db-sync"
数据库连接
在您的 config/database.php 文件中设置远程数据库凭据
'connections' => [
...
'mysql_remote' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
...
],
观察记录
要观察记录的变化并与远程/本地数据库同步,必须在模型上使用 use Syncable,默认情况下,此包使用其自己的观察者,但您可以替换为具有相同代码的观察者以及您自己的自定义逻辑。
您可以从 config/laravel-db-sync.php 文件中替换观察者类。
...
'observer_class' => \Khaleejinfotech\LaravelDbSync\Observers\ModelObserver::class,
...
注意:观察者方法仅在Eloquent模型上触发。
忽略模型
您还可以创建一个使用 use Syncable 的基模型,并扩展您的子模型,在这种情况下,如果您想忽略某些模型,您可以在 config/laravel-db-sync.php 文件中指定,如下所示
...
'ignore_models' => [
// Models to be ignored if sync booted in base model.
User::class,
],
...
定义目标/远程服务器。
在 config/database.php 文件中设置连接后,您必须添加需要同步数据的数据同步连接名称。
'targets' => [
// database connection names
'mysql_remote',
],
注意:请在此处仅指定远程连接,否则可能会导致数据重复或出现错误。
处理模型的上传文件
如果一个模型处理文件,那么在配置文件中应定义模型的列,以便文件可以同步到本地/远程服务器。
...
/*\App\Models\Model::class => [
[
'column_name' => 'photo',
'remote_disks' => [
// remote disks locations from filesystem config file.
'ftp'
],
'local_disk' => 'public',
'upload_path_local' => 'folder',
'upload_path_remote' => 'folder',
]
],*/
...
事件
命令
用法
通过运行以下命令将本地数据库同步到远程
这将为每个需要同步的记录创建一个作业。
php artisan sync:local
之后,您需要运行队列
php artisan queue:work
通过运行以下命令将远程数据库同步到本地
这将为每个需要同步的记录创建一个作业。
php artisan sync:remote
之后,您需要运行队列
php artisan queue:work
建议: 配置调度器以自动化同步命令。
