Как настроить 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
Вы можете предложить улучшение документации или задать вопрос в комментариях.
Если вам нужна полноценная консультация — вы можете заказать её на нашем сайте.