Laravel 5.7 проблемы с миграцией разделенной базы данных для чтения и записи

Я испытываю следующий сценарий:

Я хочу разделить свою базу данных на отдельные базы данных для чтения и записи. По этой причине я настроил config/database.php

    'mysql' => [
        'driver' => 'mysql',
        'write' => ['host' => env('DB_HOST_WRITE', 'localhost'),],
        'read'  => ['host' => env('DB_HOST_READ', 'localhost'),],
        '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' => '',
        'strict' => true,
        'engine' => null,
    ],

Для DB_HOST_WRITE и DB_HOST_READ я установил IP-адреса серверов, на которых работают базы данных.

Для DB_DATABASE, DB_USERNAME, DB_PASSWORD я установил имя базы данных и учетные данные для входа.

Оба сервера доступны, когда я пытаюсь получить к ним доступ с помощью команд консоли mysql, например: mysql -u USERNAME -h IPADDRESS -p

Вот проблема: когда я пытаюсь запустить свои миграции с третьего сервера, как этот

php artisan migrate

Но настраивается только база данных записи.

Это ожидаемое поведение?

Должен ли я вручную переносить каждую базу данных?

Есть ли флаг для команды миграции, который позволяет мне указать соединение, на которое я хочу выполнить миграцию?

Я не могу найти ничего о миграции базы данных для чтения и записи, когда я ищу это в Google.

Дальнейшая настройка базы данных не производилась. Моим источником информации является следующее руководство: https://laravel.com/docs/5.7/database#read-and-write-connections

Ссылки на полезные руководства или предложения решений очень приветствуются.

Спасибо за внимание.


person Richard Wieditz    schedule 12.02.2019    source источник
comment
Как у вас настроена репликация базы данных между вашими базами данных?   -  person Travis Britz    schedule 13.02.2019
comment
Возможный дубликат stackoverflow.com/ вопросы/26654846/   -  person Travis Britz    schedule 13.02.2019


Ответы (1)


@Travis Britz: Спасибо за подсказку. Мне не хватало термина «Репликация MySQL», что не комментируется в документации laravel. Я ошибочно думал, что алгоритмы laravel самостоятельно обрабатывают синхронизацию, чего на самом деле не происходит.

Синхронизация между серверами баз данных осуществляется внутренними механизмами MySQL.

введите здесь описание изображения

С помощью этих алгоритмов MySQL я смог создать подобную структуру связи, что может быть обычной задачей на этапе развертывания веб-приложений:

введите здесь описание изображения

Я следовал этому руководству Digital Ocean, чтобы настроить репликацию mysql вручную: https://www.digitalocean.com/community/tutorials/how-to-set-up-master-slave-replication-in-mysql

Digital Ocean — поставщик серверов, на котором я размещаю свои приложения.

Изображения взяты с: https://www.toptal.com/mysql/mysql-master-slave-replication-tutorial

С наилучшими пожеланиями.

person Richard Wieditz    schedule 13.02.2019