2017-02-13 2 views
0

У меня есть два сайта site1.dev и site2.dev, указывающие на одно и то же приложение. Я хочу подключить site1.dev к одной базе данных (db1) и site2.dev к другим (db2) и sync db1 to db2. Я выяснил, что использование более двух баз данных возможно, но я действительно хочу синхронизировать все действия db1 с db2. Я также создал таблицу журналов для записи активности для создания, редактирования и удаления. Это схема таблицыLaravel5.3 подключение и синхронизация нескольких баз данных

Schema::create('sync_logs', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->integer('model_id')->nullable()->default(null); 
     $table->string('model')->nullable()->default(null); 
     $table->integer('action')->comment('0=>Create, 1=>Update, 2=>Delete'); 
     $table->text('data'); 
     $table->boolean('synced')->default(0); 
     $table->timestamps(); 
    }); 

я планирую получить все несинхронизированные данные и вставлять данные в db2 в цикле. Возможно ли это? Каковы способы сделать это?

+0

Вы пробовали [репликацию базы данных] (https://en.wikipedia.org/wiki/Replication_ (вычисления) #Database_replication), или вы пытаетесь реализовать это самостоятельно. Если это вторая, пожалуйста, сообщите нам дополнительную информацию о том, когда вы хотите реплицировать базы данных и немного больше для настройки, которую вы ожидаете. например, будут ли базы данных всегда находиться на одной машине? – melanholly

+0

Базы данных не всегда будут находиться на одной машине. db1 будет на клиентской машине и db2 на облачном сервере, но для целей разработки я хочу, чтобы они оба были на моей машине. Когда приложение установлено на клиентской машине, все действия записываются в db1, а db2 будет обновляться каждый день за один раз. – sar

+0

Итак, вы можете использовать https://laravel.com/docs/5.3/scheduling для синхронизации и затухания сериализации всех моделей, которые не были синхронизированы – melanholly

ответ

0

Вы можете сделать это, записав дорожку данных, которые синхронизируются с базой данных. Например, сохраните последний идентификатор таблицы employee в таблице отслеживания и запустите cronjob каждый день, чтобы проверить, превышает ли идентификатор таблицы employee, чем внешний ключ таблицы отслеживания (employee_id), затем синхронизирует данные не синхронизированного сотрудника с DB2.

Смежные вопросы