Archivo de la etiqueta: subversion

Copias de seguridad de bases de datos

A través de Pensamientos Ágiles llego a un artículo donde explican una interesante manera de hacer backups de bases de datos Mysql utilizando subversion. La idea es excelente, pero me plantea una serie de dudas si se trata de bases de datos de gran tamaño. Creo que es genial para mantener la estructura de la base de datos de un proyecto y tener controlados los cambios que se realizan sobre ella, pero mantener también los datos… no acabo de verlo.

En uno de mis proyectos tengo una base cuyo dump ocupa alrededor de 1Gb. Yo, sinceramente, no veo coherente mantener semejante archivo en svn. La idea es excelente y para bases de datos «pequeñas» creo que sí es útil, habría que decidir, en todo caso, qué entendemos por «pequeñas«. Pero insisto, no lo veo para archivos grandes, y 1Gb, tengamos el criterio de grande/pequeño que tengamos, es un archivo grande.

Normalmente lo que hago para hacer los backups es sacar un dump de cada base de datos, de manera que pueda recuperar cualquiera de ellas, y comprimir el resultado con bzip2. ¿Por qué bzip2 y no gzip? Simplemente por el nivel de compresión. En su día hicimos pruebas con ámbos sistemas y bzip2 salía mejor parado. Éstos son los resultados que obtendríamos hoy en día con la compresión estándar de ámbos sistemas:

-rw-r--r--   1 osus   users  1023246033 Feb  2 01:50 bbdd.sql
-rw-r--r--   1 osus   users   141481434 Feb  2 01:50 bbdd.sql.bz2
-rw-r--r--   1 osus   users   190733372 Feb  2 01:50 bbdd.sql.gz

Con bzip2 el backup pesa unos 50mb menos.

El script que utilizo para hacer backups de base de datos es más o menos lo que suele hacer la mayoría de la gente:

#!/bin/sh
dia=`date +%w`
for i in ` /usr/bin/mysql -N --execute='show databases;' `
do
echo "Haciendo backup de $i"
/usr/bin/mysqldump -C --opt $i > /backup/bbdd/$dia/$i.sql
bzip2 -fz /backup/bbdd/$dia/$i.sql
done

En otras palabras, mantengo las copias completas de los últimos siete días, semanalmente se se reemplazan por las del día en que nos encontramos. En la carpeta del día correspondiente genero los dumps comprimidos de todas las bases de datos.

El último paso es copiar los dumps del día a otra máquina. La tarea que se ejecuta diariamente lanza el proceso una vez termina de crear los backups. Esto lo hacemos a dos máquinas distintas. La primera es una máquina externa y se envían por ssh desatendido, utilizando claves públicas, de manera que la máquina remota no solicita la clave del usuario. La segunda es una máquina de nuestra oficina con la que tenemos una vpn que se levanta antes del backup, se copia con ssh destendido también y se cierra al terminar. En ésta máquina de la oficina hay otra tarea que diariamente restaura el backup de ciertas bases de datos en su Mysql local matando así dos pájaros de un tiro: por un lado tenemos la base de datos de desarrollo casi idéntica a la de producción, faltarían sólamente los últimos datos del día, y por otro lado nos aseguramosn de que los backups que se realizan son correctos ya que en caso contrario fallaría la restauración.

Hasta ahora nos ha funcionado bien el sistema. En alguna ocasión hemos tenido que recuperar alguna tabla de ciertas bases de datos y no hemos tenido excesivos problemas, todo ha funcionado a la perfección.

Vuelvo a repetir que esto no es una crítica al sistema del subversion, todo lo contrario, la idea me parece cojonuda, pero creo que habría que puntualizar o estudiar bien la viavilidad en ciertos escenarios.

Subversion, ese gran desconocido

Equipos de varias personas, proyectos sin fecha de finalización, corrección de bugs, nuevas funcionalidades… ¿cómo gestionáis todos esos cambios?

Me resulta difícil de creer, por no decir incomprensible, que, en la época en que vivimos, la inmensa mayoría de empresas de desarrollo de software no utilicen un mínimo sistema de control de versiones (CVS, Subversion, Sourcesafe…). Y no hablamos sólo de pymes, hablamos también de grandes consultoras con grandes proyectos de las administraciones públicas. Y es que no hay mejor cara que aquella que se te queda cuando haces update y te contesta file merged. O mejor aún, cuando has metido la pata hasta el fondo y recurres al superhéroe de la película, a revert.

Algunos pensarán, cuando hablamos de desarrollo de software, que hablamos de grandes aplicaciones o proyectos, pero están equivocados, hablamos de cualquier cosa que se programe, incluida una web.

Subversion es lo que se conoce como un sistema de control de versiones (del inglés Control Version System). Control de versiones es la gestión de los cambios y modificaciones en el código fuente de un proyecto, es decir, cada cambio que se hace en el código queda registrado de manera que en cualquier momento se puede saber quién hizo qué. Pero eso no es todo. ¿Qué ocurre cuando dos o más programadores trabajan sobre la misma aplicación y sobre los mismos ficheros de código? En un escenario normal no podrían. Uno tendría que esperar a que terminase otro para obtener la última versión, hacer sus modificaciones y pasárselo al siguiente. Obviamente eso no es ni óptimo ni deseable, tendríamos programadores esperando para poder trabajar. Subversion soluciona esto permitiendo que varios programadores trabajen sobre el mismo proyecto simultáneamente. Llegado el momento de unir todas las piezas, él lo hace por ti, es lo que se conoce como merge.

¿Qué ocurre cuando el cliente solicita cambios en tu proyecto y, cuando lo tienes terminado, da marcha atrás y prefiere que todo vuelva a estar como antes? Como no has hecho copia de seguridad del código en el estado anterior tendrías que volver a rehacer tu código para quitar lo nuevo y ajustar lo anterior. Con Subversion es tan sencillo como recuperar la versión anterior.

Lo más sorprendente es buscar gente para tu equipo de desarrollo y encontrarte con que a ninguno les suena ni CVS, ni Subversion ni nada similar. ¿Tan poco profesionalizado está el sector? Dá igual los estudios, nadie sabe lo que es y siempre les cuesta adoptar el cambio de filosofía ftp/Subversion.

Lo mejor de todo es que hoy en día no tienes que saber ningún comando manual, está todo automatizado. Eclipse tiene integración plena con Subversion, de manera que hacer commit, update o cualquier otra cosa son unos simples clicks de ratón. Pero eso no es todo, con TortoiseSVN tendremos integración plena con el explorador de archivos de Windows. De un vistazo podrás ver qué archivos has modificado, cuales están sincronizados, etc…

¿Aún no ves las ventajas?