One place for hosting & domains

      hacer

      Cómo hacer una copia de seguridad, restablecer y migrar una base de datos de MongoDB en Ubuntu 20.04


      El autor seleccionó COVID-19 Relief Fund para que reciba una donación como parte del programa Write for DOnations.

      Introducción

      MongoDB es uno de los motores de base de datos más populares de NoSQL. Es famoso por ser escalable, sólido, confiable y fácil de usar. En este artículo, respaldará, restaurará y migrará una base de datos de MongoDB de muestra.

      Importar y exportar una base de datos implica gestionar los datos en un formato legible por el ser humano y compatible con otros productos de software. Por el contrario, las operaciones de copia de seguridad y restauración de MongoDB crean o utilizan datos binarios específicos de MongoDB, que preservan no solo la uniformidad y la integridad de sus datos, sino también sus atributos específicos de MongoDB. Por lo tanto, para migrar, generalmente es preferible usar la copia de seguridad y la restauración siempre que los sistemas de origen y destino sean compatibles.

      Requisitos previos

      Antes de seguir este tutorial, asegúrese de completar los siguientes requisitos previos:

      Salvo que se indique lo contrario, todos los comandos que requieren privilegios root en este tutorial deben ejecutarse como usuario no root con privilegios sudo.

      Paso 1: Usar JSON y BSON en MongoDB

      Antes de continuar con este artículo, es necesario tener algunos conocimientos básicos sobre la materia. Si tiene experiencia con otros sistemas de base de datos NoSQL como Redis, es posible que encuentre algunas similitudes cuando trabaje con MongoDB.

      MongoDB utiliza los formatos JSON y BSON (JSON binario) para almacenar su información. JSON es el formato legible por el ser humano perfecto para exportar y, finalmente, importar sus datos. Además, puede administrar los datos exportados con cualquier herramienta que sea compatible con JSON, incluyendo un editor de texto simple.

      Un ejemplo de documento JSON tiene el siguiente aspecto:

      Example of JSON Format

      {"address":[
          {"building":"1007", "street":"Park Ave"},
          {"building":"1008", "street":"New Ave"},
      ]}
      

      Es conveniente trabajar con JSON, pero no es compatible con todos los tipos de datos disponibles en BSON. Eso significa que habrá la llamada “pérdida de fidelidad” de la información si utiliza JSON. Para respaldar y restaurar, es mejor usar el BSON binario.

      En segundo lugar, no tiene que preocuparse por crear explícitamente una base de datos de MongoDB. Si la base de datos que especifica para la importación no existe todavía, se creará automáticamente. Aún mejor es el caso de la estructura de las colecciones (tablas de base de datos). A diferencia de otros motores de bases de datos, en MongoDB, la estructura se crea de nuevo automáticamente al insertar el primer documento (fila de la base de datos).

      En tercer lugar, en MongoDB, leer o insertar grandes cantidades de datos, como las tareas de este artículo, puede requerir de muchos recursos y utilizar gran parte de su CPU, memoria y espacio de disco. Eso es crucial teniendo en cuenta que MongoDB se suele utilizar para las grandes bases de datos y los macrodatos. La solución más sencilla a este problema es ejecutar las exportaciones y las copias de seguridad durante la noche o en horas no pico.

      En cuarto lugar, la consistencia de la información podría ser un problema si tiene un servidor MongoDB ocupado en el que la información cambia durante el proceso de exportación o respaldo de la base de datos. Una posible solución para este problema es la replicación, que puede considerar cuando avance en el tema de MongoDB.

      Aunque puede usar las funciones de importación y exportación para respaldar y restaurar los datos, hay mejores formas de garantizar la integridad total de sus bases de datos de MongoDB. Para respaldar sus datos, debe usar el comando mongodump. Para restaurar, utilice mongorestore. Veamos cómo funcionan.

      Paso 2: Utilizar mongodump para respaldar una base de datos de MongoDB

      Primero, vamos a respaldar su base de datos de MongoDB.

      Un argumento esencial para mongodump es --db, que especifica el nombre de la base de datos que desea respaldar. Si no se especifica el nombre de la base de datos, mongodump hace una copia de seguridad de todas las bases de datos. El segundo argumento importante es --out, que define el directorio en el que se verterán los datos. Por ejemplo, vamos a respaldar la base de datos newdb y vamos a almacenarla en el directorio /var/backups/mongobackups. Lo ideal es que tengamos cada una de nuestras copias de seguridad en un directorio con la fecha actual como /var/backup/mongobackups/10-29-20.

      Primero, cree el directorio /var/backup/mongobackups:

      • sudo mkdir /var/backups/mongobackups

      Luego, ejecute mongodump:

      • sudo mongodump --db newdb --out /var/backups/mongobackups/`date +"%m-%d-%y"`

      Verá un resultado similar a este:

      Output

      2020-10-29T19:22:36.886+0000 writing newdb.restaurants to 2020-10-29T19:22:36.969+0000 done dumping newdb.restaurants (25359 documents)

      Tenga en cuenta que en la ruta del directorio anterior, hemos usado date +"%m-%d-%y", que obtiene automáticamente la fecha actual. Eso nos permitirá tener copias de seguridad dentro del directorio, como /var/backup/10-29-20/. Esto es especialmente conveniente cuando automatizamos las copias de seguridad.

      En este punto, tenemos una copia de seguridad competa de la base de datos newdb en el directorio /var/backup/mongobackups/10-29-20/newdb/. Esta copia de seguridad tiene todo lo necesario para restaurar el newdb de forma adecuada y preservar la llamada “fidelidad”.

      Como regla general, debe realizar copias de seguridad con regularidad y preferiblemente cuando el servidor está menos cargado. Por lo tanto, puede configurar el comando mongodump como tarea de cron para que se ejecute regularmente, por ejemplo, cada día a la 03:03 a.m.

      Para ello, abra crontab, el editor de Cron:

      Tenga en cuenta que cuando ejecute sudo crontab, editará las tareas de cron para el usuario root. Esto se recomienda porque si establece los crones de su usuario, podrían no ejecutarse correctamente, especialmente si su perfil sudo requiere verificación de contraseña.

      Dentro de la línea de comandos de crontab, inserte el siguiente comando mongodump:

      crontab

      3 3 * * * mongodump --out /var/backups/mongobackups/`date +"%m-%d-%y"`
      

      En el comando anterior, omitimos el argumento --db a propósito porque normalmente querrá tener todas las bases de datos respaldadas.

      Dependiendo del tamaño de su base de datos de MongoDB, es posible que pronto se quede sin espacio en el disco con demasiadas copias de seguridad. Es por eso que también se recomienda limpiar las copias de seguridad antiguas con regularidad o comprimirlas.

      Por ejemplo, para eliminar todas las copias de seguridad de más de siete días, puede usar el siguiente comando bash:

      • find /var/backups/mongobackups/ -mtime +7 -exec rm -rf {} ;

      De forma similar al comando mongodump anterior, también puede añadirlo como tarea de cron. Debe ejecutarse justo antes de iniciar la siguiente copia de seguridad, por ejemplo, a las 03:01 a.m. Para ello, abra crontab de nuevo:

      Después de eso, inserte la siguiente línea:

      crontab

      1 3 * * * find /var/backups/mongobackups/ -mtime +7 -exec rm -rf {} ;
      

      Guarde y cierre el archivo.

      Completar todas las tareas en este paso garantizará una solución de respaldo adecuada para sus bases de datos de MongoDB.

      Paso 3: Usar mongorestore para restaurar y migrar una base de datos de MongoDB

      Cuando restaura su base de datos de MongoDB desde una copia de seguridad anterior, tiene la copia exacta de su información de MongoDB en un momento determinado, incluyendo todos los índices y los tipos de datos. Esto es especialmente útil cuando desea migrar sus bases de datos de MongoDB. Para restaurar MongoDB, usaremos el comando mongorestore, que funciona con las copias de seguridad binarias que produce mongodump.

      Continuemos nuestros ejemplos con la base de datos newdb y veremos cómo podemos restaurarla desde la copia de seguridad tomada anterior. Primero, especificaremos el nombre de la base de datos con el argumento --nsInclude Usaremos newdb* para restaurar todas las colecciones. Para restaurar una colección única como los restaurantes, utilice newdb.restaurants en su lugar.

      Luego, con --drop, nos aseguraremos de que la base de datos de destino se elimine primero para que la copia de seguridad se restaure en una base de datos limpia. Como argumento final, especificaremos el directorio de la última copia de seguridad, que tendrá un aspecto similar a este: /var/backup/mongobackups/10-29-20/newdb/.

      Una vez que tenga una copia de seguridad con marca de tiempo, puede restaurarla usando este comando:

      • sudo mongorestore --db newdb --drop /var/backups/mongobackups/10-29-20/newdb/

      Verá un resultado similar a este:

      Output

      2020-10-29T19:25:45.825+0000 the --db and --collection args should only be used when restoring from a BSON file. Other uses are deprecated and will not exist in the future; use --nsInclude instead 2020-10-29T19:25:45.826+0000 building a list of collections to restore from /var/backups/mongobackups/10-29-20/newdb dir 2020-10-29T19:25:45.829+0000 reading metadata for newdb.restaurants from /var/backups/mongobackups/10-29-20/newdb/restaurants.metadata.json 2020-10-29T19:25:45.834+0000 restoring newdb.restaurants from /var/backups/mongobackups/10-29-20/newdb/restaurants.bson 2020-10-29T19:25:46.130+0000 no indexes to restore 2020-10-29T19:25:46.130+0000 finished restoring newdb.restaurants (25359 documents) 2020-10-29T19:25:46.130+0000 done

      En el caso anterior, estamos restaurando los datos en el mismo servidor donde creamos la copia de seguridad. Si desea migrar los datos a otro servidor y usar la misma técnica, deberá copiar el directorio de la copia de seguridad, que es /var/backups/mongobackups/10-29-20/newdb/ en nuestro caso, al otro servidor.

      Conclusión

      Ahora, ha realizado algunas tareas esenciales relacionadas con el respaldo, la restauración y la migración de sus bases de datos de MongoDB. Ningún servidor MongoDB de producción debería funcionar sin una estrategia de respaldo fiable, como la que se describe aquí.



      Source link

      Sysadmin eBook: Cómo hacer funcionar los servidores


      Descargue todo el EBook

      Libro electrónico Cómo hacer funcionar los servidores: Guía práctica para la administración de sistemas en formato EPUB

      Libro electrónico Cómo hacer funcionar los servidores: Guía práctica para la administración de sistemas en formato PDF

      Introducción al libro electrónico

      En este libro, se destacan las habilidades prácticas de los administradores de sistemas, las arquitecturas comunes que encontrará y las mejores prácticas que se aplican a la automatización y la ejecución de sistemas a cualquier escala, desde una computadora portátil o un servidor hasta 1000 o más.  Está diseñado para ayudar a orientarlo dentro de la disciplina, y esperamos que lo anime a aprender más sobre la administración de sistemas.

      Este libro se basa en el plan de estudios Cómo hacer funcionar servidores: guía práctica para la administración de sistemas Linux, disponible en la comunidad de DigitalOcean. Su estructura se basa en algunos temas centrales:

      1. Temas introductorios

      2. Pilas de tecnología LAMP y LEMP

      3. Proteger sus servidores

      4. Automatización con Ansible

      5. Control de versiones e integración continua

      Puede elegir los temas de este libro que le interesen y explorarlos usando estos capítulos como guía. Trabajar con este libro lo expondrá a una amplia variedad de tecnologías, términos técnicos y enfoques conceptuales para administrar servidores de Linux. Puede trabajar con cada capítulo o sección a su propio ritmo y en cualquier orden que desee.

      Descargar el libro electrónico

      Puede descargar el libro electrónico en formato EPUB o PDF siguiendo los enlaces que se muestran a continuación.

      Descargue todo el EBook

      Libro electrónico Cómo hacer funcionar los servidores: Guía práctica para la administración de sistemas en formato EPUB

      Libro electrónico Cómo hacer funcionar servidores: guía práctica para la administración de sistemas en formato PDF

      Para obtener recursos adicionales de administración de sistemas que lo ayuden a comenzar, y para participar en la comunidad de DigitalOcean de otros desarrolladores y administradores, consulte nuestra creciente biblioteca de tutoriales, preguntas y proyectos con la etiqueta “Introducción”.



      Source link

      Cómo hacer cálculos matemáticos en Go con operadores


      Introducción

      En el ámbito de la programación, los números son comunes. Se utilizan para representar aspectos como dimensiones de tamaños de pantalla, ubicaciones geográficas, dinero y puntos, el tiempo transcurrido de un video, posiciones de avatares, colores mediante la asignación de códigos numéricos, entre otros.

      En el sector de la programación, desarrollar la capacidad de realizar operaciones matemáticas de forma eficaz es importante debido a la frecuencia con la que se trabaja con números. Si bien tener conocimientos matemáticos avanzados ciertamente puede servirle a programar mejor, no es un requisito previo. Si no tiene conocimientos matemáticos previos, trate concebir la matemática como una herramienta para lograr sus objetivos y como una forma de mejorar su pensamiento lógico.

      Trabajaremos con dos de los tipos de datos numéricos más utilizados en Go: enteros y flotantes:

      • Los enteros son números enteros que pueden ser positivos, negativos o 0 (…, -1, 0, 1,…).
      • Los flotantes son números reales que contienen un punto decimal, como 9.0 o -2.25.

      En este tutorial, analizaremos los operadores que podemos usar con tipos de datos numéricos en Go.

      Operadores

      Un operador es un símbolo o una función que indica una operación. Por ejemplo, en matemática, el signo más o + es el operador que indica suma.

      En Go, veremos algunos operadores conocidos que provienen de la matemática. Sin embargo, otros operadores que usaremos son específicos de la programación informática.

      A continuación, se muestra una tabla de referencia rápida de los operadores relacionados con la matemática que se usan en Go. En este tutorial se abarcan todas las funciones que se indican a continuación.

      OperaciónLo que muestra
      x + y​​​Suma de x e y
      x - y​​Diferencia entre x e y
      -xCambio de signo de x
      +xIdentidad de x
      x * y​​Producto de x e y
      x / y​Cociente de x e y
      x % y​​Resto de x e y

      También veremos los operadores de asignación compuestos, como += y *=, en los que se combinan un operador aritmético con el operador =.

      Suma y resta

      En Go, los operadores de resta funcionan con los mismos principios que la operación matemática. De hecho, puede usar el lenguaje de programación Go como una calculadora.

      Veamos algunos ejemplos, comenzando por los enteros:

      fmt.Println(1 + 5)
      

      Output

      6

      En lugar de pasar enteros directamente a la instrucción fmt.Println, podemos inicializar variables que representen valores enteros usando sintaxis como la siguiente:

      a := 88
      b := 103
      
      fmt.Println(a + b)
      

      Output

      191

      Debido a que los números enteros pueden ser tanto positivos como negativos (y también 0), podemos añadir un número negativo con uno positivo:

      c := -36
      d := 25
      
      fmt.Println(c + d)
      

      Output

      -11

      La adición se comportará de manera similar con los flotantes:

      e := 5.5
      f := 2.5
      
      fmt.Println(e + f)
      

      Output

      8

      Debido a que añadimos dos flotantes juntos, Go devolvió un valor flotante con un decimal. Sin embargo, como la posición decimal es cero en este caso, fmt.Println no utilizó el formato decimal. Para darle al resultado el formato adecuado, podemos utilizar fmt.Printf y el verbo %.2f, que dará el formato de dos posiciones decimales, como se indica en este ejemplo:

      fmt.Printf("%.2f", e + f)
      

      Output

      8.00

      La sintaxis para la resta es la misma que la de la suma, con la excepción de que cambiamos nuestro operador de signo más (+) por el de signo menos (-):

      g := 75.67
      h := 32.0
      
      fmt.Println(g - h)
      

      Output

      43.67

      En Go, solo podemos usar operadores en los mismos tipos de datos. No podemos añadir un int y un float64:

      i := 7
      j := 7.0
      fmt.Println(i + j)
      

      Output

      i + j (mismatched types int and float64)

      Si se intenta usar operadores en tipos de datos que no son los mismos se producirá en error de compilación.

      Operaciones aritméticas unarias

      Las expresiones matemáticas unarias constan de un solo componente o elemento. En Go, podemos usar los signos más y menos como elementos únicos en combinación con un valor para mostrar la identidad del valor (+) o cambiar el signo del valor (-).

      Aunque no se utiliza comúnmente, el signo más indica la identidad del valor. Podemos usar el signo más con valores positivos:

      i := 3.3
      fmt.Println(+i)
      

      Output

      3.3

      Cuando usamos el signo más con un valor negativo, también devuelve la identidad de ese valor, pero en este caso será negativo:

      j := -19
      fmt.Println(+j)
      

      Output

      -19

      Con un valor negativo, el signo más devuelve el mismo valor negativo.

      Sin embargo, el signo menos cambia el signo de un valor. Por lo tanto, al pasar un valor positivo, notaremos que el signo menos antes del valor mostrará un valor negativo:

      k := 3.3
      fmt.Println(-k)
      

      Output

      -3.3

      De forma alternativa, al usar el operador unario de signo menos con un valor negativo, se muestra un valor positivo:

      j := -19
      fmt.Println(-j)
      

      Output

      19

      Las operaciones aritméticas unarias indicadas por el signo más y el signo menos devolverán la identidad del valor, como en el caso de +i, o el signo opuesto del valor, como sucede con -i.

      Multiplicación y división

      Al igual que la suma y la resta, la multiplicación y la división tienen un funcionamiento muy similar al de las operaciones matemáticas. El signo que usaremos en Go para multiplicar es * y el signo para dividir es /.

      Aquí tenemos un ejemplo de cómo hacer una multiplicación en Go con dos valores flotantes:

      k := 100.2
      l := 10.2
      
      fmt.Println(k * l)
      

      Output

      1022.04

      En Go, la división tiene características diferentes según el tipo numérico que dividamos.

      Si dividimos enteros, el operador / de Go realiza una división de piso, en la que, para el cociente x, se muestra el número entero más grande menor o igual que x.

      Si ejecuta el siguiente ejemplo de división 80 / 6, obtendrá 13 como resultado y el tipo de datos será int:

      package main
      
      import (
          "fmt"
      )
      
      func main() {
          m := 80
          n := 6
      
          fmt.Println(m / n)
      }
      

      Output

      13

      Para obtener un flotante como resultado, debe convertir los valores de forma explícita antes de la división.

      Puede hacerlo envolviendo sus valores con el tipo de flotante que desee, float32() o float64():

      package main
      
      import (
          "fmt"
      )
      
      func main() {
          s := 80
          t := 6
          r := float64(s) / float64(t)
          fmt.Println(r)
      }
      

      Output

      13.333333333333334

      Módulo

      El operador % es el módulo, que muestra el resto en lugar del cociente después de la división. Esto es útil para encontrar números que son múltiplos de un mismo número.

      Veamos un ejemplo del módulo:

      o := 85
      p := 15
      
      fmt.Println(o % p)
      

      Output

      10

      Para desglosarlo, de la división de 85 por 15 se obtiene el cociente 5 con un resto de 10. Aquí, nuestro programa muestra el valor 10 porque el operador de módulo muestra el resto de una expresión de división.

      Para hacer cálculos con módulos con tipos de datos float64, usará la función Mod del paquete math:

      package main
      
      import (
          "fmt"
          "math"
      )
      
      func main() {
          q := 36.0
          r := 8.0
      
          s := math.Mod(q, r)
      
          fmt.Println(s)
      }
      

      Output

      4

      Prioridad de los operadores

      En Go, al igual que en la matemática, debemos tener en cuenta que los operadores se evaluarán en orden de prioridad, no de izquierda a derecha o de derecha a izquierda.

      Si observamos la siguiente expresión matemática:

      u = 10 + 10 * 5
      

      Podemos leerla de izquierda a derecha, pero la multiplicación se realizará primero. Por lo tanto, si imprimiéramos u obtendríamos el siguiente valor:

      Output

      60

      Esto se debe a que 10 * 5 da como resultado 50, y luego sumamos 10 para obtener 60 como resultado final.

      Si, como alternativa, queremos sumar el valor 10 a 10 y luego multiplicar esa suma por 5, en Go debemos usar paréntesis tal como lo haríamos en el campo de la matemática:

      u := (10 + 10) * 5
      fmt.Println(u)
      

      Output

      100

      Una opción para recordar el orden de las operaciones es el acrónimo PEMDAS:

      OrdenLetraRepresenta
      1PParéntesis
      2EExponente
      3MMultiplicación
      4DDivisión
      5ASuma
      6SResta

      Es posible que esté familiarizado con otros acrónimos, como BEDMAS o BODMAS, para recordar el orden de las operaciones. Sea cual sea el acrónimo que le resulte más útil, intente tenerlo en cuenta al realizar operaciones matemáticas en Go para obtener los resultados esperados.

      Operadores de asignación

      El operador de asignación más frecuente es uno que ya utilizó: el signo igual =. El operador = le asigna el valor de la derecha a una variable a la izquierda. Por ejemplo, v = 23 asigna el valor del número entero 23 a la variable v.

      Durante la programación, es común usar operadores de asignación compuestos que realizan una operación en el valor de una variable y luego asignan el valor nuevo resultante a esa variable. Estos operadores compuestos combinan un operador aritmético con el operador = Por lo tanto, para la adición, combinaremos + con = para obtener el operador compuesto +=. Observemos cómo se ve:

      w := 5
      w += 1
      fmt.Println(w)
      

      Output

      6

      Primero, configuramos la variable w equivalente al valor de 5, luego usamos el operador de asignación += para sumar el número de la derecha al valor de la variable izquierda y, a continuación, asignamos el resultado a w.

      Los operadores de asignación compuestos se utilizan frecuentemente en los bucles for, que emplearemos cuando queramos repetir un proceso varias veces:

      package main
      
      import "fmt"
      
      func main() {
      
          values := []int{0, 1, 2, 3, 4, 5, 6}
      
          for _, x := range values {
      
              w := x
      
              w *= 2
      
              fmt.Println(w)
          }
      
      }
      

      Output

      0 2 4 6 8 10 12

      Usando un bucle for para iterar el elemento llamado values, pudo automatizar el proceso del operador *=, que multiplicó la variable w por el número 2, y luego volvió a asignar el resultado a la variable w.

      Go cuenta con un operador de asignación compuesto para cada uno de los operadores aritméticos que se analizan en este tutorial.

      Para sumar y luego asignar el valor:

      y += 1
      

      Para restar y luego asignar el valor:

      y -= 1
      

      Para multiplicar y luego asignar el valor:

      y *= 2
      

      Para dividir y luego asignar el valor:

      y /= 3
      

      Para mostrar el resto y luego asignar el valor:

      y %= 3
      

      Los operadores de asignación compuestos pueden ser útiles cuando se debe realizar un aumento o una reducción incremental o cuando se deben automatizar determinados procesos de un programa.

      Conclusión

      En este tutorial, se analizaron muchos de los operadores que usará con los tipos de datos numéricos enteros y flotantes. Puede aprender más sobre los diferentes tipos de datos en Información sobre tipos de datos en Go y Cómo convertir tipos de datos.



      Source link