Sólo un idiota puede ser totalmente feliz.
Mario Vargas Llosa
En los foros
Comentarios recientes
- Gracias no trabajo mucho con
51 semanas 4 horas atrás - Muchas gracias, me sirvio de
52 semanas 21 horas atrás - Hola muy bueno el articulo.
1 año 4 semanas atrás - Cuando creias que tenias unos
1 año 4 semanas atrás - Recién escucho de el..espero
1 año 5 semanas atrás - No necesariamente, creo que
1 año 7 semanas atrás - Hola que buena tu cerdito se
1 año 10 semanas atrás - En definitiva, estoy muy de
1 año 16 semanas atrás - Muchas gracias, me has
1 año 16 semanas atrás - saludos compa la idea de
1 año 17 semanas atrás
Si desarrollas aplicaciones web ya debes estar usando algún sistema de control de versiones para mantener tu código sincronizado entre servidores, ¿pero qué sucede con tus bases de datos en MySQL o PostgreSQL?
Claro, es posible replicar, un posible escenario sería un servidor maestro con uno o más servidores esclavos, pero eso puede ser demasiado para simples proyectos o si solo necesitas estar seguro de que tienes los mismos datos en tus servidores de desarrollo, staging y producción luego de cambios importantes en el código, como por ejemplo, antes de lanzar una nueva versión.
Afortunadamente bastan unos pocos y sencillos comandos para mantener tus bases de datos sincronizadas. Sí, nuevamente la consola al rescate.
El ciclo dump, drop, create
Al igual que la mayoría de desarrolladores creo mis aplicaciones en un servidor de desarrollo. Allí ingreso datos y parámetros de configuración para ser almacenados en una base de datos. Luego, al llegar el momento de enviar mi código al sistema de control de versiones, uso Bazaar por estos días, tengo tres opciones para sincronizar la base de datos con staging y producción:
- Ingresar todos los datos nuevos manualmente, tedioso y proclive al error.
- Duplicar toda la base de datos —la opción que usaremos.
- Duplicar solo las tablas que han cambiado, una sencilla variación a la opción anterior.
Me concentraré en la duplicación de toda la base de datos por ahora pues adaptar para trabajar por tablas es muy sencillo.
Para que este método funcione es necesario que la base de datos tenga el mismo nombre y credenciales de acceso en ambos servidores. En mis ejemplos consideraré un usuario alexis que es propietario de una base de datos llamada cataybea.
Imaginemos que tenemos la base de datos con la información más reciente en un servidor que llamaremos el origen y queremos transferir a otro servidor que llamaremos el destino. El servidor de origen puede ser el de producción cuando queremos usar los últimos datos en vivo en staging, que sería el destino, o podemos tener al servidor de desarrollo como origen y a staging como destino, si queremos probar nuevas funciones que involucran modificaciones en la base de datos. Sea cual sea el caso estos son los pasos a seguir:
- Exporta la estructura y datos de la base de datos en el servidor de origen a un archivo, una copia de seguridad también conocida como dump.
- Transfiere el archivo con la copia de seguridad al servidor destino. Yo uso scp pero podrías incluirlo en tu sistema de control de versiones.
- Borra la base de datos en el servidor destino, como precaución realiza una copia de seguridad, otro dump, antes de hacerlo.
- Crea una nueva base de datos, con el mismo nombre de la original, en el servidor destino y usa la copia de seguridad del servidor de origen para recrear la estructura y los datos.
Si prefieres puede escribir un script para automatizar el proceso. Veamos ahora los comandos para la consola, empezamos con PostgreSQL.
Sincroniza tu base de datos con PostgreSQL
El usuario administrativo para PostgreSQL suele llamarse postgres. Si aún no lo haces utiliza este usuario para, vía sudo, crear el propietario de la base de datos que quieres sincronizar, el usuario alexis:
sudo -u postgres createuser -P alexis
Ahora crea la base de datos, recuerda que llamo a la mía cataybea:
sudo -u postgres createdb cataybea -O alexis
Cuando tengas todos los datos en el servidor de origen crea el archivo con la copia de seguridad usando:
pg_dump -f cataybea.sql cataybea
El archivo cataybea.sql contiene todo el SQL necesario para recrear la base de datos. Transfiere este archivo al servidor de destino, crea una copia de seguridad de la base de datos existente allí y luego borra la base de datos en el servidor de destino:
dropdb cataybea
Ahora crea otra base de datos con el mismo nombre, los permisos ya están definidos, y usa el archivo con la copia de seguridad del servidor de origen para recrear la estructura y datos:
sudo -u postgres createdb cataybea -O alexis
psql -U alexis -d cataybea -f cataybea.sql
Finalmente confirma que tienes los datos correctos ejecutando algunas consultas:
psql -d cataybea
Sincroniza tu base de datos con MySQL
El usuario administrativo para MySQL suele llamarse root. Si aún no lo haces crea la base de datos en todos tus servidores y asigna un usuario como propietario. Recuerda que en mi ejemplo la base de datos es cataybea y el propietario alexis:
mysqladmin -u root -p create cataybea
Los permisos se configuran a través del cliente de MySQL:
mysql -u root -p
mysql> GRANT ALL PRIVILEGES ON cataybea.* TO 'alexis'@'%' IDENTIFIED BY 'secret';
Cuando tengas los datos listos en el servidor de origen crea el archivo con la copia de seguridad:
mysqldump -u alexis -p cataybea > cataybea.sql
cataybea.sql contiene todo el SQL necesario para recrear la estructura y datos en la base de datos. Transfiere este archivo al servidor de destino, crea una copia de seguridad de la base de datos allí y luego borra la base de datos en el servidor de destino:
mysqladmin -u root -p drop cataybea
Crea ahora una base de datos con el mismo nombre en el servidor de destino, los permisos ya están definidos, e importa la copia de seguridad que transferiste desde el servidor de origen:
mysqladmin -u root -p create cataybea
mysql -u alexis -p cataybea < cataybea.sql
Prueba algunas consultas para confirmar que todo está en orden:
mysql -u alexis -p cataybea
Más ayuda en camino
Puedes sincronizar todas tus bases de datos en PostgreSQL y MySQL con solo seguir los pasos que he presentado. Si deseas más detalles puedes usar el parámetro --help en todos los comandos mencionados, por ejemplo:
psql --help
mysql --help
createdb --help
mysqladmin --help
Y eso es todo, a divertirse sincronizando bases de datos.
Te recomiendo visitar
- Maestros del Web
- Dupermag
- Nudonation
- Alojamiento web Servicios de alojamiento web y registro de dominios para pymes y particulares.

Participa en la discusión
Esto funcionaria para hacer
Esto funcionaria para hacer una copia exacta de una bded.
Pero si lo que se necesita es sincronizar...
O sea tengo 5 base de datos y necesito que en todas quede la misma información, esto sucede porque en mi empresa están trabajando de manera desconectada y necesito siempre tener la información en una sola base de datos.
Gracias.
saludos compa la idea de
saludos compa la idea de sincronizar las bases de datos deberia ser que se hiciera en automatico como un trigger por ejemplo al afectar una base de datps en automatico afecta la del otro servidor lo que entiendo que describes es "sincronizar" manualmente ya que respaldas la base de datos, la envias al otro server i la creas de nuevo en ese server.
existe una solucion de sincronizacion de mysql sin tener que respaldar y hacerlo manualmente?. es decir al momento de afectar una base de datos q afecte tambien en el servidor de respaldo me explico. un saludo
Hola muy bueno el articulo.
Hola muy bueno el articulo. El escenario que yo tengo es el siguiente tengo una aplicacion web al cual se accesde a travez de internet pero por algunos problemas con mi proveedor de internet a veces el internet se corta. y lo que necesito es que cuando el internet se corte la aplicacion siga trabajando y guarde la informacin en la base de datos local, cuando el internet este disponible esta informacion se actualize en el servidor remoto.
Cualquier idea, sugerencia o comentario sera bienvenido...
Saludos...