ezweb/dblinker

3.2.1 2022-10-12 12:13 UTC

README

数据库连接,用于主/从设置。本包提供DBAL的驱动程序。MasterSlavesDriver用于自动在主服务器和从服务器之间切换,RetryDriver用于在发生某些错误时重试查询。

Build Status Code Status Latest Version License

安装

运行composer require ezweb/dblinker

配置

主/从连接

MysqlMasterSlavesConnection封装了一个MySQL主连接和一个或多个MySQL从连接。它在一个从连接上执行"READ"查询,在主连接上执行"WRITE"查询。

// master and slaves configuration
$master = [
    'driver' => 'mysqli',
    'host' => $masterHostname,
    'user' => $masterUsername,
    'password' => $masterPassword,
    'dbname' => $masterDb,
];

$slaves = [
    [
        'driver' => 'mysqli',
        'host' => $slave1Hostname,
        'user' => $slave1Username,
        'password' => $slave1Password,
        'dbname' => $slave1Db,
        'weight' => $slave1Weight,
    ],
    /** other slaves params **/
];

// connection configuration
$params = [
    'master' => $master,
    'slaves' => $slaves,
    'driverClass' => 'Ez\DbLinker\Driver\MysqlMasterSlavesDriver',
];

// Doctrine\DBAL\Configuration
$connection = Doctrine\DBAL\DriverManager::getConnection($params);

var_dump($connection->fetchColumn('SELECT 1')); // slave
var_dump($connection->exec('INSERT INTO…')); // master

重试连接

MysqlRetryConnection封装了另一个MySQL连接。其目的是在可能自动恢复的情况下,透明地重新执行引发错误的查询。

// master and slaves configuration
$params = [
    'connectionParams' => [
        /** mysql master/slaves, mysqli or pdo_mysql parameters **/
    ],
    'driverClass' => 'Ez\DbLinker\Driver\MysqlRetryDriver',
    'retryStrategy' => new Ez\DbLinker\RetryStrategy\MysqlRetryStrategy,
]

// Doctrine\DBAL\Configuration
$connection = Doctrine\DBAL\DriverManager::getConnection($params);

var_dump($connection->fetchColumn('SELECT 1')); // nothing special
var_dump($connection->exec('SET SESSION WAIT_TIMEOUT = 1'));
sleep(2);
var_dump($connection->fetchColumn('SELECT 1')); // Connection will catch "MySQL has gone away", re-execute the query and return the results as if nothing happened

使用方法

当使用Doctrine\DBAL\DriverManager时,它返回的$connection是一个Doctrine\DBAL\Connection实例,该实例封装了一个或多个*Connection。请参阅其文档以获取更多信息。

注意:您可以将MysqlMasterSlavesConnection嵌套在MysqlRetryConnection中。

测试

要运行测试套件,您需要Docker和Docker-Compose

docker-compose run composer install
docker-compose run behat