Rsync y Parallel, copias de archivos realmente intensas

El otro día pasó a mejor vida un disco duro externo en el que generalmente hago mis respaldos automáticos. Mientras que consigo otro decidí hacer las copias en una carpeta privada en la computadora que funciona como NAS.

rsync parallel
Divide y vencerás.

La cantidad de datos es importante, estoy hablando de unos cientos de gigabytes y la primer copia puede durar varias horas.

Rsync y Parallel

Buscando en internet me topé con este script llamado rsync_parallel que me resultó muy interesante.

Divide y vencerás

Tiene un enfoque muy interesante, primero obtiene una lista completa de los archivos que se van a copiar y luego divide esa lista en varios archivos de una forma equilibrada.

El total de archivos corresponde al número de procesos concurrentes que queremos trabajar, por default es 10 pero se puede cambiar con un parámetro.

Una vez que tenemos nuestras listas el programa parallel inicia la copia de los archivos con rsync y le entrega una lista de los archivos a cada proceso que se ejecuta simultaneamente.

El problema es el ancho de banda.

Gráfica del tráfico por hora

El problema es que ahora tengo 10 procesos peleándose el ancho de banda, que lamentablemente es poco en mi caso. Supongo que una copia con una buena velocidad o de un disco duro a otro la copia de archivos volaría.

También pueden notar que el equipo se puede comportar un poco lento, eso depende de los recursos de su computadora. Eso se debe al uso intensivo del disco duro durante la copia de los archivos.

El uso de parallel es interesante, actualmente estoy jugando con el número de procesos a ejecutar. Si utilizo pocos, más o menos sería lo mismo que ejecutar un rsync simple. Si uso muchos, los pedazos serán más pequeños, pero el uso del disco será mayor.

copiando ando | rsync parallel
Copiando ando …

Les paso el dato por si algún día se les ofrece hacer una copia masiva de archivos.

Enlaces

Script para respaldar bases de datos MySQL versión 2

servidor de base de datos

Hace tiempo hice un script para respaldar bases de datos MySQL, pero dejó de funcionar. Esta nueva versión arregla los problemas del anterior aunque en esencia hace las mismas funciones.

El script

El script anterior dejó de funcionar porque en una actualización del paquete mysql-clients no permitía la comprobación, reparación y optimización de las bases de datos en una sola línea. Así que para evitar este problema tuve que separar estas tareas.

Con este código primero revisamos y reparamos cualquier error que pudieran tener todas las tablas de nuestro servidor de trabajo

mysqlcheck -c -A --auto-repair -h $IP_SERVIDOR_MYSQL -u $USUARIO --password=$DB_PASS

Para luego optimizar las tablas

mysqlcheck -A -o -h $IP_SERVIDOR_MYSQL -u $USUARIO --password=$DB_PASS

Claro que ahora el script se tarda un poco más en ejecutar, pero yo no hice las reglas 🙂 .

Adicionalmente, le hice algunos ajustes para que el nombre de los archivos de volcado incluyera información como la fecha, hora, minutos y segundos.

Si quieren darle un vistazo al código completo verán que es muy simple de ajustar y lo pueden descargar aquí: MySQL Backup Script

Sólo tienen que teclear los valores adecuados para los parámetros WORK_DIR, IP_DEL_SERVIDOR_MYSQL, USUARIO CONTRASEÑA.

Y por su puesto, darle permisos de ejecución al script, Ej.

chmod +x mysql_backup.sh

Si tienen cualquier comentario al respecto se los agradeceré. Espero que les sea de utilidad.

Script para respaldar todas las bases de datos de un servidor MySQL

Hoy en la mañana estaba leyendo este artículo llamado Script para backups automáticos de tu servidor lo vi y me pareció una buena idea hacer uno propio para respaldar todas las bases de datos que tengo en mi servidor MySQL.

Tomé prestadas algunas ideas del script que muestran en DesdeLinux.net y otras del sitio Tail -f Backup de todas las bases de datos MySQL en archivos separados.

El script de DesdeLinux es muy completo, hacen un respaldo de varios archivos, un vaciado de las bases de datos que consideran importantes y hasta envía un correo electrónico a los administradores con el resultado del respaldo. En lo personal a mi me gusta copiar archivos utilizando el comando rsync, pero esa es otra historia.

Al principio intenté hacer un mysqldump de todas las bases de datos en un solo archivo, pero el resultado fue un mega archivo de 27 MB que era muy difícil de abrir para gedit (o cualquier otro editor de texto). Si solo necesito restaurar una base de datos en lugar de todas la tarea se puede complicar un poco.

Por eso que decidí generar un solo archivo para cada base de datos del servidor MySQL. Ahí es donde entra en acción el script de Tail que explica muy bien como generar un archivo independiente por cada base de datos.

El resultado es un archivo por cada base de datos que incluye en el nombre del archivo la fecha en la que fue realizado el respaldo.

El script esta diseñado para ejecutarse en un equipo diferente al que ejecuta el servidor de base de datos, aunque supongo que si le ponen localhost en la variable IP_SERVIDOR_MYSQL también puede funcionar.

Como un plus, el script realiza una optimización y reparación de todas las bases de datos del servidor antes de hacer el vaciado de las bases de datos.

Ajustando los parámetros

Para utilizarlo es necesario descargar el archivo, abrirlo y modificar los parámetros

  • WORK_DIR Es la ruta donde quieres que se guarden los archivos.
  • IP_SERVIDOR_MYSQL Es la dirección ip del servidor, también podría funcionar un nombre de dominio o si el servidor es la misma maquina en la que se ejecuta el script localhost sería lo correcto.
  • USUARIO Un usuario con los permisos de acceso necesarios, root funciona la mayoría de las veces.
  • DB_PASS La contraseña del usuario 🙂

Para ejecutar el script es necesario darle permisos de ejecución con:

chmod +x respaldo_mysql.sh

Y suerte !!!

El script funciona muy bien en mi equipo y espero que en el de ustedes también. Si tienen alguna duda favor de poner un comentario.

Descargar respaldo_mysql.sh

Actualización. Este script dejó de funcionar por un error al intentar ejecutar varias tareas de manera simultánea, pueden ver la versión más reciente en: Script para respaldar bases de datos MySQL versión 2.