A custom MySQL dialect for Kysely that automatically retries queries when they encounter deadlock errors.
- 🔄 Automatic retry of queries that fail due to deadlocks
- ⚙️ Configurable retry attempts, exponential backoff and delay
- 📊 Optional retry tracking and logging
- 🔌 Drop-in replacement for Kysely's standard MySQL dialect
npm install mysql-dialect-with-deadlock
# or
pnpm add mysql-dialect-with-deadlockimport { Kysely } from 'kysely'
import { createPool } from 'mysql2'
import { MySQLDialectWithDeadlockRetries } from 'mysql-dialect-with-deadlock'
const db = new Kysely({
  dialect: new MySQLDialectWithDeadlockRetries({
    pool: createPool({
      host: 'localhost',
      user: 'root',
      database: 'test'
    }),
    deadlock: {
      maxAttempts: 3,
      onRetry: (error, attempt) => {
        console.log(`Retry attempt ${attempt} after deadlock: ${error.message}`)
      }
    }
  })
})| Option | Type | Default | Description | 
|---|---|---|---|
| maxAttempts | number | 3 | Maximum number of retry attempts | 
| delay | number | 0 | Delay in ms between retries | 
| backoff | boolean | false | Use exponential backoff for delays | 
| onRetry | function | undefined | Callback function called on each retry | 
MIT