Duplicación automatizada de tablas mysql entre servidores, a través de SQL

El problema: necesito hacer una copia de seguridad de algunas bases de datos de servidores (a veces una sola tabla, otras veces todas las tablas en la base de datos) y también, en un caso, replicar una base de datos todas las noches.

Así que esto es copia de base de datos a base de datos. Puede decir, use la replicación mysql, sin embargo, estoy tratando de lograr esto sin usar la replicación mysql, ya que no siempre tengo acceso para configurar esto en servidores alojados de forma remota.

Para aclarar, estos son servidores en diferentes ubicaciones y no en la misma ubicación. Conozco muchas soluciones cuando las tablas existen en bases de datos en el mismo servidor, pero las opciones parecen mucho más limitadas cuando este no es el escenario.

Necesito que esto se ejecute en un horario que pueda configurar, digamos una vez al día de manera totalmente automática, copiando y sobrescribiendo las tablas de destino con los datos de la fuente.

A través de la investigación que he realizado, estoy al tanto de un producto comercial de Windows que puede hacer esto (SQLyog), pero quería ver si alguien conoce alternativas y tal vez tanto para Linux como para Windows.

¿Qué interfaz tiene para acceder a sus servidores de base de datos remotos? ¿Tiene root remoto? ¿O solo la interfaz SQL? (lo que significa que la herramienta copiaría los datos consultando todo)
Hola, es el último escenario sin la raíz del servidor remoto

Respuestas (1)

1) Cree este backupdb.shscript que copia una base de datos MySQL remota en su base de datos local:

#!/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

( escrito por jozjan y modificado )

2) Escriba un script backupalldbs.shpara llamarlo para cada base de datos que desee respaldar, ejemplo:

#!/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) Finalmente llame a ese script con el cronprogramador de Linux.

Escrito para Linux, pero ejecutarlo en Windows no debería ser demasiado difícil después de instalar bash para Windows.

Hola Nicolás, esto se acerca mucho a lo que quiero, pero este script parece ser para bases de datos en el mismo servidor.
¡Ay, tienes razón! Necesitará un poco de edición.
@AdamJones: Debería arreglarse ahora :-) (aunque no probado)