Перейти к основному содержимому

Как настроить Pimcore для использования соединения с базами данных Primary/Replica

Важно : Обратите внимание, что конфигурация соединения Primary/Replica может использоваться только для кластерных сред MariaDB/MySQL. Она НЕ подходит для стандартной настройки серверов Primary/Replica с асинхронной репликацией! Из-за использования в Pimcore сложной многоуровневой системы согласованного кэширования с тегами необходимо, чтобы система всегда имела доступ к самым актуальным данным в базе. Из-за асинхронной природы обычной репликации актуальность данных не может быть гарантирована.

Создайте специфичный для проекта класс соединения с БД

Создайте новый класс по пути src/Db/Connection.php со следующим содержимым:

<?php  

namespace App\Db;

use Doctrine\DBAL\Connections\PrimaryReadReplicaConnection;

class Connection extends PrimaryReadReplicaConnection
{
/**
* @param string|null $connectionName
*/
public function connect($connectionName = null): bool
{
$returnValue = parent::connect($connectionName);

if ($returnValue) {
$this->_conn->query('SET default_storage_engine=InnoDB;');
$this->_conn->query("SET sql_mode = '';");
}

return $returnValue;
}
}

Настройте соединение Primary/Replica

Основное соединение с базой данных, которое вы настроили для Pimcore, всегда является основным (Primary). Вы можете добавить столько реплик, сколько захотите. В следующем примере показана настройка с одной репликой, где изменен только хост (в нашем случае replica1), а все остальные параметры наследуются от основного соединения.

doctrine:  
dbal:
connections:
default:
wrapper_class: '\App\Db\Connection'
replicas:
replica1:
host: 'replica1'
port: 3306
dbname: dbname
user: username
password: password
charset: UTF8MB4


Вы можете предложить улучшение документации или задать вопрос в комментариях.
Если вам нужна полноценная консультация — вы можете заказать её на нашем сайте.