Automatic retry mechanism for handling connection failures.
use tommyknocker\pdodb\PdoDb;
$db = new PdoDb('mysql', [
'host' => 'localhost',
'username' => 'user',
'password' => 'pass',
'dbname' => 'mydb',
'retry' => [
'enabled' => true,
'max_attempts' => 3,
'delay_ms' => 1000,
'backoff_multiplier' => 2.0,
'max_delay_ms' => 10000
]
]);'retry' => [
'enabled' => true // Enable/disable retry
]'retry' => [
'max_attempts' => 5 // Retry up to 5 times
]'retry' => [
'delay_ms' => 1000 // Start with 1 second delay
]'retry' => [
'backoff_multiplier' => 2.0 // Double delay each retry
]'retry' => [
'max_delay_ms' => 5000 // Cap at 5 seconds
]Attempt 1: Wait 1s
Attempt 2: Wait 2s
Attempt 3: Wait 4s
Attempt 4: Wait 8s
Attempt 5: Wait 10s (capped at max_delay_ms)
'retry' => [
'enabled' => true,
'max_attempts' => 5,
'delay_ms' => 1000,
'backoff_multiplier' => 2.0,
'max_delay_ms' => 5000
]use tommyknocker\pdodb\helpers\DbError;
'retry' => [
'enabled' => true,
'retryable_errors' => DbError::getRetryableErrors('mysql')
]'retry' => [
'enabled' => true,
'retryable_errors' => [
2002, // Can't connect to server
2003, // Connection attempt failed
2006 // MySQL server has gone away
]
]- Connection lost
- Timeouts
- Temporary failures
- Deadlocks
- Authentication failed
- Constraint violations
- Syntax errors
- Missing tables
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
$logger = new Logger('database');
$logger->pushHandler(new StreamHandler('php://stdout'));
$db = new PdoDb('mysql', [
'host' => 'localhost',
'dbname' => 'test',
'retry' => [
'enabled' => true,
'max_attempts' => 3
]
], [], $logger);connection.retry.start- Retry beginsconnection.retry.attempt- Attempt numberconnection.retry.success- Successconnection.retry.exhausted- All attempts failed
// ✅ Good: Quick retries
'retry' => [
'max_attempts' => 3,
'delay_ms' => 500,
'max_delay_ms' => 2000
]
// ❌ Bad: Long retries
'retry' => [
'max_attempts' => 10,
'delay_ms' => 5000
]use tommyknocker\pdodb\helpers\DbError;
$db = new PdoDb('mysql', [
'host' => 'localhost',
'dbname' => 'test',
'retry' => [
'enabled' => true,
'retryable_errors' => DbError::getRetryableErrors('mysql')
]
]);- Exception Hierarchy - Error handling
- Transactions - Transaction management
- Error Codes - Error constants