ezweb / dblinker
3.2.1
2022-10-12 12:13 UTC
Requires
- php: ^7.4 || ^8.1
- cache/apcu-adapter: ^1.0
- doctrine/dbal: ^2.10.1
- psr/cache: ^1.0
Requires (Dev)
- behat/behat: ~3.0
This package is auto-updated.
Last update: 2024-09-12 16:44:50 UTC
README
数据库连接,用于主/从设置。本包提供DBAL的驱动程序。MasterSlavesDriver
用于自动在主服务器和从服务器之间切换,RetryDriver
用于在发生某些错误时重试查询。
安装
运行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