diff --git a/adminer/drivers/mysql.inc.php b/adminer/drivers/mysql.inc.php index 9e49330e..806ca949 100644 --- a/adminer/drivers/mysql.inc.php +++ b/adminer/drivers/mysql.inc.php @@ -972,6 +972,14 @@ if (!defined("DRIVER")) { return get_key_vals("SHOW STATUS"); } + /** Get replication status of master or slave + * @param string + * @return array ($name => $value) + */ + function replication_status($type) { + return get_rows("SHOW $type STATUS"); + } + /** Convert field in select and edit * @param array one element from fields() * @return string diff --git a/adminer/include/connect.inc.php b/adminer/include/connect.inc.php index b008faf7..70cb6d3c 100644 --- a/adminer/include/connect.inc.php +++ b/adminer/include/connect.inc.php @@ -17,6 +17,7 @@ function connect_error() { 'processlist' => lang('Process list'), 'variables' => lang('Variables'), 'status' => lang('Status'), + 'replication' => lang('Replication'), ) as $key => $val) { if (support($key)) { echo "$val\n"; @@ -77,7 +78,7 @@ if (isset($_GET["import"])) { $_GET["sql"] = $_GET["import"]; } -if (!(DB != "" ? $connection->select_db(DB) : isset($_GET["sql"]) || isset($_GET["dump"]) || isset($_GET["database"]) || isset($_GET["processlist"]) || isset($_GET["privileges"]) || isset($_GET["user"]) || isset($_GET["variables"]) || $_GET["script"] == "connect" || $_GET["script"] == "kill")) { +if (!(DB != "" ? $connection->select_db(DB) : isset($_GET["sql"]) || isset($_GET["dump"]) || isset($_GET["database"]) || isset($_GET["processlist"]) || isset($_GET["privileges"]) || isset($_GET["user"]) || isset($_GET["replication"]) || isset($_GET["variables"]) || $_GET["script"] == "connect" || $_GET["script"] == "kill")) { if (DB != "" || $_GET["refresh"]) { restart_session(); set_session("dbs", null); diff --git a/adminer/index.php b/adminer/index.php index 88cbcec2..5620c952 100644 --- a/adminer/index.php +++ b/adminer/index.php @@ -65,6 +65,8 @@ if (isset($_GET["download"])) { include "./user.inc.php"; } elseif (isset($_GET["processlist"])) { include "./processlist.inc.php"; +} elseif (isset($_GET["replication"])) { + include "./replication.inc.php"; } elseif (isset($_GET["select"])) { include "./select.inc.php"; } elseif (isset($_GET["variables"])) { diff --git a/adminer/lang/xx.inc.php b/adminer/lang/xx.inc.php index 79db0b08..fe24b81a 100644 --- a/adminer/lang/xx.inc.php +++ b/adminer/lang/xx.inc.php @@ -45,6 +45,10 @@ $translations = array( 'Variables' => 'Xx', 'Status' => 'Xx', + 'Replication' => 'Xx', + 'Master status' => 'Xx', + 'Slave status' => 'Xx', + 'SQL command' => 'Xx', '%d query(s) executed OK.' => array('Xx.', 'Xx.'), 'Query executed OK, %d row(s) affected.' => array('Xx.', 'Xx.'), diff --git a/adminer/replication.inc.php b/adminer/replication.inc.php new file mode 100644 index 00000000..bd25841d --- /dev/null +++ b/adminer/replication.inc.php @@ -0,0 +1,26 @@ +" . lang('Master status') . "" . doc_link(array("sql" => "show-master-status.html")) . "\n"; +$master_replication_status = replication_status("MASTER"); +echo "\n"; +foreach ($master_replication_status[0] as $key => $val) { + echo ""; + echo "
" . h($key); + echo "" . nbsp($val); +} +echo "
\n"; + +$slave_replication_status = replication_status("SLAVE"); +if (!empty($slave_replication_status)) { + echo "

" . lang('Slave status') . "" . doc_link(array("sql" => "show-slave-status.html")) . "\n"; + foreach ($slave_replication_status as $slave) { + echo "\n"; + foreach ($slave as $key => $val) { + echo ""; + echo "
" . h($key); + echo "" . nbsp($val); + } + echo "
\n"; + } +} diff --git a/changes.txt b/changes.txt index af858fa7..5320d390 100644 --- a/changes.txt +++ b/changes.txt @@ -2,6 +2,7 @@ Adminer 4.2.6-dev: Add accessibility labels Make maxlength in edit fields a soft limit Add Cache-Control: immutable to static files +MySQL: Add dedicated view for replication status PostgreSQL: Export PostgreSQL: Don't treat partial indexes as unique MS SQL: Support pdo_dblib diff --git a/compile.php b/compile.php index fef45fb0..354b1cf6 100755 --- a/compile.php +++ b/compile.php @@ -343,7 +343,7 @@ foreach (glob(dirname(__FILE__) . "/adminer/drivers/" . ($driver ? $driver : "*" include dirname(__FILE__) . "/adminer/include/pdo.inc.php"; include dirname(__FILE__) . "/adminer/include/driver.inc.php"; -$features = array("call" => "routine", "dump", "event", "privileges", "procedure" => "routine", "processlist", "routine", "scheme", "sequence", "status", "trigger", "type", "user" => "privileges", "variables", "view"); +$features = array("call" => "routine", "dump", "event", "privileges", "procedure" => "routine", "processlist", "routine", "scheme", "sequence", "status", "trigger", "type", "user" => "privileges", "replication", "variables", "view"); $lang_ids = array(); // global variable simplifies usage in a callback function $file = file_get_contents(dirname(__FILE__) . "/$project/index.php"); if ($driver) {