Shogun Posted July 6, 2022 Report Share Posted July 6, 2022 (edited) Hola a todos, Hoy voy a explicar cómo crear automaticamente una copia de seguridad de nuestra base de datos y almacenarla en el espacio de almacenamiento que OVH incluye gratuitamente con sus servidores dedicados. La ventaja de este método es que incluso en caso de fallo del hardware, nuestros datos quedarían a salvo al estar en una máquina diferente; por otro lado, este sistema no nos salvará si un hacker gana acceso a nuestro sistema, ya que podría acceder a la partición de backup y destruir dichas copias de seguridad. Así que, si nuestros datos son realmente valiosos, conviene o bien descargarse de vez en cuando estas copias de seguridad o almacenarlas en otro servidor completamente distinto donde la máquina no tenga permisos para borrarlos. Películas de Hackerman aparte (hola SG) volvamos por un momento a la realidad cotidiana y veamos cómo montar esta unidad de backup gratuita. En primer lugar tenemos que otorgar acceso a ella a nuestro servidor, así que en el panel de control del mismo en OVH haremos click en la pestaña de Backup Storage y a continuación en el botón Añadir un Acceso, tras lo cual marcamos la casilla NFS y aceptamos. En esta pantalla se nos proporcionan dos datos que necesitaremos para crear nuestro script de backup, en concreto Nombre y Usuario. A continuación abrimos una sesión SSH a nuestro servidor y ejecutamos los siguientes comandos para montar el acceso al almacenamiento NFS: mkdir /backups mount -t nfs <Nombre>:/export/ftpbackup/<Usuario> /backups Los más avispados habrán notado que hay que reemplazar <Nombre> y <Usuario> por los correspondientes que nos muestra OVH en el panel. Nuestro espacio de backup quedará ahora montado como /backups y podemos probar a copiar cosas en él. Pero claro, es un poco pesado andar copiando a mano, así que, ¿porqué no hacer que nuestra base de datos se copien automaticamente? Veamos a continuación un script que nos ayudará a ello almacenando las bd que indiquemos en nuestra unidad NFS, y borrandolos automaticamente despues de 7 dias. #!/bin/sh MYSQLDUMP=/usr/local/bin/mysqldump GZIP=/usr/bin/gzip MAX_AGE=7 DAY=$(date +"%Y-%m-%d") FILETIME=$(date +"%Y-%m-%d.%T") BACKUP_DIR="/backups" BACKUP_NAME="<Nombre>" BACKUP_ID="<Usuario>" MYSQL_USER="root" DATABASES="cats rabbits dogs" #Comprobar que la unidad esta montada if [ ! -d "$BACKUP_DIR" ]; then echo -e "\033[32mMontando unidad de backup...\033[0m" mkdir $BACKUP_DIR mount -t nfs $BACKUP_NAME:/export/ftpbackup/$BACKUP_ID $BACKUP_DIR fi #Borrar backups viejos echo -e "\033[32mBorrando los backups con mas de $MAX_AGE dias de antiguedad...\033[0m" find $BACKUP_DIR/* -type d -ctime +$MAX_AGE | xargs rm -r echo -e "\033[32mCreando directorio $BACKUP_DIR/$FILETIME...\033[0m" mkdir $BACKUP_DIR/$FILETIME for db in $DATABASES do FILE=$db.gz echo -e "\033[32mVolcando $db...\033[0m" $MYSQLDUMP -u $MYSQL_USER -e --single-transaction --quick $db | $GZIP -9 > $BACKUP_DIR/$FILETIME/$FILE done echo -e "\033[32mListo!\033[0m" Para ponerlo en práctica, id por ejemplo al directorio /root y abrid el editor ee (o el que más os guste) en el putty y copiad y pegad este script. ee /root/backup.sh Para que funcione con vuestra bd y servidor debeis editar estas variables: BACKUP_NAME, BACKUP_ID: los campo "Nombre" y "Usuario" que vimos antes en OVH. DATABASES es una lista de las bases de datos que queremos hacer backup, separadas por un espacio. Asimismo podemos cambiar la frecuencia de borrado en MAX_AGE. Una vez modificado a nuestra conveniencia, podemos probarlo con este comando: sh backup.sh Una vez comprobado su buen funcionamiento (es decir, nuestras bd se guardan en /backups con su fecha y hora) procedemos a establecer un backup diario por medio de cron: crontab -e En la pantalla que se nos presenta escribimos: 3 * * * * sh /root/backup.sh (¡Ojo al tabulador entre cada estrellita, y entre la última y sh!) Esto hará que el backup se ejecute todos los días a las 3 AM. Es importante señalar que en el caso de bd grandes, el backup puede causar lag en el servidor. Existen diferentes estrategias para minimizar el impacto que se salen del objetivo de este artículo. Nota 1 En caso de no disponer de un servidor dedicado OVH con almacenamiento backup, podemos simplemente crear un directorio llamado /backups sin montar nada y borrar esta parte: #Comprobar que la unidad esta montada if [ ! -d "$BACKUP_DIR" ]; then echo -e "\033[32mMontando unidad de backup...\033[0m" mkdir $BACKUP_DIR mount -t nfs $BACKUP_NAME:/export/ftpbackup/$BACKUP_ID $BACKUP_DIR fi Esto almacenara las copias de seguridad localmente en el propio servidor, lo cual no es ideal pero sin duda es mejor que nada. Nota 2 Este script asume que el usuario root de MySQL no tiene contraseña, pues así es por defecto al instalar MariaDB (la bd que uso yo) en FreeBSD. Si no es así en vuestro servidor, podéis hacer una de estas dos cosas para que el script pueda funcionar: Opción A: Crear un fichero /root/.my.cnf con el siguiente contenido: [client] user=root password=<vuestra pass de mysql> Estos datos de conexión serán entonces utilizados automáticamente por cualquier programa que use MySQL y se ejecute bajo el usuario de sistema root. Opción B: (preferible) Permitir al usuario root loguearse localmente sin contraseña: Entrasmos en la consola mysql: mysql -uroot -p Y después de escribir nuestra contraseña, ponemos: ALTER USER 'root'@'localhost' IDENTIFIED VIA unix_socket; Cualquier duda sobre este tutorial la puedo resolver aquí, si necesitáis ayuda más personalizada os invito a contratar mis servicios a través de discord: Smokebomb#5154, o a consultar este y otros tutoriales en inglés en mi Debes iniciar sesión para ver el contenido del enlace en esta publicación.. Edited August 2, 2022 by Shogun Actualizado y ampliado con notas SzC, Movi DEA and DeadOfLove 3 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.