TYPO3 Extension Synchronisation (mmsynchro)

Um eine sichtbare, einfache Datensicherung einer TYPO3 Web Präsens zu erreichen, bietet sich die Extension Synchronisation an. Die Verbindung soll über eine SSH2 gesicherte Verbindung laufen, damit sie auch über das Internet eingesetzt werden kann.

Da die offizielle Beschreibung leider nur sehr allgemein gehalten ist, versuche ich an Hand eines praktischen Beispiels Randinformationen zu geben, so dass man diese Extension produktiv einsetzen kann. Da der Programmcode auf mich einen professionellen Eindruck macht, denke ich, dass es das Wert ist.

Die Benutzerführung geht über 5 Reiter im rechten Fenster. Dazu muss man erst links im Bedienbaum ganz unten auf /Synchronisation/Synchronisation klicken.

Im Test der Extension Synchronisation war folgende Konstellation im lokalen Netzwerk vorhanden:

Server A: http://www.rudiswiki.de/flugis 192.168.17.72  (Ubuntu 10.04.1, TYPO3 ver. 4.3.3)

Server B: http://localhost/cms           192.168.17.148 (Ubuntu 10.10,   TYPO3 ver. 4.3.3)

Konfiguration

Basics - Hier werden die grundsätzlichen Daten der Synchronisation eingetragen. Bei der Angabe zum Log-File Ordner empfiehlt es sich den Temporär-Ordner von mmsynchro zu verwenden, um ein Problem mit Filesystem Rechten zu vermeiden.

Konfigurations-Name: rudisflugis72

Pfad des Log-Ordners: /var/lib/typo3-dummy/typo3temp/mmsynchro/

Pfad zum externen Ordner: /var/lib/typo3-dummy/

MySQL-Server für externen Zugriff konfigurieren.
Auf dem Ziel Server muss MySQL der Benutzer der Quellen Datenbank bekannt gemacht werden. Dazu gibt es eine gute Anleitung, mit Hilfe von PHPmyAdmin: http://wiki.uniformserver.com/index.php/MySQL_phpMyAdmin#Setting_up_a_new_user_-_with_global_privileges

attachment:PHPmyAdmin_user.png

1. Externen Zugriff freigeben.
Im File /etc/mysql/my.cnf "bind-address" auskommentieren:
  #bind_address = 127.0.0.1 

2. Externen Admin-Benutzer "root" freigeben, auf dem MySQL-Server, mit PHPMyAdmin.
http://192.168.17.72/phpmyadmin
  Datenbank: mysql
  Tabelle:   user
  Passwort:  passwort
  Freigaben: Alle

MySQL daemon neu starten:
$ sudo service mysql restart  # Ubuntu 10.10
oder
$ sudo /etc/init.d/mysql restart

prüfen vom MySQL-Client aus:
$ mysql -u root -p<passwort> -D rudisflugis -h 192.168.17.72
# ACHTUNG: bei der -p Option darf zum Passwort KEIN Zwischenraum sein.

$ mysql -u root -D rudisflugis -h 192.168.17.72

3. Prüfen, ob der MySQL TCP/IP Port 3306 offen ist:
$ nmap 192.168.17.148
...
3306/tcp open  mysql

Database - Hier werden die grundsätzlichen Daten zur lokalen Datenbank eingetragen. Bei dem Benutzername sollte der Admin Benutzer eingetragen werden. Damit die Verbindung zu einer "remote" Datenbank auf einem anderen Rechner funktionieren kann, im Server die MySQL Konfiguration angepasst werden.

Datenbank synchronisieren? - Haken setzen

Datenbank-Benutzername: root

Datenbank-Passwort: <passwort> # oder leer mit "Schlüsselbund" Verwendung

Datenbank-Host: 192.168.17.72

Datenbankname: rudisflugis

Remote - Hier werden Verbindungsdaten zu dem SSH2 Host Rechner eingetragen. In diesem Beispiel werden die Verbindungsdaten im lokalen Netzwerk zu einem Testrechner aufgeführt.

Benötigt SSH - Haken setzen

SSH Username: rudi

SSH Passwort: <passwort>

SSH Host: 192.168.17.72

SSH Port: 22

Tabellen (tables)

Man kann einzelne Felder mit Haken versehen, oder an Alles auswählen ein Haken setzen. Damit die Auswahl gespeichert wird, muss man oben auf den Knopf Auswählen klicken.

Dateien (files)

Bei Dateien werden die Ordner fileadmin, uploads und typo3conf in Baumstruktur erfasst. Mit einem Klick auf die einzelnen Elemente wählt man aus, was man synchronisiert haben möchte. Zum speichern der Auswahl klickt man den Knopf Auswählen.

Seitenbaum (pagetree)

Bei Seitenbaum werden die Web Seiten mit dem Text und Strukturinhalt in Baumstruktur erfasst. Mit einem Klick auf die einzelnen Elemente wählt man aus, was man synchronisiert haben möchte. Zum speichern der Auswahl klickt man den Knopf Auswählen.

Synchronisation

Ablauf allgemein

Die 3 Strukturen Tabellen, Dateien und Seitenbaum kann man einzeln anklicken, und dann mit Klick auf den Knopf Auswählen den Synchronisation-Vorgang starten.
Wenn man den Seitebaum (pagetree) synchronisiert, wird temporär ein .t3d File erzeugt:

/var/lib/typo3-dummy/typo3temp/mmsynchro/<linux_time>.t3d

Beispiel: 1298708441.t3d

Die 3 Strukturen werden durch einzelne Funktionen abgearbeitet:

in file: /var/lib/typo3-dummy/typo3conf/ext/mmsynchro/lib/class.tx_mmsynchro_synchro.php

Tabellen (Z.651): $this->synchroDB($tables);
// Daten aus der DB auslesen bevor DB switch
// Nur SQL result speichern. Sonst zu grosser Speicher Bedarf
// Tabellen loeschen
// Ueberpruefung der Datenbank und eventuelle Anpassungen
// Wenn Tabellen zum Sync vorhanden sind
  // Alle Daten in die DB schreiben
// Datenbank zurueck setzen

Dateien (Z.780): $this->synchroFiles($files);
// Überprüfung ob Dateien zum Sync vorhanden sind
// Ordner anlegen
  // Überprüfen ob Remote
  // sonst lokal
// Copy Data

Seitenbaum (Z.329): $this->synchroPage($pages);
// Daten aus der DB auslesen bevor DB switch
// Wenn pages zum Sync vorhanden sind
// export T3d
// import T3d
  danach wird der Cache geleert:
    $GLOBALS['TYPO3_DB']->exec_DELETEquery('cache_pages','');
    $GLOBALS['TYPO3_DB']->exec_DELETEquery('cache_pagesection','');
    $GLOBALS['TYPO3_DB']->exec_DELETEquery('cache_hash','');

// sync upload folder

Ablauf Beispiel Seitenbaum

Auf der Webseite http://www.rudiswiki.de/flugis/neuigkeiten.html haben sich Änderungen ergeben.
Die Page ID der Web-Seite ist auf beiden Seiten pid=147.

Log file Erklärung

Der Log-file Name beinhaltet auch Parameter:

Beispiel: mmsynchro_log_rudisflugis72_1298708441.txt

rudisflugis72  # Profil (title) name

1298708441     # Linux time()

Log-file Details:

connect to 192.168.17.72
Sync Tables to rudisflugis DB
                Drop table "be_groups"
...
        Database operations
                CREATE TABLE be_groups 
...
        Data operations
                INSERT INTO be_groups all Data
...
-----------------------------------------
Synchro Data to /var/lib/typo3-dummy/
        Make new Directories :
                directory exists: /var/lib/typo3-dummy/fileadmin/
...
        Copy :
                copy /var/lib/typo3-dummy/fileadmin//css/rudisflugis-sitemap.css

-----------------------------------------
Sync Pages to rudisflugis DB
        Export
                start export
                        add pages:147  to t3d
                        add tt_content:84  to t3d
                        add tt_content:848  to t3d
...
                        add pages:211  to t3d
                        add tt_content:358  to t3d
                        add tt_content:359  to t3d
                        add sys_template:114  to t3d
                        writing temporary t3d
                stop export
        Import t3d
                start import
                end import
Synchro Data to /var/lib/typo3-dummy/
        Make new Directories :
                directory exists: /var/lib/typo3-dummy/uploads
...
        Copy :
disconnected

-----------------------------------------
Time: 65926 ms

Fehler werden im Log-file folgendermaßen dargestellt:

von file: /var/lib/typo3-dummy/typo3conf/ext/mmsynchro/lib/class.tx_mmsynchro_synchro.php
ab Zeile 137
$this->log .= "\n".'######## ERROR BEGINN ########'."\n";
$this->log .= $error[$fehlercode].': '.$fehlertext."\n";
$this->log .= "\t".$fehlerdatei.': '.$fehlerzeile;
$this->log .= "\n".'######## ERROR END ########'."\n";

Beispiel:
######## ERROR BEGINN ########
PHP Warning: file_get_contents(http://www.rudiswiki.de/flugis/index.php?eID=pagepath&amp;data=YToxOntzOjI6ImlkIjtpOjE0NTt9) [<a href='function.file-get-contents'>function.file-get-contents</a>]: failed to open stream: HTTP request failed! HTTP/1.0 403 Access denied

        /usr/share/typo3/typo3_src-4.3.3/t3lib/class.t3lib_div.php: 2873
######## ERROR END ########

Fehlersuche

Wenn man ein MySQL Passwort im Schlüsselbund hinterlegt hat, und man es bei einem connect trotzden angibt erscheint folgende Fehlermeldung:

ERROR 1045 (28000): Access denied for user 'root'@'rudiswiki.fritz.box' (using password: YES)
dann muss man nur bei dem "connect" den Passwort Parameter weglassen.

Leider funktioniert die Synchronisation nur vom Server B zu A aus. Bei der Synchronisation von Server A aus zu B gibt es bei der Struktur Seitenbaum mehrere Fehlermeldung, wie oben gezeigt mit der Funktion file_get_contents(). Es handelt sich um die Web-Seite Neues (neuigkeiten.html).
Im Log-file kann man sehen, dass die pid 147 für den update vorbereitet wird, aber bei dem import gibt es Fehler. Die Ursache war, dass dem MySQL Benutzer auf dem Ziel-Server die Freigaben (Rechte) gefehlt haben. Siehe Punkt externer Zugriff auf MySQL.

-----------------------------------------
Sync Pages to rudisflugis DB
        Export
                start export
                        add pages:145  to t3d        # rudisflugis root
                        add tt_content:23  to t3d
                        add tt_content:25  to t3d
                        add tt_content:24  to t3d
                        add sys_domain:5  to t3d
                        add sys_template:32  to t3d
                        add pages:147  to t3d        # Neues (neuigkeiten.html)
...
                stop export
        Import t3d
                start import

Fehler: failed to open stream: HTTP request failed! HTTP/1.0 403 Access denied
file_get_contents(http://www.rudiswiki.de/flugis/index.php?eID=pagepath&amp;data=YToxOntzOjI6ImlkIjtpOjE0NTt9)
/usr/share/typo3/typo3_src-4.3.3/t3lib/class.t3lib_div.php: 2873
http://php.net/manual/de/function.file-get-contents.php

Das prüfen der records geht über (Z. 431): ($import->doesRecordExist($test[0],$test[1],'')){
  von /usr/share/typo3/typo3_src-4.3.3/typo3/sysext/impexp/class.tx_impexp.php
  function doesRecordExist($table,$uid,$fields='')  # Zeile 3140
      return t3lib_BEfunc::getRecord($table, $uid, $fields ? $fields : 'uid,pid');
      /usr/share/typo3/typo3_src-4.3.3/t3lib/class.t3lib_befunc.php
      public static function getRecord()  # Z. 229


Der Import geht über den Befehl (Z. 443): $import->importData('');
  $import = t3lib_div::makeInstance('tx_impexp');  # Zeile 406
  von /usr/share/typo3/typo3_src-4.3.3/typo3/sysext/impexp/class.tx_impexp.php
  function importData() Z. 1161

Liste der Seiten in dieser Category:

-- RudolfReuter 2011-02-26 18:54:32


Go back to CategoryTypo3 or StartSeite ; KontaktEmail (ContactEmail)

Typo3Synchronisation (last edited 2011-03-23 09:04:08 by dslb-084-058-142-238)