Automatisierte Duplizierung von MySQL-Tabellen zwischen Servern über SQL

Das Problem: Ich muss ein paar Serverdatenbanken sichern (manchmal eine einzelne Tabelle, manchmal alle Tabellen in der Datenbank) und auch einmal eine Datenbank jede Nacht replizieren.

Das ist also das Kopieren von Datenbank zu Datenbank. Sie können sagen, verwenden Sie die MySQL-Replikation, aber ich versuche, dies ohne die Verwendung der MySQL-Replikation zu erreichen, da ich nicht immer Zugriff habe, um dies auf remote gehosteten Servern zu konfigurieren.

Zur Verdeutlichung handelt es sich um Server an verschiedenen Standorten und nicht am selben Standort. Mir sind viele Lösungen bekannt, wenn die Tabellen in Datenbanken auf demselben Server vorhanden sind, aber die Optionen scheinen viel eingeschränkter zu sein, wenn dies nicht das Szenario ist.

Ich benötige dies, um nach einem Zeitplan ausgeführt zu werden, den ich einrichten kann, sagen wir einmal am Tag auf vollständig automatisierte Weise, indem ich die Zieltabellen mit den Daten aus der Quelle kopiere und überschreibe.

Ich bin mir durch meine Recherchen über ein kommerzielles Windows-Produkt bewusst, das dies kann (SQLyog), aber ich wollte sehen, ob jemand Alternativen kennt und vielleicht sowohl für Linux als auch für Windows.

Welche Schnittstelle haben Sie für den Zugriff auf Ihre entfernten Datenbankserver? Hast du Remote-Root? Oder nur die SQL-Schnittstelle? (was bedeutet, dass das Tool die Daten kopieren würde, indem es alles abfragt)
Hallo, es ist das letztere Szenario ohne Remote-Server-Root

Antworten (1)

1) Erstellen Sie dieses backupdb.shSkript, das eine entfernte MySQL-Datenbank in Ihre lokale Datenbank kopiert:

#!/bin/bash

DBUSER=$1
DBPASSWORD=$2
DBSNAME=$3
DBNAME=$4
DBSERVER=$5
LOCALDBUSER=$6
LOCALDBPASSWORD=$7
LOCALDBSERVER=$8

fCreateTable=""
fInsertData=""
echo "Copying database ... (may take a while ...)"

DBCONN="-h ${DBSERVER} -u ${DBUSER} --password=${DBPASSWORD}"
LOCALDBCONN="-h ${LOCALDBSERVER} -u ${LOCALDBUSER} --password=${LOCALDBPASSWORD}"

echo "DROP DATABASE IF EXISTS ${DBNAME}" | mysql ${LOCALDBCONN}
echo "CREATE DATABASE ${DBNAME}" | mysql ${LOCALDBCONN}
for TABLE in `echo "SHOW TABLES" | mysql $DBCONN $DBSNAME | tail -n +2`; do
        createTable=`echo "SHOW CREATE TABLE ${TABLE}"|mysql -B -r $DBCONN $DBSNAME|tail -n +2|cut -f 2-`
        fCreateTable="${fCreateTable} ; ${createTable}"
        insertData="INSERT INTO ${LOCALDBNAME}.${TABLE} SELECT * FROM ${DBSNAME}.${TABLE}"
        fInsertData="${fInsertData} ; ${insertData}"
done;
echo "$fCreateTable ; $fInsertData" | mysql $LOCALDBCONN $DBNAME

( geschrieben von jozjan und modifiziert )

2) Schreiben Sie ein Skript backupalldbs.sh, um es für jede Datenbank aufzurufen, die Sie sichern möchten, Beispiel:

#!/bin/bash
backupdb.sh adam iwg74e9R thedb thedb server.example.com localuser localpassword localserver
backupdb.sh nico of2D9872 adb adb server.example.org localuser localpassword localserver
...

3) Rufen Sie dieses Skript schließlich mit dem Linux- cronScheduler auf.

Geschrieben für Linux, aber es sollte nicht allzu schwierig sein, es unter Windows auszuführen, nachdem Sie bash für Windows installiert haben.

Hallo Nicolas, das ist sehr nah an dem, was ich will, aber dieses Skript scheint für Datenbanken auf demselben Server zu sein.
Ach, du hast recht! Es muss ein wenig bearbeitet werden.
@AdamJones: Sollte jetzt behoben sein :-) (allerdings nicht getestet)