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
'processlist' => lang('Process list'),
'variables' => lang('Variables'),
'status' => lang('Status'),
+ 'replication' => lang('Replication'),
) as $key => $val) {
if (support($key)) {
echo "<a href='" . h(ME) . "$key='>$val</a>\n";
$_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);
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"])) {
'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.'),
--- /dev/null
+<?php
+page_header(lang('Replication'));
+
+echo "<p><b>" . lang('Master status') . "</b>" . doc_link(array("sql" => "show-master-status.html")) . "\n";
+$master_replication_status = replication_status("MASTER");
+echo "<table cellspacing='0'>\n";
+foreach ($master_replication_status[0] as $key => $val) {
+ echo "<tr>";
+ echo "<th>" . h($key);
+ echo "<td>" . nbsp($val);
+}
+echo "</table>\n";
+
+$slave_replication_status = replication_status("SLAVE");
+if (!empty($slave_replication_status)) {
+ echo "<p><b>" . lang('Slave status') . "</b>" . doc_link(array("sql" => "show-slave-status.html")) . "\n";
+ foreach ($slave_replication_status as $slave) {
+ echo "<table cellspacing='0'>\n";
+ foreach ($slave as $key => $val) {
+ echo "<tr>";
+ echo "<th>" . h($key);
+ echo "<td>" . nbsp($val);
+ }
+ echo "</table>\n";
+ }
+}
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
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) {