ofbeaton / db-ping
Verify a Database server is responding.
Installs: 17
Dependents: 0
Suggesters: 0
Security: 0
Stars: 5
Watchers: 2
Forks: 1
Open Issues: 6
Type:project
Requires
- php: >=5.6.0
- ext-pdo: *
- symfony/console: ^3.2
Requires (Dev)
- jakub-onderka/php-parallel-lint: ^0.9
- ofbeaton/granite: ^1.0
- phing/phing: ^2.16
- phpunit/phpunit: ^5.7
- squizlabs/php_codesniffer: ^2.8
Suggests
- ext-pcntl: Linux signal handling for gracefull CTRL-C
- ext-pdo_mysql: Verify MySQL servers
- ext-pdo_odbc: Verify ODBC connected servers
This package is not auto-updated.
Last update: 2024-11-09 19:59:46 UTC
README
db-ping verifies a database server is responding by executing a query in a timed loop.
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
- Set up your php server for ODBC
- Add the server you'd like to test against to the
/etc/odbc.ini
file (on linux) - 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.