Programar backup MySQL en Linux (Incluye Script)

Tener backups actualizados es crucial para un administrador de base de datos por razones más que evidentes y lo más óptimo, sin duda, es automatizar este proceso dado que en un futuro nos evitará bastantes quebraderos de cabeza.

Para ello, os dejo un script que he desarrollado para uno de los servidores que administro, dicho script hace una copia de seguridad completa (mysqldump) de una base de datos, comprime el archivo resultante en formato “.gz”, comprueba si la ejecución del dump se ha realizado correctamente, escribe en un log el resultado de la operación de backup, copia el backup a un segundo disco duro del servidor (es perfectamente modificable para que mediante SSH  se envíe el backup a cualquier máquina que administremos en vez de realizar una copia local) y finalmente borra las copias de seguridad con más de 15 días de antigüedad.

El script es el siguiente, lo he comentado para que modificarlo con vuestros datos sea muy intuitivo:

!/bin/bash
#Script to Backup MySQL Database
#Author: Juan de Yzaguirre - Oct/2014

#MySQL settings
mysql_user=MYSQL_USERNAME
mysql_password=MYSQL_PASSWORD

#Set Database to Backup
database=&MYSQL_DATABASE_TO_BACKUP

#Set Backup Directory
backup_dir=/DIRECTORY_WHERE_THE_BACKUP_WILL_BE_SAVED

#Set logger
logfile=DIRECTORY_WHERE_THE_LOG_WILL_BE_SAVED

#Check MySQL credentials
echo "Checking MySQL connection..."
mysql -u$mysql_user -p$mysql_password -e exit 2>/dev/null
dbstatus=`echo $?`
if [ $dbstatus -ne 0 ]; then
   echo "MySQL $mysql_user password incorrect"
   exit
else
   echo "MySQL $mysql_user password correct"
   echo "Succes! MySQL database connection established"
fi

#Dump and compress database backup
mysqldump -u$mysql_user -p$mysql_password $database | gzip > "$backup_dir"bd_$(date +%d-%m-%Y).sql.gz
backup=`echo $?`
if [ "$backup" -ne 0 ]; then
   echo "[MYSQL ERROR]["$(date +%d-%m-%Y/%T)"] An error has occurred during the backup operation"
   echo "An error has occurred during the backup operation"
   exit
else
   echo "[MYSQL INFO]["$(date +%d-%m-%Y/%T)"] MySQL backup completed successfully" >> $logfile
   echo "MySQL backup completed successfully"
fi

#Copy Database to secondary HDD
scp "$backup_dir"bd_$(date +%d-%m-%Y).sql.gz /dev/backups

#Delete files older than 15 days
find  /DIRECTOY_OF_BACKUP/* -mtime +15 -exec rm {} \;

El script debe ser guardado como “name”.sh. Le damos permisos de ejecución:

chmod 700 /DIRECTORY_OF_SCRIPT/name.sh

Ahora solo queda añadirlo al crontab para que el servidor ejecute automáticamente el backup cuando deseemos. En este caso voy a programar que se ejecute todos los días a las 00:30:

crontab

Reiniciamos cron y ya terndríamos nuestro backup programado 😉

cron restart

A continuación os dejo unas imágenes donde podéis ver los resultados de la ejecución del script.

backup

La salida del log:

backuplog

Y por último el resultado del backup:

backupdone

¡Espero que os sea útil!

@jyzaguirre

Anuncios

Programar backups periódicos en Windows Server

En la siguiente entrada voy a exponer como programar backups de forma periódica de la unidad o unidades de almacenamiento que deseemos en Windows Server. Para ello usaremos la utilidad de línea de comandos “wbadmin” y el programador de tareas que incorpora Windows. El procedimiento es sencillo pero requiere seguir los pasos cuidadosamente.

Para el ejemplo voy a usar un entorno Windows Server 2008 con dos discos duros (C: & K:). Voy a programar un backup del disco duro C: que se guardará en el disco K: y que se ejecutará de Lunes a Viernes a las 01:55 de la madrugada.

En primer lugar, nos dirigimos al programador de tareas de Windows Server y clickamos en “crear tarea” para programar una nueva tarea. En la pestaña “general” debemos cerciorarnos de que la tarea se ejecutará con los privilegios más altos y que se ejecutará tanto si el usuario ha iniciado sesión como si no:

GENERAL

En la pestaña “desencadenadores”  debemos establecer cuando se ejecutará la copia de seguridad, en este caso de Lunes a Viernes a las 01:55 de la madrugada:

desencadenador

resumen desencadenador

En la pestaña “acciones” debemos establecer que acción realizará la tarea que estamos programando, en este caso el backup de la unidad C: que se almacenará en la unidad K: Para ello creamos una nueva acción y establecemos que la acción que debe realizar la tarea es ejecutar un programa. El programa que ejecutará la tarea es wbadmin (windows backup admin), que es la utilidad de línea de comandos que incorpora windows para la gestión de backups, por tanto en la ventana de nueva acción, en  el campo de configuración donde se solicita que se establezca la ruta del programa o script a ejecutar añadiremos lo siguiente:

 %SystemRoot%\system32\wbadmin.exe

Ahora debemos agregar los argumentos que deseemos al programa para que condicionen la ejecución del mismo. Es aquí donde debemos establecer la configuración que consideremos pertinente para el backup. Siguiendo con el ejemplo, estableceré que será un backup de la unidad C: que se almacenará en la unidad K:, para ello establezco el siguiente argumento:

start backup -backuptarget:k: -include:c: -quiet

Donde:

start backup: Da la orden a wbadmin de que comience a realizar una copia de seguridad.

-backuptarget: Establece la unidad donde se almacenará la copia de seguridad.

-include: Establece las unidades que se incluirán en el backup.

-quiet: Establece que durante la realización del backup el promot no muestre mensajes al usuario para que la copia de seguridad se realice de forma desatendida.

Quedando la configuración de la siguiente manera:

accion

Una forma de verificar si hemos establecido la configuración de forma correcta es ejecutando el comando que hemos programado con el programador de tareas directamente en la consola de windows donde podremos comprobar si la copia de seguridad se ejecuta correctamente:

ejemplo backuptarget

Para finalizar debemos rellenar las pestañas “condiciones”  y “configuración” donde podremos establecer condiciones que determinarán si se debe ejecutar la tarea, así como diversas configuraciones adicionales a la misma como pueden ser la detención de la tarea si se ejecuta durante más de un periodo determinado de tiempo o la detención de la misma si el equipo se desconecta de la corriente alterna.

Cuando hayamos terminado de establecer la configuración de la tarea, clickamos sobre el botón de aceptar y ya tendremos nuestro backup programado correctamente.

Para más información sobre la utilidad wbadmin, así como información sobre todos los parámetros  configurables del programa podéis visitar la web de microsoft:

Wbadmin

@Jyzaguirre

Emular unidad de CD/DVD con VirtualBox

En la siguiente entrada voy a exponer como emular la unidad de CD/DVD usando una máquina virtual con VirtualBox. Emular dicha unidad nos será de suma utilidad cuando queramos trabajar por ejemplo con un LiveCD o un CD booteable como Hiren’s Boot. El procedimiento a seguir es el siguiente:

Con la máquina virtual apagada, nos dirigimos a configuración>almacenamiento y clickamos en el icono que simula ser un CD “Añadir dispositivo CD/DVD” tal y como se ve en la siguiente imagen:

añadircd

Nos aparecerá una ventana emergente informando sobre si deseamos añadir un disco virtual o dejar la unidad vacía. Clickamos sobre la opción “seleccionar un disco” y elegimos la imagen (con extensión .iso) que queramos cargar, en este caso para el ejemplo utilizaré la iso de clonezilla.

clonezilla

Aceptamos los cambios e iniciamos la máquina virtual, en el inicio pulsamos F12 y entramos en el menu para seleccionar con que unidad queremos bootear donde seleccionamos “CD-ROM”

boot

VUbuntu_Jyzaguirre

@Jyzaguirre

Mapear unidad de red al iniciar sesión – Active Directory

Es esta entrada voy a explicar como configurar el perfil de un usuario de Active Directory para mapear una determinada unidad de red cada vez que dicho usuario inicie sesión. Esto es sumamente útil cuando los usuarios no permanecen fijos en un puesto de trabajo o rotan de equipos pero precisan de una determinada unidad de red para trabajar, ahorrando así que el administrador de sistemas tenga que estar mapeando las unidades manualmente cada vez que un usuario cambie de equipo. (Se sobrentiende que todos los equipos están dentro del mismo dominio).

Para el ejemplo me voy a servir de un servidor controlador de dominio llamado “Dharma”, y un equipo adherido al dominio que gestiona Dharma llamado Hidra. Voy a mapear una carpeta del disco C:\\ de Dharma llamada jyzaguirre al usuario Jacob.

En primer lugar, nos dirigimos al recurso que vayamos a mapear y lo compartimos, dando los permisos correspondientes al usuario o grupos de usuarios a los cuales pretendemos darles acceso al mismo.

permisos

Una vez establecidos los permisos, nos dirigimos a la consola de administración de usuarios y equipos de Active Directory y desde la pestaña “perfil” del usuario en cuestión procedemos a mapear la unidad de red. Seleccionamos el radio-button “conectar” y escogemos la letra que estimemos para la unidad de red, a continuación, establecemos la ruta del recurso a mapear.

mapeo

Para finalizar verificamos que la unidad se ha mapeado correctamente, para ello iniciamos sesión con el usuario en cualquier equipo dentro del dominio:

verificacion

@Jyzaguirre

Configurar interfaz de red a través del terminal (Linux)

El propósito principal de esta entrada es dar la posibilidad de administrar la red de nuestro sistema Linux (de forma básica) sin tener la necesidad de atender a ninguna interfaz gráfica, simplemente a través del terminal y para ello voy a ir exponiendo los puntos que he considerado más relevantes a la hora de configurar una interfaz de red en linux.

Para realizar los diversos ejemplos me he servido de un usuario con permisos de superusuario logado en un ubuntu 13.10.

Mostrar la configuración actual de la red

ifconfig -a

ifconfig

Conectar o desconectar una interfaz de red

ifconfig [interfaz] up/down

ifconfig etho up-down

(Obviamente en el caso de que estemos administrando el sistema de forma remota, no es nada recomendable usar esta opción sobre la interfaz a través de la cual nos estamos conectando)

Modificar la configuración de la red

nano /etc/network/interfaces

nano networs

La sentencia auto establece que la interfaz se levante automáticamente al iniciar el sistema, la sentencia  dhcp  establece que dicha interfaz de red usará el protocolo DHCP, la sentencia allow-hotplug indica que se inicie la interfaz cuando sea detectada por el kernel y por último la sentencia  static indica que se asignará la configuración de forma estática. Las opciones a configurar son las siguientes:

  • address: Dirección IP de la interfaz.
  • netmask: Máscara de la red.
  • network: Número de la red.
  • broadcast: Dirección de broadcast de la red.
  • gateway: Puerta de enlace de la red.

También cabe la posibilidad de cambiar la configuración de una determinada interfaz directamente con el comando ifconfig, no obstante los cambios realizados con el editor son persistentes ergo es preferible esa primera opción.

ifconfig [interfaz] x.x.x.x netmask x.x.x.x up

ifconfig ip

Una vez establecida la configuración estimada, para que se apliquen los cambios debemos o bien reiniciar el servicio o bien reiniciar la interfaz de red pertinente.

Para reiniciar el servicio:

/etc/init.d/networking stop

/etc/init.d/networking start

Para reiniciar la interfaz de red:

ifdown [interfaz] && ifup [interfaz]

Modificar la configuración de DNS

La configuración DNS en Linux se guarda en el fichero /etc/resolv.conf,  por ende para establecer o modificar la configuración simplemente debemos editar dicho fichero

nano /etc/resolv.conf

dns

 

@Jyzaguirre

Comunicar dos VM a través de una red interna

1323081395_virtualbox

En la siguiente entrada voy a exponer como comunicar dos máquinas virtuales alojadas en una misma máquina anfitriona a través de una red interna. Es un proceso sencillo y se puede considerar como la opción más rápida para comunicar dos o más VM.

Para ejemplificar el proceso, me voy a servir de un entorno compuesto por  2 VM, una con Windows Server y la otra con Windows 7 enterprise.

Partiendo de la base de que las VM están creadas e instaladas, debemos dirigirnos a la ventana principal de configuración de VirtualBox, nos situamos sobre la primera máquina virtual a configurar, en mi caso la VM con W2K8 server, click derecho>configuración y nos colocamos sobre la pestaña red. Allí nos aparecen las distintas configuraciones de los adaptadores de red que tengamos habilitados, en mi caso solo he habilitado uno, “adaptador 1” sobre el cual voy a realizar la configuración. Abrimos el desplegable “conectado a” y seleccionamos la opción “red interna“. A continuación se nos solicita un nombre con el cual denominaremos a la red, que debe ser común en ambas máquinas virtuales. Aceptamos cambios y ya tendríamos la primera VM configurada.

red1

Una vez establecida la configuración de la interfaz de red de la primera máquina virtual, nos dirigimos a la segunda VM y seguimos los mismos pasos de forma idéntica, conectando la interfaz de red a la misma red interna. Una vez configurado el segundo adaptador iniciamos las máquinas para establecer la configuración de red pues para poder establecer la comunicación, ambas máquinas deben encontrarse en la misma red dentro del mismo rango de IP’s. Para el ejemplo, la VM dharma (Windows Server) y la VM hidra (Windows 7) se van a encontrar en la red 10.200.1.0 /24, donde:

VM dharma: 10.200.1.1 /24

VM hidra: 10.200.1.3/24

red

Una vez establecida la configuración de red pertinente, comprobamos que ambas máquinas se comunican, para ello hago un ping desde dharma a hidra y compruebo que la comunicación se establece de forma exitosa:

ping hidra

A continuación hago el proceso a la inversa, hago un ping desde hidra hacia dharma con resultados idénticos, confirmando así que se ha establecido la comunicación entre ambas VM de forma bidireccional:

ping dharma

Pese a que esta entrada está basada sobre VirtualBox, el proceso en VMware es prácticamente idéntico, la diferencia radica en la hora de configurar las interfaces de red desde el programa de virtualización, en VMware debemos conectar ambas máquinas a la misma VMnet en vez de  a una red con el mismo nombre como sucede en VirtualBox.

 

@Jyzaguirre

Crear perfil móvil en Active Directory

En plataformas Windows, podemos decir que un perfil de usuario es el entorno que contiene todos los valores de configuración de usuario, como pueden ser conexiones de red, conexiones de impresoras, mapeo de unidades de red, configuración gráfica, carpetas personales, documentos, etc. Dichos perfiles de usuario se crean automáticamente la primera vez que un usuario inicia una sesión en el sistema y prevalecen hasta que un administrador los borra.

En un entorno Windows Server, podemos establecer que la ruta de acceso a un determinado perfil integrado en el esquema de Active Directory sea una unidad de red del servidor, lo que se denomina “perfil móvil” y se caracteriza en que el perfil del usuario en cuestión, se descarga del servidor en el equipo local cuando un usuario inicia una sesión, y se actualiza tanto localmente como en el servidor cuando el usuario cierra la sesión, permitiendo así que el usuario mantenga sus configuraciones independientemente del equipo en el cual se conecte (siempre y cuando el equipo esté adherido al dominio).

Para el ejemplo, voy a convertir el perfil del usuario “Jack” perteneciente al dominio perdidos.lost en un perfil móvil. Los pasos a seguir son los siguientes:

1) Creamos en el servidor un recurso compartido, en este caso lo he llamado perfiles_móviles que contiene dentro la carpeta “perfiles”. A continuación establecemos los permisos del recurso a compartir donde debemos dar permiso de lectura y escritura al usuario en cuestión, en este caso Jack.

Imagen

2) Una vez compartido el recurso con los permisos correspondientes, nos dirigimos a la consola de administración de equipos y usuarios de Active Directory, nos situamos sobre el usuario cuyo perfil queremos convertir en móvil, click derecho/propiedades y nos desplazamos hasta la pestaña “perfil”. Una vez estemos en dicha pestaña, procedemos a establecer la “ruta de acceso al perfil” de la siguiente forma:

“\\SERVIDOR\Recurso_Compartido\%username%”

En mi caso, el servidor se llama DHARMA, el recurso compartido se llama perfiles_moviles que contiene dentro la carpeta “Perfiles” y el usuario cuyo perfil quiero convertir en móvil se llama Jack, ergo la ruta la cual debo establecer es la siguiente:

“\\DHARMA\perfiles_moviles\Perfiles\%username%

Imagen

Aceptamos los cambios y ya tendríamos establecido el perfil móvil del usuario. Para verificar que se ha establecido la configuración correctamente, debemos logarnos en el dominio con el usuario cuyo perfil hemos convertido en móvil desde cualquier equipo perteneciente al dominio. Una vez iniciemos sesión, si nos dirigimos a la ruta del recurso que previamente hemos compartido, veremos que dentro del mismo se ha generado una carpeta con el perfil del usuario en cuestión:

Imagen

 

 

@Jyzaguirre