Small Zend Framework 2 module which attempts to reconnect when the database has 'gone away'.
In order to do this it overrides Doctrine DBAL Driver provided by the DoctrineORMModule.
I did not invent this method. I just liked it and thought it deserved a zf2 module so it can be reused easily. Credits ought to go to circlical.
php composer.phar require bushbaby/doctrine-reconnect
Then add BsbDoctrineReconnect
to your config/application.config.php
.
Copy the config/bsb-doctrine-reconnect.local.php.dist to your config/autoload/config/bsb-doctrine-reconnect.local.php directory and override the specified driverClass for each connection you have have defined.
<?php
return array(
'doctrine' => array(
'connection' => array(
'orm_default' => array(
'driverClass' => 'BsbDoctrineReconnect\DBAL\Driver\PDOMySql\Driver',
'wrapperClass' => 'BsbDoctrineReconnect\DBAL\Connection',
'params' => array(
'driverOptions' => array(
'x_reconnect_attempts' => 10,
),
)
)
)
),
);
You can manually test this actually works by connecting to mysql from the cli and killing the appropriate connection;
mysql> SHOW PROCESSLIST;
+----+------+-----------+----------+---------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+-----------+----------+---------+------+-------+------------------+
| 1 | root | localhost | database | Sleep | 1 | | NULL |
| 4 | root | localhost | NULL | Query | 0 | NULL | SHOW PROCESSLIST |
+----+------+-----------+----------+---------+------+-------+------------------+
4 rows in set (0.00 sec)
mysql> KILL 1;
Query OK, 0 rows affected (0.00 sec)
This method only works for non transactional statements.