Fix indentation for gsoc replication code
make it match the included modeline, and fixed some other spacing issues
This commit is contained in:
@@ -339,28 +339,31 @@ foreach ($tables as $keyname => $each_table) {
|
|||||||
$do = false;
|
$do = false;
|
||||||
|
|
||||||
if ($server_slave_status) {
|
if ($server_slave_status) {
|
||||||
////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
if ((strlen(array_search($truename, $server_slave_Do_Table))>0) || (strlen(array_search($db, $server_slave_Do_DB))>0) || (count($server_slave_Do_DB)==1 && count($server_slave_Ignore_DB)==1)) {
|
if ((strlen(array_search($truename, $server_slave_Do_Table)) > 0)
|
||||||
$do = true;
|
|| (strlen(array_search($db, $server_slave_Do_DB))>0)
|
||||||
}
|
|| (count($server_slave_Do_DB)==1 && count($server_slave_Ignore_DB)==1)
|
||||||
foreach ($server_slave_Wild_Do_Table as $table) {
|
) {
|
||||||
if (($db == PMA_replication_strout($table)) && (ereg("^".substr(PMA_replication_strout($table, true), 0, strlen(PMA_replication_strout($table, true))-1), $truename)))
|
$do = true;
|
||||||
$do = true;
|
}
|
||||||
}
|
foreach ($server_slave_Wild_Do_Table as $table) {
|
||||||
////////////////////////////////////////////////////////////////////
|
if (($db == PMA_replication_strout($table)) && (ereg("^".substr(PMA_replication_strout($table, true), 0, strlen(PMA_replication_strout($table, true))-1), $truename)))
|
||||||
if ((strlen(array_search($truename, $server_slave_Ignore_Table))>0) || (strlen(array_search($db, $server_slave_Ignore_DB))>0)) {
|
$do = true;
|
||||||
$ignored = true;
|
}
|
||||||
}
|
////////////////////////////////////////////////////////////////////
|
||||||
foreach ($server_slave_Wild_Ignore_Table as $table) {
|
if ((strlen(array_search($truename, $server_slave_Ignore_Table))>0) || (strlen(array_search($db, $server_slave_Ignore_DB))>0)) {
|
||||||
if (($db == PMA_replication_strout($table)) && (ereg("^".substr(PMA_replication_strout($table, true), 0, strlen(PMA_replication_strout($table, true))-1), $truename)))
|
$ignored = true;
|
||||||
$ignored = true;
|
}
|
||||||
}
|
foreach ($server_slave_Wild_Ignore_Table as $table) {
|
||||||
|
if (($db == PMA_replication_strout($table)) && (ereg("^".substr(PMA_replication_strout($table, true), 0, strlen(PMA_replication_strout($table, true))-1), $truename)))
|
||||||
|
$ignored = true;
|
||||||
|
}
|
||||||
}/* elseif ($server_master_status) {
|
}/* elseif ($server_master_status) {
|
||||||
if ((strlen(array_search($db, $server_master_Do_DB))>0) || count($server_master_Do_DB)==1)
|
if ((strlen(array_search($db, $server_master_Do_DB))>0) || count($server_master_Do_DB)==1)
|
||||||
$do = true;
|
$do = true;
|
||||||
elseif ((strlen(array_search($db, $server_master_Ignore_DB))>0) || count($server_master_Ignore_DB)==1)
|
elseif ((strlen(array_search($db, $server_master_Ignore_DB))>0) || count($server_master_Ignore_DB)==1)
|
||||||
$ignored = true;
|
$ignored = true;
|
||||||
}*/
|
}*/
|
||||||
?>
|
?>
|
||||||
<tr class="<?php echo $odd_row ? 'odd' : 'even'; $odd_row = ! $odd_row; ?>">
|
<tr class="<?php echo $odd_row ? 'odd' : 'even'; $odd_row = ! $odd_row; ?>">
|
||||||
|
@@ -21,352 +21,357 @@ $server_master_replication = PMA_DBI_fetch_result('SHOW MASTER STATUS');
|
|||||||
$server_slave_replication = PMA_DBI_fetch_result('SHOW SLAVE STATUS');
|
$server_slave_replication = PMA_DBI_fetch_result('SHOW SLAVE STATUS');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* replication types
|
* replication types
|
||||||
*/
|
*/
|
||||||
$replication_types = array('master', 'slave');
|
$replication_types = array('master', 'slave');
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* define variables for master status
|
* define variables for master status
|
||||||
*/
|
*/
|
||||||
$master_variables = array(
|
$master_variables = array(
|
||||||
'File',
|
'File',
|
||||||
'Position',
|
'Position',
|
||||||
'Binlog_Do_DB',
|
'Binlog_Do_DB',
|
||||||
'Binlog_Ignore_DB'
|
'Binlog_Ignore_DB'
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Define variables for slave status
|
* Define variables for slave status
|
||||||
*/
|
*/
|
||||||
$slave_variables = array(
|
$slave_variables = array(
|
||||||
'Slave_IO_State',
|
'Slave_IO_State',
|
||||||
'Master_Host',
|
'Master_Host',
|
||||||
'Master_User',
|
'Master_User',
|
||||||
'Master_Port',
|
'Master_Port',
|
||||||
'Connect_Retry',
|
'Connect_Retry',
|
||||||
'Master_Log_File',
|
'Master_Log_File',
|
||||||
'Read_Master_Log_Pos',
|
'Read_Master_Log_Pos',
|
||||||
'Relay_Log_File',
|
'Relay_Log_File',
|
||||||
'Relay_Log_Pos',
|
'Relay_Log_Pos',
|
||||||
'Relay_Master_Log_File',
|
'Relay_Master_Log_File',
|
||||||
'Slave_IO_Running',
|
'Slave_IO_Running',
|
||||||
'Slave_SQL_Running',
|
'Slave_SQL_Running',
|
||||||
'Replicate_Do_DB',
|
'Replicate_Do_DB',
|
||||||
'Replicate_Ignore_DB',
|
'Replicate_Ignore_DB',
|
||||||
'Replicate_Do_Table',
|
'Replicate_Do_Table',
|
||||||
'Replicate_Ignore_Table',
|
'Replicate_Ignore_Table',
|
||||||
'Replicate_Wild_Do_Table',
|
'Replicate_Wild_Do_Table',
|
||||||
'Replicate_Wild_Ignore_Table',
|
'Replicate_Wild_Ignore_Table',
|
||||||
'Last_Errno',
|
'Last_Errno',
|
||||||
'Last_Error',
|
'Last_Error',
|
||||||
'Skip_Counter',
|
'Skip_Counter',
|
||||||
'Exec_Master_Log_Pos',
|
'Exec_Master_Log_Pos',
|
||||||
'Relay_Log_Space',
|
'Relay_Log_Space',
|
||||||
'Until_Condition',
|
'Until_Condition',
|
||||||
'Until_Log_File',
|
'Until_Log_File',
|
||||||
'Until_Log_Pos',
|
'Until_Log_Pos',
|
||||||
'Master_SSL_Allowed',
|
'Master_SSL_Allowed',
|
||||||
'Master_SSL_CA_File',
|
'Master_SSL_CA_File',
|
||||||
'Master_SSL_CA_Path',
|
'Master_SSL_CA_Path',
|
||||||
'Master_SSL_Cert',
|
'Master_SSL_Cert',
|
||||||
'Master_SSL_Cipher',
|
'Master_SSL_Cipher',
|
||||||
'Master_SSL_Key',
|
'Master_SSL_Key',
|
||||||
'Seconds_Behind_Master'
|
'Seconds_Behind_Master'
|
||||||
);
|
);
|
||||||
/**
|
/**
|
||||||
* define important variables, which need to be watched for correct running of replication in slave mode
|
* define important variables, which need to be watched for correct running of replication in slave mode
|
||||||
*/
|
*/
|
||||||
$slave_variables_alerts = array(
|
$slave_variables_alerts = array(
|
||||||
'Slave_IO_Running' => 'No',
|
'Slave_IO_Running' => 'No',
|
||||||
'Slave_SQL_Running' => 'No'
|
'Slave_SQL_Running' => 'No'
|
||||||
);
|
);
|
||||||
$slave_variables_oks = array(
|
$slave_variables_oks = array(
|
||||||
'Slave_IO_Running' => 'Yes',
|
'Slave_IO_Running' => 'Yes',
|
||||||
'Slave_SQL_Running' => 'Yes'
|
'Slave_SQL_Running' => 'Yes'
|
||||||
);
|
);
|
||||||
|
|
||||||
$serverid = time();
|
$serverid = time();
|
||||||
|
|
||||||
// check which replication is available and set $server_{master/slave}_status and assign values
|
// check which replication is available and set $server_{master/slave}_status and assign values
|
||||||
foreach ($replication_types as $type) {
|
foreach ($replication_types as $type) {
|
||||||
if (count(${"server_{$type}_replication"}) > 0)
|
if (count(${"server_{$type}_replication"}) > 0)
|
||||||
${"server_{$type}_status"} = true;
|
${"server_{$type}_status"} = true;
|
||||||
else
|
else
|
||||||
${"server_{$type}_status"} = false;
|
${"server_{$type}_status"} = false;
|
||||||
|
|
||||||
if (${"server_{$type}_status"}) {
|
if (${"server_{$type}_status"}) {
|
||||||
if ($type=="master") {
|
if ($type == "master") {
|
||||||
${"server_{$type}_Do_DB"} = explode (",", $server_master_replication[0]["Binlog_Do_DB"]);
|
${"server_{$type}_Do_DB"} = explode (",", $server_master_replication[0]["Binlog_Do_DB"]);
|
||||||
${"server_{$type}_Ignore_DB"} = explode (",", $server_master_replication[0]["Binlog_Ignore_DB"]);
|
${"server_{$type}_Ignore_DB"} = explode (",", $server_master_replication[0]["Binlog_Ignore_DB"]);
|
||||||
} elseif ($type=="slave") {
|
} elseif ($type == "slave") {
|
||||||
${"server_{$type}_Do_DB"} = explode (",", $server_slave_replication[0]["Replicate_Do_DB"]);
|
${"server_{$type}_Do_DB"} = explode (",", $server_slave_replication[0]["Replicate_Do_DB"]);
|
||||||
${"server_{$type}_Ignore_DB"} = explode (",", $server_slave_replication[0]["Replicate_Ignore_DB"]);
|
${"server_{$type}_Ignore_DB"} = explode (",", $server_slave_replication[0]["Replicate_Ignore_DB"]);
|
||||||
|
|
||||||
${"server_{$type}_Do_Table"} = explode (",", $server_slave_replication[0]["Replicate_Do_Table"]);
|
|
||||||
${"server_{$type}_Ignore_Table"} = explode (",", $server_slave_replication[0]["Replicate_Ignore_Table"]);
|
|
||||||
|
|
||||||
${"server_{$type}_Wild_Do_Table"} = explode (",", $server_slave_replication[0]["Replicate_Wild_Do_Table"]);
|
|
||||||
${"server_{$type}_Wild_Ignore_Table"} = explode (",", $server_slave_replication[0]["Replicate_Wild_Ignore_Table"]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
${"server_{$type}_Do_Table"} = explode (",", $server_slave_replication[0]["Replicate_Do_Table"]);
|
||||||
|
${"server_{$type}_Ignore_Table"} = explode (",", $server_slave_replication[0]["Replicate_Ignore_Table"]);
|
||||||
|
|
||||||
/**
|
${"server_{$type}_Wild_Do_Table"} = explode (",", $server_slave_replication[0]["Replicate_Wild_Do_Table"]);
|
||||||
* @param $string -
|
${"server_{$type}_Wild_Ignore_Table"} = explode (",", $server_slave_replication[0]["Replicate_Wild_Ignore_Table"]);
|
||||||
* @param $table -
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
function PMA_replication_strout($string, $table=false) {
|
|
||||||
$list = explode(".", $string);
|
|
||||||
|
|
||||||
return $list[(int)$table];
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* @param String $action - possible values: START or STOP
|
|
||||||
* @param String $control - default: null, possible values: SQL_THREAD or IO_THREAD or null. If it is set to null, it controls both SQL_THREAD and IO_THREAD
|
|
||||||
* @param mixed $link - mysql link
|
|
||||||
*
|
|
||||||
* @return mixed output of PMA_DBI_try_query
|
|
||||||
*/
|
|
||||||
function PMA_replication_slave_control ($action, $control=null, $link=null)
|
|
||||||
{
|
|
||||||
$action = strtoupper($action);
|
|
||||||
$control = strtoupper($control);
|
|
||||||
|
|
||||||
|
|
||||||
if ($action!="START" && $action!="STOP")
|
|
||||||
return -1;
|
|
||||||
if ($control!="SQL_THREAD" && $control!="IO_THREAD" && $control!=null)
|
|
||||||
return -1;
|
|
||||||
return PMA_DBI_try_query($action." SLAVE ".$control.";", $link);
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* @param String $user - replication user on master
|
|
||||||
* @param String $password - password for the user
|
|
||||||
* @param String $host - master's hostname or IP
|
|
||||||
* @param int $port - port, where mysql is running
|
|
||||||
* @param array $pos - position of mysql replication, array should contain fields File and Position
|
|
||||||
* @param boolean $stop - shall we stop slave?
|
|
||||||
* @param boolean $start - shall we start slave?
|
|
||||||
* @param mixed $link - mysql link
|
|
||||||
*
|
|
||||||
* @return output of CHANGE MASTER mysql command
|
|
||||||
*/
|
|
||||||
function PMA_replication_slave_change_master($user, $password, $host, $port, $pos, $stop=true, $start=true, $link=null)
|
|
||||||
{
|
|
||||||
if ($stop)
|
|
||||||
PMA_replication_slave_control("STOP", null, $link);
|
|
||||||
|
|
||||||
$out = PMA_DBI_try_query('CHANGE MASTER TO '.
|
|
||||||
'MASTER_HOST=\''.$host.'\','.
|
|
||||||
'MASTER_PORT='.($port*1).','.
|
|
||||||
'MASTER_USER=\''.$user.'\','.
|
|
||||||
'MASTER_PASSWORD=\''.$password.'\','.
|
|
||||||
'MASTER_LOG_FILE=\''.$pos["File"].'\','.
|
|
||||||
'MASTER_LOG_POS='.$pos["Position"].';', $link);
|
|
||||||
|
|
||||||
if ($start)
|
|
||||||
PMA_replication_slave_control("START", null, $link);
|
|
||||||
|
|
||||||
return $out;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This function provides connection to remote mysql server
|
|
||||||
*
|
|
||||||
* @param String $user - mysql username
|
|
||||||
* @param String $password - password for the user
|
|
||||||
* @param String $host - mysql server's hostname or IP
|
|
||||||
* @param int $port - mysql remote port
|
|
||||||
* @param String $socket - path to unix socket
|
|
||||||
*
|
|
||||||
* @return mixed $link mysql link on success
|
|
||||||
*/
|
|
||||||
function PMA_replication_connect_to_master($user, $password, $host=null, $port=null, $socket=null)
|
|
||||||
{
|
|
||||||
$server = array();
|
|
||||||
$server["host"] = $host;
|
|
||||||
$server["port"] = $port;
|
|
||||||
$server["socket"] = $socket;
|
|
||||||
|
|
||||||
return PMA_DBI_connect($user, $password, false, $server);
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* @param $link - mysql link
|
|
||||||
*
|
|
||||||
* @return array - containing File and Position in MySQL replication on master server, useful for PMA_replication_slave_change_master
|
|
||||||
*/
|
|
||||||
function PMA_replication_slave_bin_log_master($link=null)
|
|
||||||
{
|
|
||||||
$data = PMA_DBI_fetch_result('SHOW MASTER STATUS', null, null, $link);
|
|
||||||
|
|
||||||
$output = array();
|
|
||||||
$output["File"] = $data[0]["File"];
|
|
||||||
$output["Position"] = $data[0]["Position"];
|
|
||||||
|
|
||||||
return $output;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get list of replicated databases on master server
|
|
||||||
*
|
|
||||||
* @param mixed mysql link
|
|
||||||
*
|
|
||||||
* @return array array of replicated databases
|
|
||||||
*/
|
|
||||||
|
|
||||||
function PMA_replication_master_replicated_dbs($link=null)
|
|
||||||
{
|
|
||||||
$data = PMA_DBI_fetch_result('SHOW MASTER STATUS', null, null, $link); // let's find out, which databases are replicated
|
|
||||||
|
|
||||||
$do_db = array();
|
|
||||||
$ignore_db = array();
|
|
||||||
|
|
||||||
if (!empty($data[0]['Binlog_Do_DB']))
|
|
||||||
$do_db = explode($data[0]['Binlog_Do_DB'], ',');
|
|
||||||
if (!empty($data[0]['Binlog_Ignore_DB']))
|
|
||||||
$ignore_db = explode($data[0]['Binlog_Ignore_DB'], ',');
|
|
||||||
|
|
||||||
$tmp_alldbs = PMA_DBI_query('SHOW DATABASES;', $link);
|
|
||||||
while ($tmp_row = PMA_DBI_fetch_row($tmp_alldbs)) {
|
|
||||||
if ($tmp_row[0] == 'information_schema')
|
|
||||||
continue;
|
|
||||||
if (count($do_db)==0) {
|
|
||||||
if (array_search($tmp_row[0], $ignore_db)!==false) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$dblist[] = $tmp_row[0];
|
|
||||||
|
|
||||||
} else {
|
|
||||||
if (array_search($tmp_row[0], $do_db)!==false) {
|
|
||||||
$dblist[] = $tmp_row[0];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} // end while
|
|
||||||
|
|
||||||
return $link;
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* This function provides synchronization of structure and data between two mysql servers.
|
|
||||||
* TODO: improve code sharing between the function and synchronization
|
|
||||||
*
|
|
||||||
* @param String $db - name of database, which should be synchronized
|
|
||||||
* @param mixed $src_link - link of source server, note: if the server is current PMA server, use null
|
|
||||||
* @param mixed $trg_link - link of target server, note: if the server is current PMA server, use null
|
|
||||||
* @param boolean $data - if true, then data will be copied as well
|
|
||||||
*/
|
|
||||||
|
|
||||||
function PMA_replication_synchronize_DB($db, $src_link, $trg_link, $data=true)
|
|
||||||
{
|
|
||||||
$src_db = $db;
|
|
||||||
$trg_db = $db;
|
|
||||||
$src_connection = PMA_DBI_select_db($db, $src_link);
|
|
||||||
$trg_connection = PMA_DBI_select_db($db, $trg_link);
|
|
||||||
|
|
||||||
$src_tables = PMA_DBI_get_tables($src_db, $src_link);
|
|
||||||
$source_tables_num = sizeof($src_tables);
|
|
||||||
|
|
||||||
$trg_tables = PMA_DBI_get_tables($trg_db, $trg_link);
|
|
||||||
$target_tables_num = sizeof($trg_tables);
|
|
||||||
/**
|
|
||||||
* initializing arrays to save table names
|
|
||||||
*/
|
|
||||||
$unmatched_num_src = 0;
|
|
||||||
$source_tables_uncommon = array();
|
|
||||||
$unmatched_num_trg = 0;
|
|
||||||
$target_tables_uncommon = array();
|
|
||||||
$matching_tables = array();
|
|
||||||
$matching_tables_num = 0;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Criterion for matching tables is just their names.
|
|
||||||
* Finding the uncommon tables for the source database
|
|
||||||
* BY comparing the matching tables with all the tables in the source database
|
|
||||||
*/
|
|
||||||
PMA_getMatchingTables($trg_tables, $src_tables, $matching_tables, $source_tables_uncommon);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Finding the uncommon tables for the target database
|
|
||||||
* BY comparing the matching tables with all the tables in the target database
|
|
||||||
*/
|
|
||||||
PMA_getNonMatchingTargetTables($trg_tables, $matching_tables, $target_tables_uncommon);
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* ********************************************* Comparing Data In the Matching Tables ******************************************
|
|
||||||
* *********************It is assumed that the matching tables are structurally and typely exactly the same *********************
|
|
||||||
*/
|
|
||||||
$fields_num = array();
|
|
||||||
$matching_tables_fields = array();
|
|
||||||
$matching_tables_keys = array();
|
|
||||||
$insert_array = array(array(array()));
|
|
||||||
$update_array = array(array(array()));
|
|
||||||
$delete_array = array();
|
|
||||||
$row_count = array();
|
|
||||||
$uncommon_tables_fields = array();
|
|
||||||
$matching_tables_num = sizeof($matching_tables);
|
|
||||||
|
|
||||||
for($i=0; $i< sizeof($matching_tables); $i++)
|
|
||||||
{
|
|
||||||
PMA_dataDiffInTables($src_db, $trg_db, $src_link, $trg_link, $matching_tables, $matching_tables_fields, $update_array, $insert_array,
|
|
||||||
$delete_array, $fields_num, $i, $matching_tables_keys);
|
|
||||||
}
|
}
|
||||||
for($j=0; $j< sizeof($source_tables_uncommon); $j++)
|
}
|
||||||
{
|
}
|
||||||
PMA_dataDiffInUncommonTables($source_tables_uncommon, $src_db, $src_link, $j, $row_count);
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* INTEGRATION OF STRUCTURE DIFFERENCE CODE
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
$source_columns = array();
|
|
||||||
$target_columns = array();
|
|
||||||
$alter_str_array = array(array());
|
|
||||||
$add_column_array = array(array());
|
|
||||||
$uncommon_columns = array();
|
|
||||||
$target_tables_keys = array();
|
|
||||||
$source_indexes = array();
|
|
||||||
$target_indexes = array();
|
|
||||||
$add_indexes_array = array();
|
|
||||||
$remove_indexes_array = array();
|
|
||||||
$criteria = array('Field', 'Type', 'Null', 'Collation', 'Key', 'Default', 'Comment');
|
|
||||||
|
|
||||||
for ($counter= 0; $counter< $matching_tables_num; $counter++)
|
|
||||||
{
|
|
||||||
// PMA_structureDiffInTables($src_db, $trg_db, $src_link, $trg_link, $matching_tables, $source_columns,
|
|
||||||
// $target_columns, $alter_str_array, $add_column_array, $uncommon_columns, $criteria, $matching_tables_keys,
|
|
||||||
// $target_tables_keys, $matching_tables_fields, $counter);
|
|
||||||
//
|
|
||||||
// PMA_indexesDiffInTables($src_db, $trg_db, $src_link, $trg_link, $matching_tables, $source_indexes, $target_indexes,
|
|
||||||
// $add_indexes_array, $remove_indexes_array, $counter);
|
|
||||||
PMA_structureDiffInTables($src_db, $trg_db, $src_link, $trg_link, $matching_tables, $source_columns,
|
|
||||||
$target_columns, $alter_str_array, $add_column_array, $uncommon_columns, $criteria, $target_tables_keys, $counter);
|
|
||||||
|
|
||||||
PMA_indexesDiffInTables($src_db, $trg_db, $src_link, $trg_link, $matching_tables, $source_indexes, $target_indexes,
|
|
||||||
$add_indexes_array, $alter_indexes_array,$remove_indexes_array, $counter);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$matching_table_data_diff = array();
|
/**
|
||||||
$matching_table_structure_diff = array();
|
* @param $string -
|
||||||
$uncommon_table_structure_diff = array();
|
* @param $table -
|
||||||
$uncommon_table_data_diff = array();
|
* @return
|
||||||
$uncommon_tables = $source_tables_uncommon;
|
*/
|
||||||
|
function PMA_replication_strout($string, $table = false) {
|
||||||
/**
|
$list = explode(".", $string);
|
||||||
* Generating Create Table query for all the non-matching tables present in Source but not in Target and populating tables.
|
|
||||||
*/
|
return $list[(int)$table];
|
||||||
for($q=0; $q < sizeof($source_tables_uncommon) ;$q++)
|
}
|
||||||
{
|
/**
|
||||||
if (isset($uncommon_tables[$q])) {
|
* @param String $action - possible values: START or STOP
|
||||||
PMA_createTargetTables($src_db, $trg_db, $src_link, $trg_link, $source_tables_uncommon, $q, $uncommon_tables_fields, false);
|
* @param String $control - default: null, possible values: SQL_THREAD or IO_THREAD or null. If it is set to null, it controls both SQL_THREAD and IO_THREAD
|
||||||
}
|
* @param mixed $link - mysql link
|
||||||
if (isset($row_count[$q]) && $data) {
|
*
|
||||||
PMA_populateTargetTables($src_db, $trg_db, $src_link, $trg_link, $source_tables_uncommon, $q, $uncommon_tables_fields, false);
|
* @return mixed output of PMA_DBI_try_query
|
||||||
}
|
*/
|
||||||
}
|
function PMA_replication_slave_control ($action, $control = null, $link = null)
|
||||||
|
{
|
||||||
|
$action = strtoupper($action);
|
||||||
|
$control = strtoupper($control);
|
||||||
|
|
||||||
|
|
||||||
|
if ($action != "START" && $action != "STOP") {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if ($control != "SQL_THREAD" && $control != "IO_THREAD" && $control != null) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return PMA_DBI_try_query($action." SLAVE ".$control.";", $link);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @param String $user - replication user on master
|
||||||
|
* @param String $password - password for the user
|
||||||
|
* @param String $host - master's hostname or IP
|
||||||
|
* @param int $port - port, where mysql is running
|
||||||
|
* @param array $pos - position of mysql replication, array should contain fields File and Position
|
||||||
|
* @param boolean $stop - shall we stop slave?
|
||||||
|
* @param boolean $start - shall we start slave?
|
||||||
|
* @param mixed $link - mysql link
|
||||||
|
*
|
||||||
|
* @return output of CHANGE MASTER mysql command
|
||||||
|
*/
|
||||||
|
function PMA_replication_slave_change_master($user, $password, $host, $port, $pos, $stop = true, $start = true, $link = null)
|
||||||
|
{
|
||||||
|
if ($stop) {
|
||||||
|
PMA_replication_slave_control("STOP", null, $link);
|
||||||
|
}
|
||||||
|
|
||||||
|
$out = PMA_DBI_try_query('CHANGE MASTER TO '.
|
||||||
|
'MASTER_HOST=\''.$host.'\','.
|
||||||
|
'MASTER_PORT='.($port*1).','.
|
||||||
|
'MASTER_USER=\''.$user.'\','.
|
||||||
|
'MASTER_PASSWORD=\''.$password.'\','.
|
||||||
|
'MASTER_LOG_FILE=\''.$pos["File"].'\','.
|
||||||
|
'MASTER_LOG_POS='.$pos["Position"].';', $link);
|
||||||
|
|
||||||
|
if ($start)
|
||||||
|
PMA_replication_slave_control("START", null, $link);
|
||||||
|
|
||||||
|
return $out;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This function provides connection to remote mysql server
|
||||||
|
*
|
||||||
|
* @param String $user - mysql username
|
||||||
|
* @param String $password - password for the user
|
||||||
|
* @param String $host - mysql server's hostname or IP
|
||||||
|
* @param int $port - mysql remote port
|
||||||
|
* @param String $socket - path to unix socket
|
||||||
|
*
|
||||||
|
* @return mixed $link mysql link on success
|
||||||
|
*/
|
||||||
|
function PMA_replication_connect_to_master($user, $password, $host = null, $port = null, $socket = null)
|
||||||
|
{
|
||||||
|
$server = array();
|
||||||
|
$server["host"] = $host;
|
||||||
|
$server["port"] = $port;
|
||||||
|
$server["socket"] = $socket;
|
||||||
|
|
||||||
|
return PMA_DBI_connect($user, $password, false, $server);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @param $link - mysql link
|
||||||
|
*
|
||||||
|
* @return array - containing File and Position in MySQL replication on master server, useful for PMA_replication_slave_change_master
|
||||||
|
*/
|
||||||
|
function PMA_replication_slave_bin_log_master($link = null)
|
||||||
|
{
|
||||||
|
$data = PMA_DBI_fetch_result('SHOW MASTER STATUS', null, null, $link);
|
||||||
|
|
||||||
|
$output = array();
|
||||||
|
$output["File"] = $data[0]["File"];
|
||||||
|
$output["Position"] = $data[0]["Position"];
|
||||||
|
|
||||||
|
return $output;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get list of replicated databases on master server
|
||||||
|
*
|
||||||
|
* @param mixed mysql link
|
||||||
|
*
|
||||||
|
* @return array array of replicated databases
|
||||||
|
*/
|
||||||
|
|
||||||
|
function PMA_replication_master_replicated_dbs($link = null)
|
||||||
|
{
|
||||||
|
$data = PMA_DBI_fetch_result('SHOW MASTER STATUS', null, null, $link); // let's find out, which databases are replicated
|
||||||
|
|
||||||
|
$do_db = array();
|
||||||
|
$ignore_db = array();
|
||||||
|
|
||||||
|
if (!empty($data[0]['Binlog_Do_DB'])) {
|
||||||
|
$do_db = explode($data[0]['Binlog_Do_DB'], ',');
|
||||||
|
}
|
||||||
|
if (!empty($data[0]['Binlog_Ignore_DB'])) {
|
||||||
|
$ignore_db = explode($data[0]['Binlog_Ignore_DB'], ',');
|
||||||
|
}
|
||||||
|
|
||||||
|
$tmp_alldbs = PMA_DBI_query('SHOW DATABASES;', $link);
|
||||||
|
while ($tmp_row = PMA_DBI_fetch_row($tmp_alldbs)) {
|
||||||
|
if ($tmp_row[0] == 'information_schema')
|
||||||
|
continue;
|
||||||
|
if (count($do_db) == 0) {
|
||||||
|
if (array_search($tmp_row[0], $ignore_db) !== false) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$dblist[] = $tmp_row[0];
|
||||||
|
|
||||||
|
} else {
|
||||||
|
if (array_search($tmp_row[0], $do_db) !== false) {
|
||||||
|
$dblist[] = $tmp_row[0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} // end while
|
||||||
|
|
||||||
|
return $link;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* This function provides synchronization of structure and data between two mysql servers.
|
||||||
|
* TODO: improve code sharing between the function and synchronization
|
||||||
|
*
|
||||||
|
* @param String $db - name of database, which should be synchronized
|
||||||
|
* @param mixed $src_link - link of source server, note: if the server is current PMA server, use null
|
||||||
|
* @param mixed $trg_link - link of target server, note: if the server is current PMA server, use null
|
||||||
|
* @param boolean $data - if true, then data will be copied as well
|
||||||
|
*/
|
||||||
|
|
||||||
|
function PMA_replication_synchronize_DB($db, $src_link, $trg_link, $data = true)
|
||||||
|
{
|
||||||
|
$src_db = $db;
|
||||||
|
$trg_db = $db;
|
||||||
|
$src_connection = PMA_DBI_select_db($db, $src_link);
|
||||||
|
$trg_connection = PMA_DBI_select_db($db, $trg_link);
|
||||||
|
|
||||||
|
$src_tables = PMA_DBI_get_tables($src_db, $src_link);
|
||||||
|
$source_tables_num = sizeof($src_tables);
|
||||||
|
|
||||||
|
$trg_tables = PMA_DBI_get_tables($trg_db, $trg_link);
|
||||||
|
$target_tables_num = sizeof($trg_tables);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* initializing arrays to save table names
|
||||||
|
*/
|
||||||
|
$unmatched_num_src = 0;
|
||||||
|
$source_tables_uncommon = array();
|
||||||
|
$unmatched_num_trg = 0;
|
||||||
|
$target_tables_uncommon = array();
|
||||||
|
$matching_tables = array();
|
||||||
|
$matching_tables_num = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Criterion for matching tables is just their names.
|
||||||
|
* Finding the uncommon tables for the source database
|
||||||
|
* BY comparing the matching tables with all the tables in the source database
|
||||||
|
*/
|
||||||
|
PMA_getMatchingTables($trg_tables, $src_tables, $matching_tables, $source_tables_uncommon);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finding the uncommon tables for the target database
|
||||||
|
* BY comparing the matching tables with all the tables in the target database
|
||||||
|
*/
|
||||||
|
PMA_getNonMatchingTargetTables($trg_tables, $matching_tables, $target_tables_uncommon);
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ********************************************* Comparing Data In the Matching Tables ******************************************
|
||||||
|
* *********************It is assumed that the matching tables are structurally and typely exactly the same *********************
|
||||||
|
*/
|
||||||
|
$fields_num = array();
|
||||||
|
$matching_tables_fields = array();
|
||||||
|
$matching_tables_keys = array();
|
||||||
|
$insert_array = array(array(array()));
|
||||||
|
$update_array = array(array(array()));
|
||||||
|
$delete_array = array();
|
||||||
|
$row_count = array();
|
||||||
|
$uncommon_tables_fields = array();
|
||||||
|
$matching_tables_num = sizeof($matching_tables);
|
||||||
|
|
||||||
|
for ($i=0; $i< sizeof($matching_tables); $i++)
|
||||||
|
{
|
||||||
|
PMA_dataDiffInTables($src_db, $trg_db, $src_link, $trg_link, $matching_tables, $matching_tables_fields, $update_array, $insert_array,
|
||||||
|
$delete_array, $fields_num, $i, $matching_tables_keys);
|
||||||
|
}
|
||||||
|
for ($j=0; $j< sizeof($source_tables_uncommon); $j++)
|
||||||
|
{
|
||||||
|
PMA_dataDiffInUncommonTables($source_tables_uncommon, $src_db, $src_link, $j, $row_count);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* INTEGRATION OF STRUCTURE DIFFERENCE CODE
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
$source_columns = array();
|
||||||
|
$target_columns = array();
|
||||||
|
$alter_str_array = array(array());
|
||||||
|
$add_column_array = array(array());
|
||||||
|
$uncommon_columns = array();
|
||||||
|
$target_tables_keys = array();
|
||||||
|
$source_indexes = array();
|
||||||
|
$target_indexes = array();
|
||||||
|
$add_indexes_array = array();
|
||||||
|
$remove_indexes_array = array();
|
||||||
|
$criteria = array('Field', 'Type', 'Null', 'Collation', 'Key', 'Default', 'Comment');
|
||||||
|
|
||||||
|
for ($counter = 0; $counter < $matching_tables_num; $counter++)
|
||||||
|
{
|
||||||
|
// PMA_structureDiffInTables($src_db, $trg_db, $src_link, $trg_link, $matching_tables, $source_columns,
|
||||||
|
// $target_columns, $alter_str_array, $add_column_array, $uncommon_columns, $criteria, $matching_tables_keys,
|
||||||
|
// $target_tables_keys, $matching_tables_fields, $counter);
|
||||||
|
//
|
||||||
|
// PMA_indexesDiffInTables($src_db, $trg_db, $src_link, $trg_link, $matching_tables, $source_indexes, $target_indexes,
|
||||||
|
// $add_indexes_array, $remove_indexes_array, $counter);
|
||||||
|
PMA_structureDiffInTables($src_db, $trg_db, $src_link, $trg_link, $matching_tables, $source_columns,
|
||||||
|
$target_columns, $alter_str_array, $add_column_array, $uncommon_columns, $criteria, $target_tables_keys, $counter);
|
||||||
|
|
||||||
|
PMA_indexesDiffInTables($src_db, $trg_db, $src_link, $trg_link, $matching_tables, $source_indexes, $target_indexes,
|
||||||
|
$add_indexes_array, $alter_indexes_array,$remove_indexes_array, $counter);
|
||||||
|
}
|
||||||
|
|
||||||
|
$matching_table_data_diff = array();
|
||||||
|
$matching_table_structure_diff = array();
|
||||||
|
$uncommon_table_structure_diff = array();
|
||||||
|
$uncommon_table_data_diff = array();
|
||||||
|
$uncommon_tables = $source_tables_uncommon;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generating Create Table query for all the non-matching tables present in Source but not in Target and populating tables.
|
||||||
|
*/
|
||||||
|
for($q = 0; $q < sizeof($source_tables_uncommon); $q++)
|
||||||
|
{
|
||||||
|
if (isset($uncommon_tables[$q])) {
|
||||||
|
PMA_createTargetTables($src_db, $trg_db, $src_link, $trg_link, $source_tables_uncommon, $q, $uncommon_tables_fields, false);
|
||||||
|
}
|
||||||
|
if (isset($row_count[$q]) && $data) {
|
||||||
|
PMA_populateTargetTables($src_db, $trg_db, $src_link, $trg_link, $source_tables_uncommon, $q, $uncommon_tables_fields, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
@@ -16,7 +16,7 @@ $jscode['configure_master'] =
|
|||||||
'var c_text = "server-id='.$serverid.'<br />log-bin=mysql-bin<br />log-error=mysql-bin.err<br />";'."\n".
|
'var c_text = "server-id='.$serverid.'<br />log-bin=mysql-bin<br />log-error=mysql-bin.err<br />";'."\n".
|
||||||
'var c_ignore = "binlog_ignore_db=";'."\n".
|
'var c_ignore = "binlog_ignore_db=";'."\n".
|
||||||
'var c_do = "binlog_do_db=";'."\n".
|
'var c_do = "binlog_do_db=";'."\n".
|
||||||
|
|
||||||
'$(\'db_reset_href\').addEvent(\'click\', function() {'."\n".
|
'$(\'db_reset_href\').addEvent(\'click\', function() {'."\n".
|
||||||
' $(\'db_select\').getSelected().each(function(el) {'."\n".
|
' $(\'db_select\').getSelected().each(function(el) {'."\n".
|
||||||
' el.selected = false;'."\n".
|
' el.selected = false;'."\n".
|
||||||
@@ -29,18 +29,18 @@ $jscode['configure_master'] =
|
|||||||
' else'."\n".
|
' else'."\n".
|
||||||
' $(\'rep\').set(\'html\', c_text+c_do+c_output+\';\');'."\n".
|
' $(\'rep\').set(\'html\', c_text+c_do+c_output+\';\');'."\n".
|
||||||
'});'."\n".
|
'});'."\n".
|
||||||
|
|
||||||
'$(\'db_select\').addEvent(\'change\',function() {'."\n".
|
'$(\'db_select\').addEvent(\'change\',function() {'."\n".
|
||||||
' var count = 0;'."\n".
|
' var count = 0;'."\n".
|
||||||
|
|
||||||
' $(\'db_select\').getSelected().each(function(el) { '."\n".
|
' $(\'db_select\').getSelected().each(function(el) { '."\n".
|
||||||
' if (count==0)'."\n".
|
' if (count==0)'."\n".
|
||||||
' c_output = el.get(\'value\');'."\n".
|
' c_output = el.get(\'value\');'."\n".
|
||||||
' else'."\n".
|
' else'."\n".
|
||||||
' c_output = c_output + \',\' +el.get(\'value\');'."\n".
|
' c_output = c_output + \',\' +el.get(\'value\');'."\n".
|
||||||
|
|
||||||
' count=count+1;'."\n".
|
' count=count+1;'."\n".
|
||||||
|
|
||||||
' if ($(\'db_select\').getSelected().length==count) {'."\n".
|
' if ($(\'db_select\').getSelected().length==count) {'."\n".
|
||||||
' if ($(\'db_type\').getSelected().get(\'value\')=="all")'."\n".
|
' if ($(\'db_type\').getSelected().get(\'value\')=="all")'."\n".
|
||||||
' $(\'rep\').set(\'html\', c_text+c_ignore+c_output);'."\n".
|
' $(\'rep\').set(\'html\', c_text+c_ignore+c_output);'."\n".
|
||||||
@@ -52,12 +52,12 @@ $jscode['configure_master'] =
|
|||||||
'});'."\n";
|
'});'."\n";
|
||||||
|
|
||||||
$jscode['slave_control'] =
|
$jscode['slave_control'] =
|
||||||
'divShowHideFunc(\'slave_status_href\', \'replication_slave_section\');'."\n".
|
'divShowHideFunc(\'slave_status_href\', \'replication_slave_section\');'."\n".
|
||||||
'divShowHideFunc(\'slave_control_href\', \'slave_control_gui\');'."\n".
|
'divShowHideFunc(\'slave_control_href\', \'slave_control_gui\');'."\n".
|
||||||
'divShowHideFunc(\'slave_errormanagement_href\',\'slave_errormanagement_gui\'); '."\n";
|
'divShowHideFunc(\'slave_errormanagement_href\',\'slave_errormanagement_gui\'); '."\n";
|
||||||
|
|
||||||
$jscode['slave_control_sync'] =
|
$jscode['slave_control_sync'] =
|
||||||
'divShowHideFunc(\'slave_synchronization_href\', \'slave_synchronization_gui\');'."\n";
|
'divShowHideFunc(\'slave_synchronization_href\', \'slave_synchronization_gui\');'."\n";
|
||||||
/**
|
/**
|
||||||
* returns code for selecting databases
|
* returns code for selecting databases
|
||||||
*
|
*
|
||||||
@@ -65,24 +65,24 @@ $jscode['slave_control_sync'] =
|
|||||||
*/
|
*/
|
||||||
function PMA_replication_db_multibox()
|
function PMA_replication_db_multibox()
|
||||||
{
|
{
|
||||||
$multi_values = '';
|
$multi_values = '';
|
||||||
$multi_values .= '<select name="db_select[]" size="6" multiple="multiple" id="db_select">';
|
$multi_values .= '<select name="db_select[]" size="6" multiple="multiple" id="db_select">';
|
||||||
$multi_values .= "\n";
|
$multi_values .= "\n";
|
||||||
|
|
||||||
foreach ($GLOBALS['pma']->databases as $current_db) {
|
foreach ($GLOBALS['pma']->databases as $current_db) {
|
||||||
if (!empty($selectall) || (isset($tmp_select) && strpos(' ' . $tmp_select, '|' . $current_db . '|'))) {
|
if (!empty($selectall) || (isset($tmp_select) && strpos(' ' . $tmp_select, '|' . $current_db . '|'))) {
|
||||||
$is_selected = ' selected="selected"';
|
$is_selected = ' selected="selected"';
|
||||||
} else {
|
} else {
|
||||||
$is_selected = '';
|
$is_selected = '';
|
||||||
}
|
}
|
||||||
$current_db = htmlspecialchars($current_db);
|
$current_db = htmlspecialchars($current_db);
|
||||||
$multi_values .= ' <option value="' . $current_db . '" ' . $is_selected . '>' . $current_db . '</option>' . "\n";
|
$multi_values .= ' <option value="' . $current_db . '" ' . $is_selected . '>' . $current_db . '</option>' . "\n";
|
||||||
} // end while
|
} // end while
|
||||||
$multi_values .= "\n";
|
$multi_values .= "\n";
|
||||||
$multi_values .= '</select>';
|
$multi_values .= '</select>';
|
||||||
$multi_values .= '<br /><a href="#" id="db_reset_href">Uncheck all</a>';
|
$multi_values .= '<br /><a href="#" id="db_reset_href">Uncheck all</a>';
|
||||||
|
|
||||||
return $multi_values;
|
return $multi_values;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -92,98 +92,105 @@ function PMA_replication_db_multibox()
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
function PMA_replication_gui_changemaster($submitname) {
|
function PMA_replication_gui_changemaster($submitname) {
|
||||||
global $username_length;
|
global $username_length;
|
||||||
global $hostname_length;
|
global $hostname_length;
|
||||||
|
|
||||||
echo '<form method="post" action="server_replication.php">'."\n";
|
echo '<form method="post" action="server_replication.php">'."\n";
|
||||||
echo PMA_generate_common_hidden_inputs('', '');
|
echo PMA_generate_common_hidden_inputs('', '');
|
||||||
echo ' <fieldset id="fieldset_add_user_login">'."\n";
|
echo ' <fieldset id="fieldset_add_user_login">'."\n";
|
||||||
echo ' <legend>Slave configuration - change master server</legend>'."\n";
|
echo ' <legend>Slave configuration - change master server</legend>'."\n";
|
||||||
echo $GLOBALS['strSlaveConfigure'].'<br />'."\n";
|
echo $GLOBALS['strSlaveConfigure'].'<br />'."\n";
|
||||||
echo '<pre>server-id='.time().'</pre>'."\n";
|
echo '<pre>server-id='.time().'</pre>'."\n";
|
||||||
echo ' <div class="item">'."\n";
|
echo ' <div class="item">'."\n";
|
||||||
echo ' <label for="select_pred_username">'. $GLOBALS['strUserName'].':</label>'."\n";
|
echo ' <label for="select_pred_username">'. $GLOBALS['strUserName'].':</label>'."\n";
|
||||||
echo ' <input type="text" name="username" maxlength="'. $username_length .'" title="'. $GLOBALS['strUserName'] .'" onchange="pred_username.value = \'userdefined\';" />'."\n";
|
echo ' <input type="text" name="username" maxlength="'. $username_length .'" title="'. $GLOBALS['strUserName'] .'" onchange="pred_username.value = \'userdefined\';" />'."\n";
|
||||||
echo ' </div>'."\n";
|
echo ' </div>'."\n";
|
||||||
echo ' <div class="item">'."\n";
|
echo ' <div class="item">'."\n";
|
||||||
echo ' <label for="select_pred_password">'. $GLOBALS['strPassword'] .' :</label>'."\n";
|
echo ' <label for="select_pred_password">'. $GLOBALS['strPassword'] .' :</label>'."\n";
|
||||||
echo ' <input type="password" id="text_pma_pw" name="pma_pw" title="'. $GLOBALS['strPassword'] .'" onchange="pred_password.value = \'userdefined\';" />'."\n";
|
echo ' <input type="password" id="text_pma_pw" name="pma_pw" title="'. $GLOBALS['strPassword'] .'" onchange="pred_password.value = \'userdefined\';" />'."\n";
|
||||||
echo ' </div>'."\n";
|
echo ' </div>'."\n";
|
||||||
echo ' <div class="item">'."\n";
|
echo ' <div class="item">'."\n";
|
||||||
echo ' <label for="select_pred_hostname">'.$GLOBALS['strHost'].' :</label>'."\n";
|
echo ' <label for="select_pred_hostname">'.$GLOBALS['strHost'].' :</label>'."\n";
|
||||||
echo ' <input type="text" name="hostname" maxlength="'. $hostname_length .'" value="" />'."\n";
|
echo ' <input type="text" name="hostname" maxlength="'. $hostname_length .'" value="" />'."\n";
|
||||||
echo ' </div>'."\n";
|
echo ' </div>'."\n";
|
||||||
echo ' <div class="item">'."\n";
|
echo ' <div class="item">'."\n";
|
||||||
echo ' <label for="select_pred_hostname">'.$GLOBALS['strPort'].':</label>'."\n";
|
echo ' <label for="select_pred_hostname">'.$GLOBALS['strPort'].':</label>'."\n";
|
||||||
echo ' <input type="text" name="port" maxlength="6" value="3306" />'."\n";
|
echo ' <input type="text" name="port" maxlength="6" value="3306" />'."\n";
|
||||||
echo ' </div>'."\n";
|
echo ' </div>'."\n";
|
||||||
echo ' </fieldset>'."\n";
|
echo ' </fieldset>'."\n";
|
||||||
echo ' <fieldset id="fieldset_user_privtable_footer" class="tblFooters">'."\n";
|
echo ' <fieldset id="fieldset_user_privtable_footer" class="tblFooters">'."\n";
|
||||||
echo ' <input type="hidden" name="sr_take_action" value="true" />'."\n";
|
echo ' <input type="hidden" name="sr_take_action" value="true" />'."\n";
|
||||||
echo ' <input type="submit" name="'.$submitname.'" id="confslave_submit" value="'. $GLOBALS['strGo'] .'" />'."\n";
|
echo ' <input type="submit" name="'.$submitname.'" id="confslave_submit" value="'. $GLOBALS['strGo'] .'" />'."\n";
|
||||||
echo ' </fieldset>'."\n";
|
echo ' </fieldset>'."\n";
|
||||||
echo '</form>'."\n";
|
echo '</form>'."\n";
|
||||||
|
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* This function prints out table with replication status.
|
* This function prints out table with replication status.
|
||||||
*
|
*
|
||||||
* @param String type - either master or slave
|
* @param String type - either master or slave
|
||||||
* @param boolean $hidden - if true, then default style is set to hidden, default value false
|
* @param boolean $hidden - if true, then default style is set to hidden, default value false
|
||||||
* @param boolen $title - if true, then title is displayed, default true
|
* @param boolen $title - if true, then title is displayed, default true
|
||||||
*/
|
*/
|
||||||
function PMA_replication_print_status_table ($type, $hidden=false, $title=true) {
|
function PMA_replication_print_status_table ($type, $hidden = false, $title = true) {
|
||||||
global ${"{$type}_variables"};
|
global ${"{$type}_variables"};
|
||||||
global ${"{$type}_variables_alerts"};
|
global ${"{$type}_variables_alerts"};
|
||||||
global ${"{$type}_variables_oks"};
|
global ${"{$type}_variables_oks"};
|
||||||
global ${"server_{$type}_replication"};
|
global ${"server_{$type}_replication"};
|
||||||
global ${"strReplicationStatus_{$type}"};
|
global ${"strReplicationStatus_{$type}"};
|
||||||
|
|
||||||
echo '<div id="replication_'. $type .'_section" style="'. ($hidden ? 'display: none' : '') .'"> '."\n";
|
|
||||||
|
|
||||||
if ($title) {
|
|
||||||
echo '<h4><a name="replication_'. $type .'"></a>'.${"strReplicationStatus_{$type}"} .'</h4>'."\n";
|
|
||||||
} else {
|
|
||||||
echo '<br />'."\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
echo ' <table id="server'. $type .'replicationsummary" class="data"> '."\n";
|
echo '<div id="replication_'. $type .'_section" style="'. ($hidden ? 'display: none' : '') .'"> '."\n";
|
||||||
echo ' <thead>'."\n";
|
|
||||||
echo ' <tr>'."\n";
|
|
||||||
echo ' <th>'. $GLOBALS['strVar'] .'</th>'."\n";
|
|
||||||
echo ' <th>'. $GLOBALS['strValue'] .'</th>'."\n";
|
|
||||||
echo ' </tr>'."\n";
|
|
||||||
echo ' </thead>'."\n";
|
|
||||||
echo ' <tbody>'."\n";
|
|
||||||
|
|
||||||
$odd_row = true;
|
|
||||||
foreach(${"{$type}_variables"} as $variable) {
|
|
||||||
echo ' <tr class="'. ($odd_row ? 'odd' : 'even') .'">'."\n";
|
|
||||||
echo ' <td class="name">'."\n";
|
|
||||||
echo $variable."\n";
|
|
||||||
echo ' </td>'."\n";
|
|
||||||
echo ' <td class="value">'."\n";
|
|
||||||
|
|
||||||
if (isset(${"{$type}_variables_alerts"}[$variable]) && ${"{$type}_variables_alerts"}[$variable] == ${"server_{$type}_replication"}[0][$variable])
|
if ($title) {
|
||||||
echo '<span class="attention">'."\n";
|
echo '<h4><a name="replication_'. $type .'"></a>'.${"strReplicationStatus_{$type}"} .'</h4>'."\n";
|
||||||
if (isset(${"{$type}_variables_oks"}[$variable]) && ${"{$type}_variables_oks"}[$variable] == ${"server_{$type}_replication"}[0][$variable])
|
} else {
|
||||||
echo '<span class="allfine">'."\n";
|
echo '<br />'."\n";
|
||||||
else
|
}
|
||||||
echo '<span>'."\n";
|
|
||||||
echo ${"server_{$type}_replication"}[0][$variable];
|
echo ' <table id="server'. $type .'replicationsummary" class="data"> '."\n";
|
||||||
echo '</span>'."\n";
|
echo ' <thead>'."\n";
|
||||||
|
echo ' <tr>'."\n";
|
||||||
echo ' </td>'."\n";
|
echo ' <th>'. $GLOBALS['strVar'] .'</th>'."\n";
|
||||||
echo ' </tr>'."\n";
|
echo ' <th>'. $GLOBALS['strValue'] .'</th>'."\n";
|
||||||
|
echo ' </tr>'."\n";
|
||||||
|
echo ' </thead>'."\n";
|
||||||
|
echo ' <tbody>'."\n";
|
||||||
|
|
||||||
|
$odd_row = true;
|
||||||
|
foreach (${"{$type}_variables"} as $variable) {
|
||||||
|
echo ' <tr class="'. ($odd_row ? 'odd' : 'even') .'">'."\n";
|
||||||
|
echo ' <td class="name">'."\n";
|
||||||
|
echo $variable."\n";
|
||||||
|
echo ' </td>'."\n";
|
||||||
|
echo ' <td class="value">'."\n";
|
||||||
|
|
||||||
|
if (isset(${"{$type}_variables_alerts"}[$variable])
|
||||||
|
&& ${"{$type}_variables_alerts"}[$variable] == ${"server_{$type}_replication"}[0][$variable]
|
||||||
|
) {
|
||||||
|
echo '<span class="attention">'."\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset(${"{$type}_variables_oks"}[$variable])
|
||||||
|
&& ${"{$type}_variables_oks"}[$variable] == ${"server_{$type}_replication"}[0][$variable]
|
||||||
|
) {
|
||||||
|
echo '<span class="allfine">'."\n";
|
||||||
|
} else {
|
||||||
|
echo '<span>'."\n";
|
||||||
|
}
|
||||||
|
echo ${"server_{$type}_replication"}[0][$variable];
|
||||||
|
echo '</span>'."\n";
|
||||||
|
|
||||||
|
echo ' </td>'."\n";
|
||||||
|
echo ' </tr>'."\n";
|
||||||
|
|
||||||
|
$odd_row = !$odd_row;
|
||||||
|
}
|
||||||
|
|
||||||
|
echo ' </tbody>'."\n";
|
||||||
|
echo ' </table>'."\n";
|
||||||
|
echo ' <br />'."\n";
|
||||||
|
echo '</div>'."\n";
|
||||||
|
|
||||||
$odd_row = !$odd_row;
|
|
||||||
}
|
|
||||||
|
|
||||||
echo ' </tbody>'."\n";
|
|
||||||
echo ' </table>'."\n";
|
|
||||||
echo ' <br />'."\n";
|
|
||||||
echo '</div>'."\n";
|
|
||||||
|
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|
||||||
|
@@ -260,24 +260,26 @@ if ($databases_count > 0) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
foreach ($replication_types as $type) {
|
foreach ($replication_types as $type) {
|
||||||
if (${"server_{$type}_status"}) {
|
if (${"server_{$type}_status"}) {
|
||||||
echo '<td class="tool" style="text-align: center;">' . "\n";
|
echo '<td class="tool" style="text-align: center;">' . "\n";
|
||||||
|
|
||||||
if (strlen(array_search($current["SCHEMA_NAME"], ${"server_{$type}_Ignore_DB"}))>0) {
|
if (strlen(array_search($current["SCHEMA_NAME"], ${"server_{$type}_Ignore_DB"}))>0) {
|
||||||
echo '<img class="icon" src="' . $pmaThemeImage . 's_cancel.png" width="16" height="16" alt="REPLICATED" />' . "\n";
|
echo '<img class="icon" src="' . $pmaThemeImage . 's_cancel.png" width="16" height="16" alt="REPLICATED" />' . "\n";
|
||||||
} else {
|
} else {
|
||||||
$key = array_search($current["SCHEMA_NAME"], ${"server_{$type}_Do_DB"});
|
$key = array_search($current["SCHEMA_NAME"], ${"server_{$type}_Do_DB"});
|
||||||
|
|
||||||
if (strlen($key)>0 || (${"server_{$type}_Do_DB"}[0]=="" && count(${"server_{$type}_Do_DB"})==1)) // if ($key != null) did not work for index "0"
|
if (strlen($key) > 0 || (${"server_{$type}_Do_DB"}[0] == "" && count(${"server_{$type}_Do_DB"}) == 1)) {
|
||||||
echo '<img class="icon" src="' . $pmaThemeImage . 's_success.png" width="16" height="16" alt="REPLICATED" />' . "\n";
|
// if ($key != null) did not work for index "0"
|
||||||
else
|
echo '<img class="icon" src="' . $pmaThemeImage . 's_success.png" width="16" height="16" alt="REPLICATED" />' . "\n";
|
||||||
echo '';
|
} else {
|
||||||
|
echo '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
echo '</td>';
|
||||||
}
|
}
|
||||||
|
|
||||||
echo '</td>';
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($is_superuser) {
|
if ($is_superuser) {
|
||||||
echo ' <td class="tool">' . "\n"
|
echo ' <td class="tool">' . "\n"
|
||||||
. ' <a onclick="'
|
. ' <a onclick="'
|
||||||
|
@@ -30,9 +30,9 @@ require_once './libraries/server_synchronize.lib.php';
|
|||||||
if (!$is_superuser) {
|
if (!$is_superuser) {
|
||||||
require './libraries/server_links.inc.php';
|
require './libraries/server_links.inc.php';
|
||||||
echo '<h2>' . "\n"
|
echo '<h2>' . "\n"
|
||||||
. PMA_getIcon('s_replication.png')
|
. PMA_getIcon('s_replication.png')
|
||||||
. $GLOBALS['strReplication'] . "\n"
|
. $GLOBALS['strReplication'] . "\n"
|
||||||
. '</h2>' . "\n";
|
. '</h2>' . "\n";
|
||||||
PMA_Message::error('strNoPrivileges')->display();
|
PMA_Message::error('strNoPrivileges')->display();
|
||||||
require_once './libraries/footer.inc.php';
|
require_once './libraries/footer.inc.php';
|
||||||
}
|
}
|
||||||
@@ -42,213 +42,215 @@ if (!$is_superuser) {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
if (isset($GLOBALS['sr_take_action'])) {
|
if (isset($GLOBALS['sr_take_action'])) {
|
||||||
$refresh = false;
|
$refresh = false;
|
||||||
if (isset($GLOBALS['slave_chagemaster'])) {
|
if (isset($GLOBALS['slave_chagemaster'])) {
|
||||||
$_SESSION['replication']['m_username'] = $sr['username'] = PMA_sqlAddslashes($GLOBALS['username']);
|
$_SESSION['replication']['m_username'] = $sr['username'] = PMA_sqlAddslashes($GLOBALS['username']);
|
||||||
$_SESSION['replication']['m_password'] = $sr['pma_pw'] = PMA_sqlAddslashes($GLOBALS['pma_pw']);
|
$_SESSION['replication']['m_password'] = $sr['pma_pw'] = PMA_sqlAddslashes($GLOBALS['pma_pw']);
|
||||||
$_SESSION['replication']['m_hostname'] = $sr['hostname'] = PMA_sqlAddslashes($GLOBALS['hostname']);
|
$_SESSION['replication']['m_hostname'] = $sr['hostname'] = PMA_sqlAddslashes($GLOBALS['hostname']);
|
||||||
$_SESSION['replication']['m_port'] = $sr['port'] = PMA_sqlAddslashes($GLOBALS['port']);
|
$_SESSION['replication']['m_port'] = $sr['port'] = PMA_sqlAddslashes($GLOBALS['port']);
|
||||||
$_SESSION['replication']['m_correct'] = '';
|
$_SESSION['replication']['m_correct'] = '';
|
||||||
$_SESSION['replication']['sr_action_status'] = 'error';
|
$_SESSION['replication']['sr_action_status'] = 'error';
|
||||||
$_SESSION['replication']['sr_action_info'] = $strReplicationUnknownError;
|
$_SESSION['replication']['sr_action_info'] = $strReplicationUnknownError;
|
||||||
$url = $sr['hostname'];
|
$url = $sr['hostname'];
|
||||||
|
|
||||||
if ($sr['port']!='')
|
if ($sr['port'] != '') {
|
||||||
$url .= ':'.$sr['port'];
|
$url .= ':' . $sr['port'];
|
||||||
|
}
|
||||||
$check_master = null;
|
|
||||||
error_reporting(0);
|
$check_master = null;
|
||||||
$check_master = @mysql_connect($url, $sr['username'], $sr['pma_pw']);
|
error_reporting(0);
|
||||||
error_reporting(15);
|
$check_master = @mysql_connect($url, $sr['username'], $sr['pma_pw']);
|
||||||
unset($url);
|
error_reporting(15);
|
||||||
|
unset($url);
|
||||||
if (!$check_master) {
|
|
||||||
$_SESSION['replication']['sr_action_status'] = 'error';
|
if (!$check_master) {
|
||||||
$_SESSION['replication']['sr_action_info'] = 'Unable to connect to master '. $sr['hostname'] .'. ';
|
$_SESSION['replication']['sr_action_status'] = 'error';
|
||||||
} else {
|
$_SESSION['replication']['sr_action_info'] = 'Unable to connect to master '. $sr['hostname'] .'. ';
|
||||||
$link_to_master = PMA_replication_connect_to_master($sr['username'], $sr['pma_pw'], $sr['hostname'], $sr['port']);
|
} else {
|
||||||
$position = PMA_replication_slave_bin_log_master($link_to_master);
|
$link_to_master = PMA_replication_connect_to_master($sr['username'], $sr['pma_pw'], $sr['hostname'], $sr['port']);
|
||||||
|
$position = PMA_replication_slave_bin_log_master($link_to_master);
|
||||||
$_SESSION['replication']['m_correct'] = true;
|
|
||||||
|
$_SESSION['replication']['m_correct'] = true;
|
||||||
if (PMA_replication_slave_change_master($sr['username'], $sr['pma_pw'], $sr['hostname'], $sr['port'], $position, true, false)) {
|
|
||||||
$_SESSION['replication']['sr_action_status'] = 'error';
|
if (PMA_replication_slave_change_master($sr['username'], $sr['pma_pw'], $sr['hostname'], $sr['port'], $position, true, false)) {
|
||||||
$_SESSION['replication']['sr_action_info'] = $GLOBALS['strReplicationUnableToChange'];
|
$_SESSION['replication']['sr_action_status'] = 'error';
|
||||||
} else {
|
$_SESSION['replication']['sr_action_info'] = $GLOBALS['strReplicationUnableToChange'];
|
||||||
$_SESSION['replication']['sr_action_status'] = 'success';
|
} else {
|
||||||
$_SESSION['replication']['sr_action_info'] = sprintf($GLOBALS['strReplicationChangedSuccesfully'], $sr['hostname']);
|
$_SESSION['replication']['sr_action_status'] = 'success';
|
||||||
}
|
$_SESSION['replication']['sr_action_info'] = sprintf($GLOBALS['strReplicationChangedSuccesfully'], $sr['hostname']);
|
||||||
}
|
}
|
||||||
} elseif (isset($GLOBALS['sr_slave_server_control'])) {
|
}
|
||||||
if ($GLOBALS['sr_slave_action']=='reset') {
|
} elseif (isset($GLOBALS['sr_slave_server_control'])) {
|
||||||
PMA_replication_slave_control("STOP");
|
if ($GLOBALS['sr_slave_action'] == 'reset') {
|
||||||
PMA_DBI_try_query("RESET SLAVE;");
|
PMA_replication_slave_control("STOP");
|
||||||
PMA_replication_slave_control("START");
|
PMA_DBI_try_query("RESET SLAVE;");
|
||||||
} else {
|
PMA_replication_slave_control("START");
|
||||||
PMA_replication_slave_control($GLOBALS['sr_slave_action'], $GLOBALS['sr_slave_control_parm']);
|
} else {
|
||||||
}
|
PMA_replication_slave_control($GLOBALS['sr_slave_action'], $GLOBALS['sr_slave_control_parm']);
|
||||||
$refresh = true;
|
}
|
||||||
} elseif (isset($GLOBALS['sr_slave_skip_error'])) {
|
$refresh = true;
|
||||||
$count = 1;
|
} elseif (isset($GLOBALS['sr_slave_skip_error'])) {
|
||||||
if (isset($GLOBALS['sr_skip_errors_count'])) {
|
$count = 1;
|
||||||
$count = $GLOBALS['sr_skip_errors_count']*1;
|
if (isset($GLOBALS['sr_skip_errors_count'])) {
|
||||||
}
|
$count = $GLOBALS['sr_skip_errors_count'] * 1;
|
||||||
PMA_replication_slave_control("STOP");
|
}
|
||||||
PMA_DBI_try_query("SET GLOBAL SQL_SLAVE_SKIP_COUNTER = ".$count.";");
|
PMA_replication_slave_control("STOP");
|
||||||
PMA_replication_slave_control("START");
|
PMA_DBI_try_query("SET GLOBAL SQL_SLAVE_SKIP_COUNTER = ".$count.";");
|
||||||
} elseif (isset($GLOBALS['sl_sync'])) {
|
PMA_replication_slave_control("START");
|
||||||
|
} elseif (isset($GLOBALS['sl_sync'])) {
|
||||||
$src_link = PMA_replication_connect_to_master($_SESSION['replication']['m_username'], $_SESSION['replication']['m_password'], $_SESSION['replication']['m_hostname'], $_SESSION['replication']['m_port']);
|
$src_link = PMA_replication_connect_to_master($_SESSION['replication']['m_username'], $_SESSION['replication']['m_password'], $_SESSION['replication']['m_hostname'], $_SESSION['replication']['m_port']);
|
||||||
$trg_link = null;
|
$trg_link = null;
|
||||||
|
|
||||||
$data = PMA_DBI_fetch_result('SHOW MASTER STATUS', null, null, $src_link); // let's find out, which databases are replicated
|
$data = PMA_DBI_fetch_result('SHOW MASTER STATUS', null, null, $src_link); // let's find out, which databases are replicated
|
||||||
|
|
||||||
$do_db = array();
|
$do_db = array();
|
||||||
$ignore_db = array();
|
$ignore_db = array();
|
||||||
|
|
||||||
if (!empty($data[0]['Binlog_Do_DB']))
|
if (!empty($data[0]['Binlog_Do_DB']))
|
||||||
$do_db = explode($data[0]['Binlog_Do_DB'], ',');
|
$do_db = explode($data[0]['Binlog_Do_DB'], ',');
|
||||||
if (!empty($data[0]['Binlog_Ignore_DB']))
|
if (!empty($data[0]['Binlog_Ignore_DB']))
|
||||||
$ignore_db = explode($data[0]['Binlog_Ignore_DB'], ',');
|
$ignore_db = explode($data[0]['Binlog_Ignore_DB'], ',');
|
||||||
|
|
||||||
$tmp_alldbs = PMA_DBI_query('SHOW DATABASES;', $src_link);
|
$tmp_alldbs = PMA_DBI_query('SHOW DATABASES;', $src_link);
|
||||||
while ($tmp_row = PMA_DBI_fetch_row($tmp_alldbs)) {
|
while ($tmp_row = PMA_DBI_fetch_row($tmp_alldbs)) {
|
||||||
if ($tmp_row[0] == 'information_schema')
|
if ($tmp_row[0] == 'information_schema')
|
||||||
continue;
|
continue;
|
||||||
if (count($do_db)==0) {
|
if (count($do_db) == 0) {
|
||||||
if (array_search($tmp_row[0], $ignore_db)!==false) {
|
if (array_search($tmp_row[0], $ignore_db) !== false) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
$dblist[] = $tmp_row[0];
|
$dblist[] = $tmp_row[0];
|
||||||
|
|
||||||
PMA_DBI_query('CREATE DATABASE IF NOT EXISTS '.$tmp_row[0], $trg_link);
|
PMA_DBI_query('CREATE DATABASE IF NOT EXISTS '.$tmp_row[0], $trg_link);
|
||||||
} else {
|
} else {
|
||||||
if (array_search($tmp_row[0], $do_db)!==false) {
|
if (array_search($tmp_row[0], $do_db) !== false) {
|
||||||
$dblist[] = $tmp_row[0];
|
$dblist[] = $tmp_row[0];
|
||||||
PMA_DBI_query('CREATE DATABASE IF NOT EXISTS '.$tmp_row[0], $trg_link);
|
PMA_DBI_query('CREATE DATABASE IF NOT EXISTS '.$tmp_row[0], $trg_link);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} // end while
|
} // end while
|
||||||
if (isset($GLOBALS['repl_data']))
|
if (isset($GLOBALS['repl_data'])) {
|
||||||
$data = true;
|
$data = true;
|
||||||
else
|
} else {
|
||||||
$data = false;
|
$data = false;
|
||||||
foreach ($dblist as $db) {
|
}
|
||||||
PMA_replication_synchronize_db($db, $src_link, $trg_link, $data);
|
foreach ($dblist as $db) {
|
||||||
}
|
PMA_replication_synchronize_db($db, $src_link, $trg_link, $data);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if ($refresh)
|
|
||||||
Header("Location: ". PMA_generate_common_url($GLOBALS['url_params']));
|
if ($refresh)
|
||||||
unset($refresh);
|
Header("Location: ". PMA_generate_common_url($GLOBALS['url_params']));
|
||||||
|
unset($refresh);
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Displays the links
|
* Displays the links
|
||||||
*/
|
*/
|
||||||
require './libraries/server_links.inc.php';
|
require './libraries/server_links.inc.php';
|
||||||
|
|
||||||
echo '<div id="replication">'."\n";
|
echo '<div id="replication">'."\n";
|
||||||
echo ' <h2>'."\n";
|
echo ' <h2>'."\n";
|
||||||
echo ' <img class="icon" src="'. $GLOBALS['pmaThemeImage'] .'s_replication.png" width="16" height="16" alt="" />'."\n";
|
echo ' <img class="icon" src="'. $GLOBALS['pmaThemeImage'] .'s_replication.png" width="16" height="16" alt="" />'."\n";
|
||||||
echo $GLOBALS['strReplication']."\n";
|
echo $GLOBALS['strReplication']."\n";
|
||||||
echo ' </h2>'."\n";
|
echo ' </h2>'."\n";
|
||||||
|
|
||||||
if (isset($_SESSION['replication']['sr_action_status']) && isset($_SESSION['replication']['sr_action_info'])) {
|
if (isset($_SESSION['replication']['sr_action_status']) && isset($_SESSION['replication']['sr_action_info'])) {
|
||||||
if ($_SESSION['replication']['sr_action_status']=='error') {
|
if ($_SESSION['replication']['sr_action_status'] == 'error') {
|
||||||
PMA_Message::error($_SESSION['replication']['sr_action_info'])->display();
|
PMA_Message::error($_SESSION['replication']['sr_action_info'])->display();
|
||||||
$_SESSION['replication']['sr_action_status'] = 'unknown';
|
$_SESSION['replication']['sr_action_status'] = 'unknown';
|
||||||
} elseif ($_SESSION['replication']['sr_action_status']=='success') {
|
} elseif ($_SESSION['replication']['sr_action_status'] == 'success') {
|
||||||
PMA_Message::success($_SESSION['replication']['sr_action_info'])->display();
|
PMA_Message::success($_SESSION['replication']['sr_action_info'])->display();
|
||||||
$_SESSION['replication']['sr_action_status'] = 'unknown';
|
$_SESSION['replication']['sr_action_status'] = 'unknown';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($server_master_status) {
|
if ($server_master_status) {
|
||||||
if (!isset($GLOBALS['repl_clear_scr'])) {
|
if (!isset($GLOBALS['repl_clear_scr'])) {
|
||||||
echo PMA_js_mootools_domready($jscode['master_replication']);
|
echo PMA_js_mootools_domready($jscode['master_replication']);
|
||||||
echo '<fieldset>'."\n";
|
echo '<fieldset>'."\n";
|
||||||
echo '<legend>'. $GLOBALS['strReplicationMaster'] .'</legend>'."\n";
|
echo '<legend>'. $GLOBALS['strReplicationMaster'] .'</legend>'."\n";
|
||||||
echo $GLOBALS['strReplicationConfiguredMaster']."\n";
|
echo $GLOBALS['strReplicationConfiguredMaster']."\n";
|
||||||
echo '<ul>'."\n";
|
echo '<ul>'."\n";
|
||||||
echo ' <li><a href="#" id="master_status_href">'. $GLOBALS['strReplicationShowMasterStatus'] .'</a> </li>';
|
echo ' <li><a href="#" id="master_status_href">'. $GLOBALS['strReplicationShowMasterStatus'] .'</a> </li>';
|
||||||
PMA_replication_print_status_table('master', true, false);
|
PMA_replication_print_status_table('master', true, false);
|
||||||
$_url_params = $GLOBALS['url_params'];
|
$_url_params = $GLOBALS['url_params'];
|
||||||
$_url_params['mr_adduser'] = true;
|
$_url_params['mr_adduser'] = true;
|
||||||
$_url_params['repl_clear_scr'] = true;
|
$_url_params['repl_clear_scr'] = true;
|
||||||
|
|
||||||
echo ' <li><a href="'.PMA_generate_common_url($_url_params).'" id="master_addslaveuser_href">'. $GLOBALS['strReplicationAddSlaveUser'] .'</a></li>';
|
echo ' <li><a href="'.PMA_generate_common_url($_url_params).'" id="master_addslaveuser_href">'. $GLOBALS['strReplicationAddSlaveUser'] .'</a></li>';
|
||||||
}
|
}
|
||||||
if (isset($GLOBALS['mr_adduser'])) {
|
if (isset($GLOBALS['mr_adduser'])) {
|
||||||
$fields_info = PMA_DBI_get_fields('mysql', 'user');
|
$fields_info = PMA_DBI_get_fields('mysql', 'user');
|
||||||
$username_length = 16;
|
$username_length = 16;
|
||||||
$hostname_length = 41;
|
$hostname_length = 41;
|
||||||
foreach ($fields_info as $key => $val) {
|
foreach ($fields_info as $key => $val) {
|
||||||
if ($val['Field'] == 'User') {
|
if ($val['Field'] == 'User') {
|
||||||
strtok($val['Type'], '()');
|
strtok($val['Type'], '()');
|
||||||
$v = strtok('()');
|
$v = strtok('()');
|
||||||
if (is_int($v)) {
|
if (is_int($v)) {
|
||||||
$username_length = $v;
|
$username_length = $v;
|
||||||
}
|
}
|
||||||
} elseif ($val['Field'] == 'Host') {
|
} elseif ($val['Field'] == 'Host') {
|
||||||
strtok($val['Type'], '()');
|
strtok($val['Type'], '()');
|
||||||
$v = strtok('()');
|
$v = strtok('()');
|
||||||
if (is_int($v)) {
|
if (is_int($v)) {
|
||||||
$hostname_length = $v;
|
$hostname_length = $v;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
unset($fields_info);
|
||||||
unset($fields_info);
|
|
||||||
|
|
||||||
if (isset($GLOBALS['username']) && strlen($GLOBALS['username']) === 0) {
|
if (isset($GLOBALS['username']) && strlen($GLOBALS['username']) === 0) {
|
||||||
$GLOBALS['pred_username'] = 'any';
|
$GLOBALS['pred_username'] = 'any';
|
||||||
}
|
}
|
||||||
echo '<div id="master_addslaveuser_gui">'."\n";
|
echo '<div id="master_addslaveuser_gui">'."\n";
|
||||||
echo '<form autocomplete="off" method="post" action="server_privileges.php" onsubmit="return checkAddUser(this);">'."\n";
|
echo '<form autocomplete="off" method="post" action="server_privileges.php" onsubmit="return checkAddUser(this);">'."\n";
|
||||||
echo PMA_generate_common_hidden_inputs('', '');
|
echo PMA_generate_common_hidden_inputs('', '');
|
||||||
echo '<fieldset id="fieldset_add_user_login">' . "\n"
|
echo '<fieldset id="fieldset_add_user_login">' . "\n"
|
||||||
. '<legend>'.$GLOBALS['strReplicationAddSlaveUser'].'</legend>' . "\n"
|
. '<legend>'.$GLOBALS['strReplicationAddSlaveUser'].'</legend>' . "\n"
|
||||||
. '<input id="checkbox_Repl_slave_priv" type="hidden" title="Needed for the replication slaves." value="Y" name="Repl_slave_priv"/>'. "\n"
|
. '<input id="checkbox_Repl_slave_priv" type="hidden" title="Needed for the replication slaves." value="Y" name="Repl_slave_priv"/>'. "\n"
|
||||||
. '<input type="hidden" name="sr_take_action" value="true" />'. "\n"
|
. '<input type="hidden" name="sr_take_action" value="true" />'. "\n"
|
||||||
. '<div class="item">' . "\n"
|
. '<div class="item">' . "\n"
|
||||||
. '<label for="select_pred_username">' . "\n"
|
. '<label for="select_pred_username">' . "\n"
|
||||||
. ' ' . $GLOBALS['strUserName'] . ':' . "\n"
|
. ' ' . $GLOBALS['strUserName'] . ':' . "\n"
|
||||||
. '</label>' . "\n"
|
. '</label>' . "\n"
|
||||||
. '<span class="options">' . "\n"
|
. '<span class="options">' . "\n"
|
||||||
. ' <select name="pred_username" id="select_pred_username" title="' . $GLOBALS['strUserName'] . '"' . "\n"
|
. ' <select name="pred_username" id="select_pred_username" title="' . $GLOBALS['strUserName'] . '"' . "\n"
|
||||||
. ' onchange="if (this.value == \'any\') { username.value = \'\'; } else if (this.value == \'userdefined\') { username.focus(); username.select(); }">' . "\n"
|
. ' onchange="if (this.value == \'any\') { username.value = \'\'; } else if (this.value == \'userdefined\') { username.focus(); username.select(); }">' . "\n"
|
||||||
. ' <option value="any"' . ((isset($GLOBALS['pred_username']) && $GLOBALS['pred_username'] == 'any') ? ' selected="selected"' : '') . '>' . $GLOBALS['strAnyUser'] . '</option>' . "\n"
|
. ' <option value="any"' . ((isset($GLOBALS['pred_username']) && $GLOBALS['pred_username'] == 'any') ? ' selected="selected"' : '') . '>' . $GLOBALS['strAnyUser'] . '</option>' . "\n"
|
||||||
. ' <option value="userdefined"' . ((!isset($GLOBALS['pred_username']) || $GLOBALS['pred_username'] == 'userdefined') ? ' selected="selected"' : '') . '>' . $GLOBALS['strUseTextField'] . ':</option>' . "\n"
|
. ' <option value="userdefined"' . ((!isset($GLOBALS['pred_username']) || $GLOBALS['pred_username'] == 'userdefined') ? ' selected="selected"' : '') . '>' . $GLOBALS['strUseTextField'] . ':</option>' . "\n"
|
||||||
. ' </select>' . "\n"
|
. ' </select>' . "\n"
|
||||||
. '</span>' . "\n"
|
. '</span>' . "\n"
|
||||||
. '<input type="text" name="username" maxlength="'
|
. '<input type="text" name="username" maxlength="'
|
||||||
. $username_length . '" title="' . $GLOBALS['strUserName'] . '"'
|
. $username_length . '" title="' . $GLOBALS['strUserName'] . '"'
|
||||||
. (empty($GLOBALS['username'])
|
. (empty($GLOBALS['username'])
|
||||||
? ''
|
? ''
|
||||||
: ' value="' . (isset($GLOBALS['new_username'])
|
: ' value="' . (isset($GLOBALS['new_username'])
|
||||||
? $GLOBALS['new_username']
|
? $GLOBALS['new_username']
|
||||||
: $GLOBALS['username']) . '"')
|
: $GLOBALS['username']) . '"')
|
||||||
. ' onchange="pred_username.value = \'userdefined\';" />' . "\n"
|
. ' onchange="pred_username.value = \'userdefined\';" />' . "\n"
|
||||||
. '</div>' . "\n"
|
. '</div>' . "\n"
|
||||||
. '<div class="item">' . "\n"
|
. '<div class="item">' . "\n"
|
||||||
. '<label for="select_pred_hostname">' . "\n"
|
. '<label for="select_pred_hostname">' . "\n"
|
||||||
. ' ' . $GLOBALS['strHost'] . ':' . "\n"
|
. ' ' . $GLOBALS['strHost'] . ':' . "\n"
|
||||||
. '</label>' . "\n"
|
. '</label>' . "\n"
|
||||||
. '<span class="options">' . "\n"
|
. '<span class="options">' . "\n"
|
||||||
. ' <select name="pred_hostname" id="select_pred_hostname" title="' . $GLOBALS['strHost'] . '"' . "\n";
|
. ' <select name="pred_hostname" id="select_pred_hostname" title="' . $GLOBALS['strHost'] . '"' . "\n";
|
||||||
$_current_user = PMA_DBI_fetch_value('SELECT USER();');
|
$_current_user = PMA_DBI_fetch_value('SELECT USER();');
|
||||||
if (! empty($_current_user)) {
|
if (! empty($_current_user)) {
|
||||||
$thishost = str_replace("'", '', substr($_current_user, (strrpos($_current_user, '@') + 1)));
|
$thishost = str_replace("'", '', substr($_current_user, (strrpos($_current_user, '@') + 1)));
|
||||||
if ($thishost == 'localhost' || $thishost == '127.0.0.1') {
|
if ($thishost == 'localhost' || $thishost == '127.0.0.1') {
|
||||||
unset($thishost);
|
unset($thishost);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
echo ' onchange="if (this.value == \'any\') { hostname.value = \'%\'; } else if (this.value == \'localhost\') { hostname.value = \'localhost\'; } '
|
||||||
echo ' onchange="if (this.value == \'any\') { hostname.value = \'%\'; } else if (this.value == \'localhost\') { hostname.value = \'localhost\'; } '
|
. (empty($thishost) ? '' : 'else if (this.value == \'thishost\') { hostname.value = \'' . addslashes(htmlspecialchars($thishost)) . '\'; } ')
|
||||||
. (empty($thishost) ? '' : 'else if (this.value == \'thishost\') { hostname.value = \'' . addslashes(htmlspecialchars($thishost)) . '\'; } ')
|
. 'else if (this.value == \'hosttable\') { hostname.value = \'\'; } else if (this.value == \'userdefined\') { hostname.focus(); hostname.select(); }">' . "\n";
|
||||||
. 'else if (this.value == \'hosttable\') { hostname.value = \'\'; } else if (this.value == \'userdefined\') { hostname.focus(); hostname.select(); }">' . "\n";
|
unset($_current_user);
|
||||||
unset($_current_user);
|
|
||||||
|
|
||||||
// when we start editing a user, $GLOBALS['pred_hostname'] is not defined
|
// when we start editing a user, $GLOBALS['pred_hostname'] is not defined
|
||||||
if (!isset($GLOBALS['pred_hostname']) && isset($GLOBALS['hostname'])) {
|
if (!isset($GLOBALS['pred_hostname']) && isset($GLOBALS['hostname'])) {
|
||||||
switch (strtolower($GLOBALS['hostname'])) {
|
switch (strtolower($GLOBALS['hostname'])) {
|
||||||
case 'localhost':
|
case 'localhost':
|
||||||
case '127.0.0.1':
|
case '127.0.0.1':
|
||||||
$GLOBALS['pred_hostname'] = 'localhost';
|
$GLOBALS['pred_hostname'] = 'localhost';
|
||||||
@@ -259,230 +261,238 @@ require './libraries/server_links.inc.php';
|
|||||||
default:
|
default:
|
||||||
$GLOBALS['pred_hostname'] = 'userdefined';
|
$GLOBALS['pred_hostname'] = 'userdefined';
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
echo ' <option value="any"'
|
||||||
echo ' <option value="any"'
|
. ((isset($GLOBALS['pred_hostname']) && $GLOBALS['pred_hostname'] == 'any')
|
||||||
. ((isset($GLOBALS['pred_hostname']) && $GLOBALS['pred_hostname'] == 'any')
|
|
||||||
? ' selected="selected"' : '') . '>' . $GLOBALS['strAnyHost']
|
? ' selected="selected"' : '') . '>' . $GLOBALS['strAnyHost']
|
||||||
. '</option>' . "\n"
|
. '</option>' . "\n"
|
||||||
. ' <option value="localhost"'
|
. ' <option value="localhost"'
|
||||||
. ((isset($GLOBALS['pred_hostname']) && $GLOBALS['pred_hostname'] == 'localhost')
|
. ((isset($GLOBALS['pred_hostname']) && $GLOBALS['pred_hostname'] == 'localhost')
|
||||||
? ' selected="selected"' : '') . '>' . $GLOBALS['strLocalhost']
|
? ' selected="selected"' : '') . '>' . $GLOBALS['strLocalhost']
|
||||||
. '</option>' . "\n";
|
|
||||||
if (!empty($thishost)) {
|
|
||||||
echo ' <option value="thishost"'
|
|
||||||
. ((isset($GLOBALS['pred_hostname']) && $GLOBALS['pred_hostname'] == 'thishost')
|
|
||||||
? ' selected="selected"' : '') . '>' . $GLOBALS['strThisHost']
|
|
||||||
. '</option>' . "\n";
|
. '</option>' . "\n";
|
||||||
}
|
if (!empty($thishost)) {
|
||||||
unset($thishost);
|
echo ' <option value="thishost"'
|
||||||
echo ' <option value="hosttable"'
|
. ((isset($GLOBALS['pred_hostname']) && $GLOBALS['pred_hostname'] == 'thishost')
|
||||||
. ((isset($GLOBALS['pred_hostname']) && $GLOBALS['pred_hostname'] == 'hosttable')
|
? ' selected="selected"' : '') . '>' . $GLOBALS['strThisHost']
|
||||||
|
. '</option>' . "\n";
|
||||||
|
}
|
||||||
|
unset($thishost);
|
||||||
|
echo ' <option value="hosttable"'
|
||||||
|
. ((isset($GLOBALS['pred_hostname']) && $GLOBALS['pred_hostname'] == 'hosttable')
|
||||||
? ' selected="selected"' : '') . '>' . $GLOBALS['strUseHostTable']
|
? ' selected="selected"' : '') . '>' . $GLOBALS['strUseHostTable']
|
||||||
. '</option>' . "\n"
|
. '</option>' . "\n"
|
||||||
. ' <option value="userdefined"'
|
. ' <option value="userdefined"'
|
||||||
. ((isset($GLOBALS['pred_hostname']) && $GLOBALS['pred_hostname'] == 'userdefined')
|
. ((isset($GLOBALS['pred_hostname']) && $GLOBALS['pred_hostname'] == 'userdefined')
|
||||||
? ' selected="selected"' : '')
|
? ' selected="selected"' : '')
|
||||||
. '>' . $GLOBALS['strUseTextField'] . ':</option>' . "\n"
|
. '>' . $GLOBALS['strUseTextField'] . ':</option>' . "\n"
|
||||||
. ' </select>' . "\n"
|
. ' </select>' . "\n"
|
||||||
. '</span>' . "\n"
|
. '</span>' . "\n"
|
||||||
. '<input type="text" name="hostname" maxlength="'
|
. '<input type="text" name="hostname" maxlength="'
|
||||||
. $hostname_length . '" value="'
|
. $hostname_length . '" value="'
|
||||||
. (isset($GLOBALS['hostname']) ? $GLOBALS['hostname'] : '')
|
. (isset($GLOBALS['hostname']) ? $GLOBALS['hostname'] : '')
|
||||||
. '" title="' . $GLOBALS['strHost']
|
. '" title="' . $GLOBALS['strHost']
|
||||||
. '" onchange="pred_hostname.value = \'userdefined\';" />' . "\n"
|
. '" onchange="pred_hostname.value = \'userdefined\';" />' . "\n"
|
||||||
. PMA_showHint($GLOBALS['strHostTableExplanation'])
|
. PMA_showHint($GLOBALS['strHostTableExplanation'])
|
||||||
. '</div>' . "\n"
|
. '</div>' . "\n"
|
||||||
. '<div class="item">' . "\n"
|
. '<div class="item">' . "\n"
|
||||||
. '<label for="select_pred_password">' . "\n"
|
. '<label for="select_pred_password">' . "\n"
|
||||||
. ' ' . $GLOBALS['strPassword'] . ':' . "\n"
|
. ' ' . $GLOBALS['strPassword'] . ':' . "\n"
|
||||||
. '</label>' . "\n"
|
. '</label>' . "\n"
|
||||||
. '<span class="options">' . "\n"
|
. '<span class="options">' . "\n"
|
||||||
. ' <select name="pred_password" id="select_pred_password" title="'
|
. ' <select name="pred_password" id="select_pred_password" title="'
|
||||||
. $GLOBALS['strPassword'] . '"' . "\n"
|
. $GLOBALS['strPassword'] . '"' . "\n"
|
||||||
. ' onchange="if (this.value == \'none\') { pma_pw.value = \'\'; pma_pw2.value = \'\'; } else if (this.value == \'userdefined\') { pma_pw.focus(); pma_pw.select(); }">' . "\n"
|
. ' onchange="if (this.value == \'none\') { pma_pw.value = \'\'; pma_pw2.value = \'\'; } else if (this.value == \'userdefined\') { pma_pw.focus(); pma_pw.select(); }">' . "\n"
|
||||||
. ' <option value="none"';
|
. ' <option value="none"';
|
||||||
if (isset($GLOBALS['username']) && $mode != 'change') {
|
if (isset($GLOBALS['username']) && $mode != 'change') {
|
||||||
echo ' selected="selected"';
|
echo ' selected="selected"';
|
||||||
|
}
|
||||||
|
echo '>' . $GLOBALS['strNoPassword'] . '</option>' . "\n"
|
||||||
|
. ' <option value="userdefined"' . (isset($GLOBALS['username']) ? '' : ' selected="selected"') . '>' . $GLOBALS['strUseTextField'] . ':</option>' . "\n"
|
||||||
|
. ' </select>' . "\n"
|
||||||
|
. '</span>' . "\n"
|
||||||
|
. '<input type="password" id="text_pma_pw" name="pma_pw" title="' . $GLOBALS['strPassword'] . '" onchange="pred_password.value = \'userdefined\';" />' . "\n"
|
||||||
|
. '</div>' . "\n"
|
||||||
|
. '<div class="item">' . "\n"
|
||||||
|
. '<label for="text_pma_pw2">' . "\n"
|
||||||
|
. ' ' . $GLOBALS['strReType'] . ':' . "\n"
|
||||||
|
. '</label>' . "\n"
|
||||||
|
. '<span class="options"> </span>' . "\n"
|
||||||
|
. '<input type="password" name="pma_pw2" id="text_pma_pw2" title="' . $GLOBALS['strReType'] . '" onchange="pred_password.value = \'userdefined\';" />' . "\n"
|
||||||
|
. '</div>' . "\n"
|
||||||
|
. '<div class="item">' . "\n"
|
||||||
|
. '<label for="button_generate_password">' . "\n"
|
||||||
|
. ' ' . $GLOBALS['strGeneratePassword'] . ':' . "\n"
|
||||||
|
. '</label>' . "\n"
|
||||||
|
. '<span class="options">' . "\n"
|
||||||
|
. ' <input type="button" id="button_generate_password" value="' . $GLOBALS['strGenerate'] . '" onclick="suggestPassword(this.form)" />' . "\n"
|
||||||
|
. '</span>' . "\n"
|
||||||
|
. '<input type="text" name="generated_pw" id="generated_pw" />' . "\n"
|
||||||
|
. '</div>' . "\n"
|
||||||
|
. '</fieldset>' . "\n";
|
||||||
|
echo '<fieldset id="fieldset_user_privtable_footer" class="tblFooters">' . "\n"
|
||||||
|
. ' <input type="submit" name="adduser_submit" id="adduser_submit" value="' . $GLOBALS['strGo'] . '" />' . "\n"
|
||||||
|
. '</fieldset>' . "\n";
|
||||||
|
echo '</form>'."\n";
|
||||||
|
echo '</div>'."\n";///////
|
||||||
|
} elseif (!isset($GLOBALS['repl_clear_scr'])) {
|
||||||
|
echo "</ul>\n";
|
||||||
|
echo '</fieldset>'."\n";
|
||||||
}
|
}
|
||||||
echo '>' . $GLOBALS['strNoPassword'] . '</option>' . "\n"
|
|
||||||
. ' <option value="userdefined"' . (isset($GLOBALS['username']) ? '' : ' selected="selected"') . '>' . $GLOBALS['strUseTextField'] . ':</option>' . "\n"
|
|
||||||
. ' </select>' . "\n"
|
|
||||||
. '</span>' . "\n"
|
|
||||||
. '<input type="password" id="text_pma_pw" name="pma_pw" title="' . $GLOBALS['strPassword'] . '" onchange="pred_password.value = \'userdefined\';" />' . "\n"
|
|
||||||
. '</div>' . "\n"
|
|
||||||
. '<div class="item">' . "\n"
|
|
||||||
. '<label for="text_pma_pw2">' . "\n"
|
|
||||||
. ' ' . $GLOBALS['strReType'] . ':' . "\n"
|
|
||||||
. '</label>' . "\n"
|
|
||||||
. '<span class="options"> </span>' . "\n"
|
|
||||||
. '<input type="password" name="pma_pw2" id="text_pma_pw2" title="' . $GLOBALS['strReType'] . '" onchange="pred_password.value = \'userdefined\';" />' . "\n"
|
|
||||||
. '</div>' . "\n"
|
|
||||||
. '<div class="item">' . "\n"
|
|
||||||
. '<label for="button_generate_password">' . "\n"
|
|
||||||
. ' ' . $GLOBALS['strGeneratePassword'] . ':' . "\n"
|
|
||||||
. '</label>' . "\n"
|
|
||||||
. '<span class="options">' . "\n"
|
|
||||||
. ' <input type="button" id="button_generate_password" value="' . $GLOBALS['strGenerate'] . '" onclick="suggestPassword(this.form)" />' . "\n"
|
|
||||||
. '</span>' . "\n"
|
|
||||||
. '<input type="text" name="generated_pw" id="generated_pw" />' . "\n"
|
|
||||||
. '</div>' . "\n"
|
|
||||||
. '</fieldset>' . "\n";
|
|
||||||
echo '<fieldset id="fieldset_user_privtable_footer" class="tblFooters">' . "\n"
|
|
||||||
. ' <input type="submit" name="adduser_submit" id="adduser_submit" value="' . $GLOBALS['strGo'] . '" />' . "\n"
|
|
||||||
. '</fieldset>' . "\n";
|
|
||||||
echo '</form>'."\n";
|
|
||||||
echo '</div>'."\n";///////
|
|
||||||
} elseif (!isset($GLOBALS['repl_clear_scr'])) {
|
|
||||||
echo "</ul>\n";
|
|
||||||
echo '</fieldset>'."\n";
|
|
||||||
}
|
|
||||||
} elseif (!isset($GLOBALS['mr_configure']) && !isset($GLOBALS['repl_clear_scr'])) {
|
} elseif (!isset($GLOBALS['mr_configure']) && !isset($GLOBALS['repl_clear_scr'])) {
|
||||||
$_url_params = $GLOBALS['url_params'];
|
$_url_params = $GLOBALS['url_params'];
|
||||||
$_url_params['mr_configure'] = true;
|
$_url_params['mr_configure'] = true;
|
||||||
|
|
||||||
echo '<fieldset>'."\n";
|
echo '<fieldset>'."\n";
|
||||||
echo '<legend>'. $GLOBALS['strReplicationMaster'] .'</legend>'."\n";
|
echo '<legend>'. $GLOBALS['strReplicationMaster'] .'</legend>'."\n";
|
||||||
echo sprintf($GLOBALS['strReplicationServernConfiguredMaster'], PMA_generate_common_url($_url_params)) ."\n";
|
echo sprintf($GLOBALS['strReplicationServernConfiguredMaster'], PMA_generate_common_url($_url_params)) ."\n";
|
||||||
echo '</fieldset>'."\n";
|
echo '</fieldset>'."\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($GLOBALS['mr_configure'])) {
|
if (isset($GLOBALS['mr_configure'])) {
|
||||||
echo PMA_js_mootools_domready($jscode['configure_master']);
|
echo PMA_js_mootools_domready($jscode['configure_master']);
|
||||||
echo '<fieldset>'."\n";
|
echo '<fieldset>'."\n";
|
||||||
echo '<legend>'. $GLOBALS['strReplicationMasterConfiguration'] .'</legend>'."\n";
|
echo '<legend>'. $GLOBALS['strReplicationMasterConfiguration'] .'</legend>'."\n";
|
||||||
echo $GLOBALS['strReplicationMasterChooseMode'].'<br /><br />'."\n";
|
echo $GLOBALS['strReplicationMasterChooseMode'].'<br /><br />'."\n";
|
||||||
|
|
||||||
echo '<select name="db_type" id="db_type">'."\n";
|
echo '<select name="db_type" id="db_type">'."\n";
|
||||||
echo '<option value="all">'. $GLOBALS['strReplicationMasterChooseAll'] .'</option>'."\n";
|
echo '<option value="all">'. $GLOBALS['strReplicationMasterChooseAll'] .'</option>'."\n";
|
||||||
echo '<option value="ign">'. $GLOBALS['strReplicationMasterChooseIgn'] .'</option>'."\n";
|
echo '<option value="ign">'. $GLOBALS['strReplicationMasterChooseIgn'] .'</option>'."\n";
|
||||||
echo '</select>'."\n";
|
echo '</select>'."\n";
|
||||||
echo '<br /><br />'."\n";
|
echo '<br /><br />'."\n";
|
||||||
echo $GLOBALS['strReplicationSelectDatabases'].'<br />'."\n";
|
echo $GLOBALS['strReplicationSelectDatabases'].'<br />'."\n";
|
||||||
echo PMA_replication_db_multibox();
|
echo PMA_replication_db_multibox();
|
||||||
echo '<br /><br />'."\n";
|
echo '<br /><br />'."\n";
|
||||||
echo $GLOBALS['strReplicationAddLines'].'<br />'."\n";
|
echo $GLOBALS['strReplicationAddLines'].'<br />'."\n";
|
||||||
echo '<pre><div id="rep">server-id='. $serverid .'<br />log-bin=mysql-bin<br />log-error=mysql-bin.err<br /></div></pre>'."\n";
|
echo '<pre><div id="rep">server-id='. $serverid .'<br />log-bin=mysql-bin<br />log-error=mysql-bin.err<br /></div></pre>'."\n";
|
||||||
echo $GLOBALS['strReplicationRestartServer'] ."\n";
|
echo $GLOBALS['strReplicationRestartServer'] ."\n";
|
||||||
echo '</fieldset>'."\n";
|
echo '</fieldset>'."\n";
|
||||||
echo '<fieldset class="tblFooters">';
|
echo '<fieldset class="tblFooters">';
|
||||||
echo ' <form autocomplete="off" method="post" action="server_replication.php" >'."\n";
|
echo ' <form autocomplete="off" method="post" action="server_replication.php" >'."\n";
|
||||||
echo PMA_generate_common_hidden_inputs('', '');
|
echo PMA_generate_common_hidden_inputs('', '');
|
||||||
echo ' <input type="submit" value="' . $GLOBALS['strGo'] . '" id="goButton" />';
|
echo ' <input type="submit" value="' . $GLOBALS['strGo'] . '" id="goButton" />';
|
||||||
echo ' </form>'."\n";
|
echo ' </form>'."\n";
|
||||||
echo '</fieldset>';
|
echo '</fieldset>';
|
||||||
|
|
||||||
require_once './libraries/footer.inc.php';
|
require_once './libraries/footer.inc.php';
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
echo '</div>';
|
echo '</div>';
|
||||||
|
|
||||||
if (!isset($GLOBALS['repl_clear_scr'])) {
|
if (!isset($GLOBALS['repl_clear_scr'])) {
|
||||||
echo '<fieldset>'."\n";
|
echo '<fieldset>'."\n";
|
||||||
echo '<legend>Server Replication</legend>'."\n";
|
echo '<legend>Server Replication</legend>'."\n";
|
||||||
if ($server_slave_status) {
|
if ($server_slave_status) {
|
||||||
echo PMA_js_mootools_domready($jscode['slave_control']);
|
echo PMA_js_mootools_domready($jscode['slave_control']);
|
||||||
echo '<div id="slave_configuration_gui">'."\n";
|
echo '<div id="slave_configuration_gui">'."\n";
|
||||||
|
|
||||||
$_url_params = $GLOBALS['url_params'];
|
$_url_params = $GLOBALS['url_params'];
|
||||||
$_url_params['sr_take_action'] = true;
|
$_url_params['sr_take_action'] = true;
|
||||||
$_url_params['sr_slave_server_control'] = true;
|
$_url_params['sr_slave_server_control'] = true;
|
||||||
|
|
||||||
if ($server_slave_replication[0]['Slave_IO_Running']=='No')
|
if ($server_slave_replication[0]['Slave_IO_Running'] == 'No') {
|
||||||
$_url_params['sr_slave_action'] = 'start';
|
$_url_params['sr_slave_action'] = 'start';
|
||||||
else
|
} else {
|
||||||
$_url_params['sr_slave_action'] = 'stop';
|
$_url_params['sr_slave_action'] = 'stop';
|
||||||
$_url_params['sr_slave_control_parm'] = 'IO_THREAD';
|
}
|
||||||
$slave_control_io_link = PMA_generate_common_url($_url_params);
|
|
||||||
|
$_url_params['sr_slave_control_parm'] = 'IO_THREAD';
|
||||||
if ($server_slave_replication[0]['Slave_SQL_Running']=='No')
|
$slave_control_io_link = PMA_generate_common_url($_url_params);
|
||||||
$_url_params['sr_slave_action'] = 'start';
|
|
||||||
else
|
if ($server_slave_replication[0]['Slave_SQL_Running'] == 'No') {
|
||||||
$_url_params['sr_slave_action'] = 'stop';
|
$_url_params['sr_slave_action'] = 'start';
|
||||||
$_url_params['sr_slave_control_parm'] = 'SQL_THREAD';
|
} else {
|
||||||
$slave_control_sql_link = PMA_generate_common_url($_url_params);
|
$_url_params['sr_slave_action'] = 'stop';
|
||||||
|
}
|
||||||
if ($server_slave_replication[0]['Slave_IO_Running']=='No' || $server_slave_replication[0]['Slave_SQL_Running']=='No')
|
|
||||||
$_url_params['sr_slave_action'] = 'start';
|
$_url_params['sr_slave_control_parm'] = 'SQL_THREAD';
|
||||||
else
|
$slave_control_sql_link = PMA_generate_common_url($_url_params);
|
||||||
$_url_params['sr_slave_action'] = 'stop';
|
|
||||||
$_url_params['sr_slave_control_parm'] = null;
|
if ($server_slave_replication[0]['Slave_IO_Running'] == 'No'
|
||||||
$slave_control_full_link = PMA_generate_common_url($_url_params);
|
|| $server_slave_replication[0]['Slave_SQL_Running'] == 'No'
|
||||||
|
) {
|
||||||
$_url_params['sr_slave_action'] = 'reset';
|
$_url_params['sr_slave_action'] = 'start';
|
||||||
$slave_control_reset_link = PMA_generate_common_url($_url_params);
|
} else {
|
||||||
|
$_url_params['sr_slave_action'] = 'stop';
|
||||||
$_url_params = $GLOBALS['url_params'];
|
}
|
||||||
$_url_params['sr_slave_skip_error'] = true;
|
|
||||||
$slave_skip_error_link = PMA_generate_common_url($_url_params);
|
$_url_params['sr_slave_control_parm'] = null;
|
||||||
|
$slave_control_full_link = PMA_generate_common_url($_url_params);
|
||||||
if ($server_slave_replication[0]['Slave_SQL_Running']=='No')
|
|
||||||
PMA_Message::warning('Slave SQL Thread not running!')->display();
|
$_url_params['sr_slave_action'] = 'reset';
|
||||||
if ($server_slave_replication[0]['Slave_IO_Running']=='No')
|
$slave_control_reset_link = PMA_generate_common_url($_url_params);
|
||||||
PMA_Message::warning('Slave IO Thread not running!')->display();
|
|
||||||
|
$_url_params = $GLOBALS['url_params'];
|
||||||
$_url_params = $GLOBALS['url_params'];
|
$_url_params['sr_slave_skip_error'] = true;
|
||||||
$_url_params['sl_configure'] = true;
|
$slave_skip_error_link = PMA_generate_common_url($_url_params);
|
||||||
$_url_params['repl_clear_scr'] = true;
|
|
||||||
|
if ($server_slave_replication[0]['Slave_SQL_Running'] == 'No')
|
||||||
$reconfiguremaster_link = PMA_generate_common_url($_url_params);
|
PMA_Message::warning('Slave SQL Thread not running!')->display();
|
||||||
|
if ($server_slave_replication[0]['Slave_IO_Running'] == 'No')
|
||||||
echo $GLOBALS['strReplicationSlaveConfigured']."\n";
|
PMA_Message::warning('Slave IO Thread not running!')->display();
|
||||||
echo '<br />'."\n";
|
|
||||||
echo '<ul>'."\n";
|
$_url_params = $GLOBALS['url_params'];
|
||||||
echo ' <li><a href="#" id="slave_status_href">'. $GLOBALS['strReplicationSlaveSeeStatus'].'</a></li>'."\n";
|
$_url_params['sl_configure'] = true;
|
||||||
echo PMA_replication_print_status_table('slave', true, false);
|
$_url_params['repl_clear_scr'] = true;
|
||||||
if (isset($_SESSION['replication']['m_correct']) && $_SESSION['replication']['m_correct']==true) {
|
|
||||||
echo PMA_js_mootools_domready($jscode['slave_control_sync']);
|
$reconfiguremaster_link = PMA_generate_common_url($_url_params);
|
||||||
echo ' <li><a href="#" id="slave_synchronization_href">'.$GLOBALS['strReplicationSynchronize'].'</a></li>'."\n";
|
|
||||||
echo ' <div id="slave_synchronization_gui" style="display: none">'."\n";
|
echo $GLOBALS['strReplicationSlaveConfigured']."\n";
|
||||||
echo ' <form method="post">'."\n";
|
echo '<br />'."\n";
|
||||||
echo PMA_generate_common_hidden_inputs('', '');
|
echo '<ul>'."\n";
|
||||||
echo ' <input type="checkbox" name="repl_struc" value="1" checked disabled /> '. $GLOBALS['strStructure']. '<br />'."\n"; // this is just for vizualization, it has no other purpose
|
echo ' <li><a href="#" id="slave_status_href">'. $GLOBALS['strReplicationSlaveSeeStatus'].'</a></li>'."\n";
|
||||||
echo ' <input type="checkbox" name="repl_data" value="1" checked /> '. $GLOBALS['strData'] .' <br />'."\n";
|
echo PMA_replication_print_status_table('slave', true, false);
|
||||||
echo ' <input type="hidden" name="sr_take_action" value="1" />'."\n";
|
if (isset($_SESSION['replication']['m_correct']) && $_SESSION['replication']['m_correct'] == true) {
|
||||||
echo ' <input type="submit" name="sl_sync" value="'. $GLOBALS['strGo'] .'" />'."\n";
|
echo PMA_js_mootools_domready($jscode['slave_control_sync']);
|
||||||
echo ' </form>'."\n";
|
echo ' <li><a href="#" id="slave_synchronization_href">'.$GLOBALS['strReplicationSynchronize'].'</a></li>'."\n";
|
||||||
echo ' </div>'."\n";
|
echo ' <div id="slave_synchronization_gui" style="display: none">'."\n";
|
||||||
|
echo ' <form method="post">'."\n";
|
||||||
|
echo PMA_generate_common_hidden_inputs('', '');
|
||||||
|
echo ' <input type="checkbox" name="repl_struc" value="1" checked disabled /> '. $GLOBALS['strStructure']. '<br />'."\n"; // this is just for vizualization, it has no other purpose
|
||||||
|
echo ' <input type="checkbox" name="repl_data" value="1" checked /> '. $GLOBALS['strData'] .' <br />'."\n";
|
||||||
|
echo ' <input type="hidden" name="sr_take_action" value="1" />'."\n";
|
||||||
|
echo ' <input type="submit" name="sl_sync" value="'. $GLOBALS['strGo'] .'" />'."\n";
|
||||||
|
echo ' </form>'."\n";
|
||||||
|
echo ' </div>'."\n";
|
||||||
|
}
|
||||||
|
echo ' <li><a href="#" id="slave_control_href">'. $GLOBALS['strReplicationControlSlave'] .'</li>'."\n";
|
||||||
|
echo ' <div id="slave_control_gui" style="display: none">'."\n";
|
||||||
|
echo ' <ul>'."\n";
|
||||||
|
echo ' <li><a a href="'. $slave_control_full_link .'">'. $GLOBALS['strFull'] . ' ' . (($server_slave_replication[0]['Slave_IO_Running'] == 'No' || $server_slave_replication[0]['Slave_SQL_Running'] == 'No') ? $GLOBALS['strStart'] : $GLOBALS['strStop']). ' </a></li>'."\n";
|
||||||
|
echo ' <li><a a href="'. $slave_control_reset_link .'">'. $GLOBALS['strReplicationSlaveReset'] .'</li>'."\n";
|
||||||
|
echo ' <li><a a href="'. $slave_control_sql_link .'">'. sprintf($GLOBALS['strReplicationSlaveSQLThread'], ($server_slave_replication[0]['Slave_SQL_Running'] == 'No' ? $GLOBALS['strStart'] : $GLOBALS['strStop'])) .'</a></li>'."\n";
|
||||||
|
echo ' <li><a a href="'. $slave_control_io_link .'">'. sprintf($GLOBALS['strReplicationSlaveIOThread'], ($server_slave_replication[0]['Slave_IO_Running'] == 'No' ? $GLOBALS['strStart'] : $GLOBALS['strStop'])) .'</a></li>'."\n";
|
||||||
|
echo ' </ul>'."\n";
|
||||||
|
echo ' </div>'."\n";
|
||||||
|
echo ' <li><a href="#" id="slave_errormanagement_href">'. $GLOBALS['strReplicationSlaveErrorManagement'] .'</a></li>'."\n";
|
||||||
|
echo ' <div id="slave_errormanagement_gui" style="display: none">'."\n";
|
||||||
|
PMA_Message::warning($GLOBALS['strReplicationSkippingErrorWarn'])->display();
|
||||||
|
echo ' <ul>'."\n";
|
||||||
|
echo ' <li><a href="'. $slave_skip_error_link .'">'. $GLOBALS['strReplicationSlaveSkipCurrentError'] .'</a></li>'."\n";
|
||||||
|
echo ' <li>'.$GLOBALS['strReplicationSlaveSkipNext']."\n";
|
||||||
|
echo ' <form method="post">'."\n";
|
||||||
|
echo PMA_generate_common_hidden_inputs('', '');
|
||||||
|
echo ' <input type="text" name="sr_skip_errors_count" value="1" style="width: 30px" />'.$GLOBALS['strReplicationSlaveSkipNextErrors']."\n";
|
||||||
|
echo ' <input type="submit" name="sr_slave_skip_error" value="'. $GLOBALS['strGo'] .'" />'."\n";
|
||||||
|
echo ' <input type="hidden" name="sr_take_action" value="1" />'."\n";
|
||||||
|
echo ' </form></li>'."\n";
|
||||||
|
echo ' </ul>'."\n";
|
||||||
|
echo ' </div>'."\n";
|
||||||
|
echo ' <li><a href="'. $reconfiguremaster_link .'">'.$GLOBALS['strReplicationSlaveChangeMaster'].'</a></li>'."\n";
|
||||||
|
echo '</ul>'."\n";
|
||||||
|
|
||||||
|
} elseif (!isset($GLOBALS['sl_configure'])) {
|
||||||
|
$_url_params = $GLOBALS['url_params'];
|
||||||
|
$_url_params['sl_configure'] = true;
|
||||||
|
$_url_params['repl_clear_scr'] = true;
|
||||||
|
|
||||||
|
echo sprintf($GLOBALS['strReplicationSlaveNotConfigured'], PMA_generate_common_url($_url_params))."\n";
|
||||||
}
|
}
|
||||||
echo ' <li><a href="#" id="slave_control_href">'. $GLOBALS['strReplicationControlSlave'] .'</li>'."\n";
|
echo '</fieldset>'."\n";
|
||||||
echo ' <div id="slave_control_gui" style="display: none">'."\n";
|
|
||||||
echo ' <ul>'."\n";
|
|
||||||
echo ' <li><a a href="'. $slave_control_full_link .'">'. $GLOBALS['strFull'] . ' ' . (($server_slave_replication[0]['Slave_IO_Running']=='No' || $server_slave_replication[0]['Slave_SQL_Running']=='No') ? $GLOBALS['strStart'] : $GLOBALS['strStop']). ' </a></li>'."\n";
|
|
||||||
echo ' <li><a a href="'. $slave_control_reset_link .'">'. $GLOBALS['strReplicationSlaveReset'] .'</li>'."\n";
|
|
||||||
echo ' <li><a a href="'. $slave_control_sql_link .'">'. sprintf($GLOBALS['strReplicationSlaveSQLThread'], ($server_slave_replication[0]['Slave_SQL_Running']=='No' ? $GLOBALS['strStart'] : $GLOBALS['strStop'])) .'</a></li>'."\n";
|
|
||||||
echo ' <li><a a href="'. $slave_control_io_link .'">'. sprintf($GLOBALS['strReplicationSlaveIOThread'], ($server_slave_replication[0]['Slave_IO_Running']=='No' ? $GLOBALS['strStart'] : $GLOBALS['strStop'])) .'</a></li>'."\n";
|
|
||||||
echo ' </ul>'."\n";
|
|
||||||
echo ' </div>'."\n";
|
|
||||||
echo ' <li><a href="#" id="slave_errormanagement_href">'. $GLOBALS['strReplicationSlaveErrorManagement'] .'</a></li>'."\n";
|
|
||||||
echo ' <div id="slave_errormanagement_gui" style="display: none">'."\n";
|
|
||||||
PMA_Message::warning($GLOBALS['strReplicationSkippingErrorWarn'])->display();
|
|
||||||
echo ' <ul>'."\n";
|
|
||||||
echo ' <li><a href="'. $slave_skip_error_link .'">'. $GLOBALS['strReplicationSlaveSkipCurrentError'] .'</a></li>'."\n";
|
|
||||||
echo ' <li>'.$GLOBALS['strReplicationSlaveSkipNext']."\n";
|
|
||||||
echo ' <form method="post">'."\n";
|
|
||||||
echo PMA_generate_common_hidden_inputs('', '');
|
|
||||||
echo ' <input type="text" name="sr_skip_errors_count" value="1" style="width: 30px" />'.$GLOBALS['strReplicationSlaveSkipNextErrors']."\n";
|
|
||||||
echo ' <input type="submit" name="sr_slave_skip_error" value="'. $GLOBALS['strGo'] .'" />'."\n";
|
|
||||||
echo ' <input type="hidden" name="sr_take_action" value="1" />'."\n";
|
|
||||||
echo ' </form></li>'."\n";
|
|
||||||
echo ' </ul>'."\n";
|
|
||||||
echo ' </div>'."\n";
|
|
||||||
echo ' <li><a href="'. $reconfiguremaster_link .'">'.$GLOBALS['strReplicationSlaveChangeMaster'].'</a></li>'."\n";
|
|
||||||
echo '</ul>'."\n";
|
|
||||||
|
|
||||||
} elseif (!isset($GLOBALS['sl_configure'])) {
|
|
||||||
$_url_params = $GLOBALS['url_params'];
|
|
||||||
$_url_params['sl_configure'] = true;
|
|
||||||
$_url_params['repl_clear_scr'] = true;
|
|
||||||
|
|
||||||
echo sprintf($GLOBALS['strReplicationSlaveNotConfigured'], PMA_generate_common_url($_url_params))."\n";
|
|
||||||
}
|
|
||||||
echo '</fieldset>'."\n";
|
|
||||||
}
|
}
|
||||||
if (isset($GLOBALS['sl_configure'])) {
|
if (isset($GLOBALS['sl_configure'])) {
|
||||||
PMA_replication_gui_changemaster("slave_chagemaster");
|
PMA_replication_gui_changemaster("slave_chagemaster");
|
||||||
}
|
}
|
||||||
echo '</div>'."\n";
|
echo '</div>'."\n";
|
||||||
require_once './libraries/footer.inc.php';
|
require_once './libraries/footer.inc.php';
|
||||||
|
@@ -351,17 +351,17 @@ echo sprintf($strServerStatusUptime,
|
|||||||
<?php
|
<?php
|
||||||
if ($server_master_status || $server_slave_status)
|
if ($server_master_status || $server_slave_status)
|
||||||
{
|
{
|
||||||
$replicationOut = "";
|
$replicationOut = "";
|
||||||
foreach ($replication_types as $type)
|
foreach ($replication_types as $type)
|
||||||
{
|
|
||||||
if (${"server_{$type}_status"})
|
|
||||||
{
|
{
|
||||||
if ($replicationOut != "")
|
if (${"server_{$type}_status"})
|
||||||
$replicationOut .= $strAndSmall . ' ';
|
{
|
||||||
$replicationOut .= '<b>' . $type . '</b> ';
|
if ($replicationOut != "")
|
||||||
|
$replicationOut .= $strAndSmall . ' ';
|
||||||
|
$replicationOut .= '<b>' . $type . '</b> ';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
echo sprintf('<p>' . $strReplicationStatusInfo . '</p>', $replicationOut);
|
||||||
echo sprintf('<p>' . $strReplicationStatusInfo . '</p>', $replicationOut);
|
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|
||||||
@@ -700,19 +700,19 @@ unset($section_name, $section, $sections, $server_status, $odd_row, $alerts);
|
|||||||
/* if the server works as master or slave in replication process, display useful information */
|
/* if the server works as master or slave in replication process, display useful information */
|
||||||
if ($server_master_status || $server_slave_status)
|
if ($server_master_status || $server_slave_status)
|
||||||
{
|
{
|
||||||
?>
|
?>
|
||||||
<hr class="clearfloat" />
|
<hr class="clearfloat" />
|
||||||
|
|
||||||
<h3><a name="replication"></a><?php echo $strReplicationStatus; ?></h3>
|
<h3><a name="replication"></a><?php echo $strReplicationStatus; ?></h3>
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
foreach ($replication_types as $type)
|
foreach ($replication_types as $type)
|
||||||
{
|
{
|
||||||
if (${"server_{$type}_status"})
|
if (${"server_{$type}_status"}) {
|
||||||
PMA_replication_print_status_table($type);
|
PMA_replication_print_status_table($type);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
unset($types);
|
unset($types);
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user