Springe zum Inhalt

Um die MySQL-Replikation komplett zu deaktivieren führt man zuerst auf dem Slave folgende Kommandos aus:

STOP SLAVE;
 
RESET SLAVE ALL;
-- für Versionen älter als 5.5.16:
RESET SLAVE;

Danach editiert man /etc/mysql/my.cnf und entfernt alle Angaben, die mit master- oder replicate- beginnen. Anschließend wird der MySQL-Server mit

service mysql restart

neu gestartet.

Auf dem Master kommentiert man in der /etc/mysql/my.cnf alle Zeilen aus oder löscht sie, die mit server-, binlog- oder log_bin beginnen. Anschließend wird auch der Server-MySQL-Prozess neu gestartet.

Auf dem ehemaligen Master sollte nun mit

SHOW MASTER STATUS;

nichts mehr ausgegeben werden. Ebenso sollte auf dem ehemaligen Slave mit

SHOW SLAVE STATUS;

nichts mehr ausgegeben werden. Die MySQL-Replikation wurde komplett deaktiviert.

Nachfolgende Funktion berechnet die Entfernung zwischen zwei in geographischer Länge und Breite angegebenen Punkten auf der Erde in Kilometer:

drop function if exists entfernung;
delimiter //
create function entfernung(lat1 double, lon1 double, lat2 double, lon2 double)
	returns double
	language sql
	contains sql
	comment 'Berechnet die Entfernung zwischen zwei Koordinaten'
begin
	declare erdradius double;

	declare lambda1 double;
	declare phi1 double;

	declare lambda2 double;
	declare phi2 double;

	declare x1 double;
	declare y1 double;
	declare z1 double;

	declare x2 double;
	declare y2 double;
	declare z2 double;

	declare entfernung double;

	set erdradius = 6371;

	set lambda1 = lon1 * pi() / 180;
	set phi1 = lat1 * pi() / 180;

	set lambda2 = lon2 * pi() / 180;
	set phi2 = lat2 * pi() / 180;

	set x1 = erdradius * cos(phi1) * cos(lambda1);
	set y1 = erdradius * cos(phi1) * sin(lambda1);
	set z1 = erdradius * sin(phi1);

	set x2 = erdradius * cos(phi2) * cos(lambda2);
	set y2 = erdradius * cos(phi2) * sin(lambda2);
	set z2 = erdradius * sin(phi2);

	set entfernung = 2 * erdradius * asin(sqrt(pow(x1 - x2, 2) + pow(y1 - y2, 2) + pow(z1 - z2, 2)) / (2 * erdradius));

	return entfernung;
end;
//

Update:
Folgende Funktion ist ca. 4 Mal schneller (getestet mit der MySQL-Funktion BENCHMARK(), Quelle)

DELIMITER //

DROP FUNCTION IF EXISTS DISTANCE; //

CREATE FUNCTION DISTANCE( lat1 DOUBLE, lon1 DOUBLE, lat2 DOUBLE, lon2 DOUBLE ) 
    RETURNS DOUBLE NO SQL DETERMINISTIC
    COMMENT 'counts distance (km) between 2 points on Earth surface'
BEGIN
    DECLARE dtor DOUBLE DEFAULT 57.295800;

    RETURN (6371 * acos(sin( lat1/dtor) * sin(lat2/dtor) +
        cos(lat1/dtor) * cos(lat2/dtor) * 
        cos(lon2/dtor - lon1/dtor)));
END; //

DELIMITER ;

Beispiel der Ausgabe einer MySQL-Tabelle mit den Drupal-Formatierungsfunktionen:

<?php
  $result = db_query("SELECT * FROM {my_table}");
  $output = '';
  $rows = array();
  $header = array('id','Domain','Module');
  $rows = array();
  $i = 0;
  while($row = db_fetch_object($result)){
    $data = array();
    $data[] = $row->sid;
    $data[] = $row->domain;
    $data[] = $row->module;
    $rows[] = $data;
    $i++;
  }
  $output .= theme('table', $header,$rows);
  echo $output;
?>

Zur Anzeige ist einfach der obige Code in eine neue Drupal-Seite einzufügen und als Eingabeformat PHP code auszuwählen. Aber Vorsicht! Der PHP-Code sollte syntaktisch korrekt sein und man sollte wissen, wie man fehlerhaften Code per Hand wieder aus der Drupal-Datenbank bekommt.