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.
1) Cree este backupdb.sh
script 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.sh
para 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 cron
programador de Linux.
Escrito para Linux, pero ejecutarlo en Windows no debería ser demasiado difícil después de instalar bash para Windows.
Nicolás Raúl
adam jones