![]() |
Copia de seguridad periodica de MySQL - Versión para impresión +- Foro QNAP en español (https://www.qnapclub.es) +-- Foro: GENERAL (https://www.qnapclub.es/forumdisplay.php?fid=3) +--- Foro: Firmware, Aplicaciones y Tutoriales (https://www.qnapclub.es/forumdisplay.php?fid=39) +--- Tema: Copia de seguridad periodica de MySQL (/showthread.php?tid=2360) Páginas:
1
2
|
Copia de seguridad periodica de MySQL - Ganekogorta - 27-03-2018 Hola Como ya lo preguntó JoseDTF y tenía pendiente hacerlo para mi uso. He creado un script en bash que hace copias de seguridad de todas nuestras bases de datos de MySQL/MariaDB. Para ello uso tres archivos:
Recordad que al archivo listado.txt hay que darle permisos de escritura para que el script pueda escribirle líneas y que al script secundario ademas de permisos de escritura, hay que dárselos también de ejecución. El script MySQLBackup.sh es el siguiente: #! /bin/bash #defino una variable para tener la fecha y hora de creación fecha=$(date +"%Y%m%d_%H%M") #defino la ruta base, ruta="/share/CACHEDEV1_DATA/" #defino la ruta donde guardaremos las copias de seguridad ruta1=$ruta"MSSQL/MySQL" #defino la ruta donde estará el script secundario ruta2=$ruta"Scripts" # defino limite de copias a guardar limite=30 #hago backup de todas las bases de datos con usuario root /usr/local/mysql/bin/mysqldump -u root -pclavemysql --all-databases > $ruta1/MySQL_$fecha.sql #listo los archivo de copia con extension .sql y los escribo en el archivo listado.txt ls -t -1 $ruta1/*.sql > $ruta2/listado.txt #cuento archivos .sql fin=$(ls -t -1 $ruta1/*.sql | wc -l) #creo cabecera de archivo del script secundario echo "#! /bin/bash" > $ruta2/borrarMySQLold.sh #añado líneas de archivos a borrar, los mas viejos a partir del número límite if [ $fin -gt $limite ] ; then for ((i=$limite+1;i<=$fin;i++)); do linea0=$(echo -n "rm "'"') linea1=$(awk "NR==$i{print;exit}" listado.txt) linea2=$(echo '"') linea="$linea0$linea1$linea2" echo $linea >> $ruta2/borrarMySQLold.sh done fi #Ejecuto archivo con comandos de borrado $ruta2/borrarMySQLold.sh Este script lo agrego al crontab de forma diaria y en la carpeta, según el ejemplo, obtendré siempre las últimas 30 copias. RE: Copia de seguridad periodica de MySQL - Qnapero - 28-03-2018 Qué pasada muchas gracias Ganekogorta RE: Copia de seguridad periodica de MySQL - DonPeter - 05-04-2018 Gracias Ganeko, un gran Script. Lo marco como importante. Saludos, Copia de seguridad periodica de MySQL - Ganekogorta - 05-04-2018 Hola He creado un nuevo script mas elaborado que con sencillas modificaciones. Puede servir no solo para backup de MySQL, sino que para otras tareas periódicas. Lo que hace es crear dentro de la carpeta /share/CACHEDEV1_DATA una carpeta llamada "MySQL" que va a contener copias de seguridad de todas las BBDDs de MySQL en archivos separados. Además creará una carpeta "diaX" en función del día del mes, además los domingos deja la copia en la carpeta "semanaX" en función de la semana en curso y el primer domingo del mes la deja en la carpeta "mesX" en función del mes en curso. Para cada copia, lo que hace es: -comprobar si existe la carpeta, si no existe la crea base. -comprobar si existe la carpeta del día/semana o mes y si no existe, la crea. -Comprueba si hay contenido en la carpeta del día/semana o mes de extensión sql y lo borra puesto que son datos antiguos. -crea la copia del día en archivos separados de extensión sql He optimizado un poco mas el script inicial para no depender de archivos externos los cuales nos servían de log de actividad. El script, para ir centralizando todos los que uso, le he dejado en la carpeta /share/CACHEDEV1_DATA/Scripts/MySQLBackUp.sh y es llamado desde el crontab de forma diaria a una hora determinada. Lo he comentado bastante para que se pueda entender lo que hace, e incluso podéis descomentar algunas líneas para que veáis que actividades va realizando si es que lo ejecutáis por consola. Evidentemente no lo he podido comprobar a lo largo de un año [emoji6] #! /bin/bash # si vuestra qnap usa otra ruta, has de cambiar CACHEDEV1_DATA por la que tengas ruta="/share/CACHEDEV1_DATA/MySQL" dia=$(date +%-d) dsemana=$(date +%-u) mes=$(date +%-m) mes="mes$mes" if [ ! -d $ruta/ ]; then # si no existe la carpeta base, la creo mkdir $ruta fi #compruebo y creo la carpeta del día en curso si no existe if [ ! -d $ruta/dia$dia/ ]; then # no existe la carpeta del $dia y la creo mkdir $ruta/dia$dia else #si la carpeta del día existe, borro su contenido ls -1 -d $ruta/dia$dia/*.sql | while read archivo do #echo "ARCHIVO ELIMINADO: ""$archivo" rm $archivo done fi # hago backup de todas las bases de datos en archivos separados for DB in `/usr/local/mysql/bin/mysql -e "show databases" -u root -pclaveMySQL| grep -v Database`; do /usr/local/mysql/bin/mysqldump -u root -pclaveMySQL $DB --events > "$ruta/dia$dia/$DB.sql"; done semana=$(((dia+6)/7)) #echo "hoy es $dia y el dia de la semana es $dsemana, semana numero $semana y el mes es $mes" #compruebo que es domingo if [[ $dsemana -eq 7 ]]; then # hoy es domingo y saco la semana del mes semana=$(((dia+6)/7)) if [[ $semana -eq 1 ]]; then # compruebo si existe la carpeta del mes, y si no está, la creo como mes+numero del mes if [ ! -d $ruta/$mes/ ]; then mkdir $ruta/$mes fi # compruebo si mes en curso tiene algo de *.sql y la vacío ls -1 -d $ruta/$mes/*.sql | while read archivo do # echo "ARCHIVO ELIMINADO: ""$archivo" rm $archivo done # copia el backup de HOY a la carpeta mes en curso cp $ruta/dia$dia/*.sql $ruta/$mes/ elif [[ $semana -eq 2 ]]; then # compruebo si existe la carpeta semana2, y si no está, la creo if [ ! -d $ruta/semana2/ ]; then mkdir $ruta/semana2 fi # compruebo si semana2 tiene algo de *.sql y la vacío ls -1 -d $ruta/semana2/*.sql | while read archivo do # echo "ARCHIVO ELIMINADO: ""$archivo" rm $archivo done # copia el backup de HOY a la carpeta semana2 cp $ruta/dia$dia/*.sql $ruta/semana2/ elif [[ $semana -eq 3 ]]; then # compruebo si existe la carpeta semana3, y si no está, la creo if [ ! -d $ruta/semana3/ ]; then mkdir $ruta/semana3 fi # compruebo si semana3 tiene algo de *.sql y la vacío ls -1 -d $ruta/semana3/*.sql | while read archivo do # echo "ARCHIVO ELIMINADO: ""$archivo" rm $archivo done # copia el backup de HOY a la carpeta semana3 cp $ruta/dia$dia/*.sql $ruta/semana3/ elif [[ $semana -eq 4 ]]; then # compruebo si existe la carpeta semana4, y si no está, la creo if [ ! -d $ruta/semana4/ ]; then mkdir $ruta/semana4 fi # compruebo si semana4 tiene algo de *.sql y la vacío ls -1 -d $ruta/semana4/*.sql | while read archivo do # echo "ARCHIVO ELIMINADO: ""$archivo" rm $archivo done # copia el backup de HOY a la carpeta semana4 cp $ruta/dia$dia/*.sql $ruta/semana4/ else # compruebo si existe la carpeta semana5, y si no está, la creo if [ ! -d $ruta/semana5/ ]; then mkdir $ruta/semana5 fi # compruebo si semana5 tiene algo de *.sql y la vacío ls -1 -d $ruta/semana5/*.sql | while read archivo do # echo "ARCHIVO ELIMINADO: ""$archivo" rm $archivo done # copia el backup de HOY a la carpeta semana5 cp $ruta/dia$dia/*.sql $ruta/semana5/ fi fi Como siempre, si veis algún fallo o errata me avisáis por privado para corregirlo. RE: Copia de seguridad periodica de MySQL - Fraydel - 02-04-2020 Hola a todos. Soy nuevo en este Chat y deseaba hacer una pregunta a ver si me pudiesen ayudar. Tengo en casa 2 QNAP TS-412 y TS-431P2. en el TS-412 tengo un certificado SSL y deseaba saber si puedo utilizar 1 certificado SSL para los dos QNAP? o debo comprar un Segundo Certificado? Muchas gracias y espero respuestas. Copia de seguridad periodica de MySQL - Ganekogorta - 03-04-2020 (02-04-2020, 06:37 PM)Fraydel escribió: Hola a todos. Hola Fraydel Se puede, pero mejor abre un hilo nuevo y te cuento (que también me pasa a mi) RE: Copia de seguridad periodica de MySQL - Cromo24Cr - 27-01-2022 En las últimas versiones del qts, mysqldump no funciona con mariadb10... ¿...alguna idea? Copia de seguridad periodica de MySQL - Ganekogorta - 28-01-2022 Hola Búscalo ya que es muy posible que su ruta haya cambiado. Un saludo Agur eta ondo ibilli Mon (TS-469Pro, TVS-673e, QBoat Sunny, TS-453Be y QHora-301w) RE: Copia de seguridad periodica de MySQL - Cromo24Cr - 28-01-2022 Si, ha cambiado.. pero no funciona igualmente.... Da un error al ejecutarlo ! RE: Copia de seguridad periodica de MySQL - microcabin - 28-02-2022 Estoy en la misma situación que Cromo24Cr, tengo que cambiar un viejo Qnap por otro con QTS5, y migrar la bbdd, pero necesito que se ejecuten copias de seguridad automáticas, actualmente me esta funcionando con el scrip ¿Merece la pena que las haga con container station? Saludos |