Всё отлично :) Единственное, что мне не по душе в этом варианте - фиксированный таймаут. Если не получится по своему реализовать, буду делать именно такой вариант.
Функция пинга работает, но при сбросе по таймауту говорит, что соединение активно. То есть, запрос "SELECT 1" выполняется корректно. Либо делать принудительный реконнект после определённого промежутка времени, либо продолжать искать косяки. Возможно, что Exception не срабатывает в пинге.
Сначала рассматривал этот вариант, но не стал так делать, потому что
1) с базой работает не только скрипт
2) неизвестно максимальное время соединения
3) если можно проверять и восстанавливать, увеличивать таймаут незачем