Skip to content

ofbeaton/db-ping

Repository files navigation

db-ping

db-ping verifies a database server is responding by executing a query in a timed loop.

Latest Stable Version Minimum PHP Version Build Status

Optionally includes slave replication checks.

PHP 5.6+ console command that uses PDO to provide the database drivers:

  • MySQL
  • ODBC (i.e. Microsoft SQL Server ...)

Updates

The project is considered in a usable state and feature complete.

This project is used in corporate applications. As such, the authors are unlikely to update it on a regular basis, but instead when the corporate applications that use it run into problems. You should expect updates in the 5-10yr range.

Issues and PRs will be monitored, and we will continue to work with the community to provide updates as they are contributed.

Installing via phar

Before proceeding, you need a working PHP 5.6+ installation.

The recommended way to install db-ping is by downloading the phar.

See Releases for downloads.

Next, run the phar from the command line:

php db-ping.phar help

php db-ping.phar mysql --pass=mysecretpassword

php db-ping.phar ODBC -d OdbcName -u user -p password

Testing

Smoke test

If there is no mysql server running locally, pinging will give a connection refused error as below

$ php bin/db-ping mysql
DB-PING 127.0.0.1:3306
from 127.0.0.1:3306: connection refused. delay=2000ms, exec=0ms, since success=0s, since fail=0s
from 127.0.0.1:3306: connection refused. delay=2000ms, exec=0ms, since success=0s, since fail=2.0006s

Against a real MySql server

Launch a temporary mysql server:

docker run --name some-mysql --rm -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -p 3306:3306 mysql

Wait a few seconds while it initializes, then open another terminal and ping it:

$ php bin/db-ping mysql -u user -p pass
DB-PING 127.0.0.1:3306
from 127.0.0.1:3306: connected. delay=2000ms, exec=0ms, since success=0s, since fail=0s
from 127.0.0.1:3306: check passed. delay=2000ms, exec=0ms, since success=0s, since fail=0s
from 127.0.0.1:3306: check passed. delay=2000ms, exec=0ms, since success=2.0022s, since fail=0s
from 127.0.0.1:3306: check passed. delay=2000ms, exec=0ms, since success=4.0028s, since fail=0s

To stop the dockerfile: docker stop some-mysql

Against a real database server via ODBC

  1. Set up your php server for ODBC
  2. Add the server you'd like to test against to the /etc/odbc.ini file (on linux)
  3. Ping it
$ php bin/db-ping ODBC -d MarketflowAcc -u rou -p rou
DB-PING odbc:MarketflowAcc
from odbc:MarketflowAcc: connected. delay=2000ms, exec=0ms, since success=0s, since fail=0s
from odbc:MarketflowAcc: check passed. delay=2000ms, exec=0ms, since success=0s, since fail=0s
from odbc:MarketflowAcc: check passed. delay=2000ms, exec=0ms, since success=2.0058s, since fail=0s
from odbc:MarketflowAcc: check passed. delay=2000ms, exec=0ms, since success=4.0071s, since fail=0s
from odbc:MarketflowAcc: check passed. delay=2000ms, exec=0ms, since success=6.0083s, since fail=0s

The ping SQL query can be repeated more than once per ping with the repeat option. This is useful to make the ping test more stressful:

$ php bin/db-ping ODBC -d MarketflowAcc -u rou -p rou --repeat 100

The output format can be controlled with the format option:

$ php bin/db-ping ODBC -d MarketflowAcc -u rou -p rou --repeat 100 --format te
DB-PING odbc:MarketflowAcc
2017-01-11 14:55:35, 0
2017-01-11 14:55:35, 3
2017-01-11 14:55:37, 3
2017-01-11 14:55:39, 3
2017-01-11 14:55:41, 3

Also, et instead of te would shuffle the order

Unit tests

Run vbin/phing check

License

This software is distributed under the MIT License. Please see License file for more information.