Respaldando la base de datos de configuración de Elastix/FreePBX por SSH

27 Jun

Una gran ventaja que tenemos en Linux es la facilidad de crear procesos automatizados que nos ayuden a ejecutar tareas cotidianas. Para nuestros usos comunes como administrador de equipos basados en Asterisk/Elastix/FreePBX, puede ser una labor cotidiana respaldar la configuración alojada en bases de datos de MySQL.

SSH nos permite ejecutar comandos en servidores Linux remotos y traernos el resultado al mismo tiempo, por lo que resulta ideal para realizar un respaldo en un equpo distante y almacenarlo en nuestro equipo Linux loca. El comando para hacerlo sería el siguiente (asumiendo que usamos la contraseña default de MySQL en nuestro equipo remoto):

[codesyntax lang=”bash”]

ssh 192.168.1.100 "mysqldump -peLaStIx.2oo7 --databases asterisk | gzip -9" > respaldo.sql.gz

[/codesyntax]

El comando de arriba se encargará de hacer un dump de la BD asterisk. Si quisiéramos traernos también el CDR, hariamos lo siguiente:

[codesyntax lang=”bash”]

ssh 192.168.1.100 "mysqldump -peLaStIx.2oo7 --databases asterisk cdr | gzip -9" > respaldo.sql.gz

[/codesyntax]

O si quisiéramos traernos TODAS las bases de datos:

[codesyntax lang=”bash”]

ssh 192.168.1.100 "mysqldump -peLaStIx.2oo7 --all-databases | gzip -9" > respaldo.sql.gz

[/codesyntax]

Hay que tomar en cuenta que estamos asumiendo lo siguiente:

  • La IP de nuestro servidor remoto es 192.168.1.100. Hay que reemplazar esta por la IP real de nuestro equipo del que queramos copiar el respaldo
  • El password default del usuario root del MySQL remoto es eLaStIx.2oo7. Nuevamente, hay que reemplazar este por el correspondiente al servidor

Adaptando este comando podemos prácticamente hacer cualquier tipo de respaldo remoto. Si agregamos la conexión mediante llaves públicas y privadas, podemos dejar estas actividades programadas en el cron para no tener que estar proporcionando la contraseña de SSH cada vez que nos conectamos.

¡Suerte!

Christian Cabrera

Soy un ingenieron en comunicaciones con especial interés en el área de voz sobre IP y tecnologías sobre información. He usado Asterisk de manera diaria desde hace más de 12 años.En el 2011 co-fundé Enlaza Comunicaciones, una empresa que se especializa en brindar servicios profesionales de consultoría sobre voz sobre IP basadas en Asterisk.

  • someone

    muy buen comentario,pero se puede mejorar, puesto q si tenemos muchas llamadas, podriamos estar haciendo respaldos diferenciados lo cual es mejor

    • Tienes razón. Nunca lo he implementado pero según la teoría me dice deberiamos respaldar el Binary Log para poder guardar los cambios y de acuerdo con lo leido, no se puede especificar un log diferente para cada base de datos, por lo que no podría respaldar solamente la información que nos interesara de manera incremental, sino que respaldariamos todos los movimientos de todas las tablas, lo cual se escapa del interés de respaldar solo Asterisk.

      También pude ocupar rsync para copiar las tablas completas (y así solo se transmitiría la diferencia, haciéndolo más rápido), pero quise evitar la particularidad de que algunos datos que estén en memoria no se verían escritos y podría haber errores con la lectura del archivo de la tabla al momento de escribirla sin detener el servicio de MySQL.

      Esto que propuse lo originé como algo sencillo y que se pudiera aplicar
      en un solo comando. Definitivo: no es la única manera de hacerlo, pero
      creo que es la más simple de todas.

      Saludos,

      • José Enrique

        Hola Cristian, soy novato en esto y ejecute el comando de respaldar mysql y no se en que parte de mi disco duro (ejecute con el programa putty) se guardo la informacion de backup?

        • Se guardó en la carpeta desde donde estabas parado al ejecutar el comando. Una manera de encontrarlo sería ejecutando “find / respaldo.sql.gz”

          Saludos,

    • Tienes razón. Nunca lo he implementado pero según la teoría me dice deberiamos respaldar el Binary Log para poder guardar los cambios y de acuerdo con lo leido, no se puede especificar un log diferente para cada base de datos, por lo que no podría respaldar solamente la información que nos interesara de manera incremental, sino que respaldariamos todos los movimientos de todas las tablas, lo cual se escapa del interés de respaldar solo Asterisk.

      También pude ocupar rsync para copiar las tablas completas (y así solo se transmitiría la diferencia, haciéndolo más rápido), pero quise evitar la particularidad de que algunos datos que estén en memoria no se verían escritos y podría haber errores con la lectura del archivo de la tabla al momento de escribirla sin detener el servicio de MySQL.

      Esto que propuse lo originé como algo sencillo y que se pudiera aplicar
      en un solo comando. Definitivo: no es la única manera de hacerlo, pero
      creo que es la más simple de todas.

      Saludos,

  • Augusto Sepulveda

    con esta solucion mas el uso de ppssh y ppscp y keys podemos hacer scipts de respaldo muy interesantes y automatizados, ejecutados en varios servidores de forma simultánea

    • en efecto, es lo que actualmente ofrezco a mis clientes cuando les ofrezco servicio de respaldo de configuración

      en ocasiones también uso rsync para transferencias de muchos archivos, ya que te permite copiar solo las diferencias, haciéndolo más eficiente