sql >> Base de Datos >  >> RDS >> Mysql

Cómo hacer una copia de seguridad de las bases de datos MySQL desde la línea de comandos en Linux

La evolución tecnológica actual de todos los aspectos de la vida ha hecho que los datos sean más valiosos que el oro y la plata. Si puede adquirir, hacer crecer y proteger los datos, está a un paso de convertirse en un dios de los datos. Sin embargo, las grandes empresas que controlan aspectos de la vida como el comercio electrónico, el combustible, el transporte y los paisajes alimentarios confían en la protección de datos para protegerse de un colapso inevitable.

En este momento, perder datos es como perder su seguro de vida. Por lo tanto, el sistema de administración de bases de datos que está utilizando debe tener una orientación de respaldo. Si es un administrador de MySQL o un usuario que trabaja con datos en crecimiento, debería considerar implementar un plan de automatización de copias de seguridad más frecuente. ¿Razón? Podrías terminar siendo víctima de un hackeo de datos o incluso alterar tus datos por accidente.

Tales circunstancias pueden conducir a violaciones de datos implacables, especialmente cuando no tiene un plan de copia de seguridad de la base de datos. Si usted es un usuario o administrador de MySQL invertido, este artículo está aquí para solucionar sus problemas de copia de seguridad de la base de datos. Cumpliremos dos objetivos. Primero, comprenderá la implementación de la exportación de bases de datos a través de "mysqldump". Luego, finalmente, abordaremos cómo el uso de "crontab" puede facilitar todo este proceso a través de la automatización.

Preparar un directorio de respaldo de datos

Dado que Linux no hace una recomendación de usuario para un destino de copia de seguridad de datos de MySQL, depende de usted elegir una ubicación de copia de seguridad adecuada. Por ejemplo, en esta guía tutorial, trabajaremos en un directorio de copia de seguridad en "/var/www_my_backups/". Solo estamos considerando este enfoque para comprender los mecanismos de respaldo de datos de MySQL. Idealmente, se recomienda que las copias de seguridad de todos los datos importantes se realicen en un servidor externo.

Puede crear su directorio de respaldo preferido en su máquina local a través de un comando de terminal similar al siguiente:

$ sudo mkdir /var/www_my_backups/

Asegúrese de que la máquina de copia de seguridad operada por Linux que está utilizando le haya otorgado privilegios de acceso raíz o sudo. Si no tiene acceso de propietario al directorio de copia de seguridad creado, se enfrentará a errores de permisos mientras ejecuta las pruebas de mysqldump. El siguiente comando debe enumerar el usuario del sistema actualmente activo y detallar si tiene privilegios de propiedad en la carpeta de copia de seguridad creada.

$ sudo chown $(whoami):$(whoami) /var/www_my_backups/

La utilidad de cliente mysqldump

Esta herramienta MySQL realiza copias de seguridad lógicas. Da como resultado varios conjuntos de instrucciones SQL, que recrean los datos de la tabla de la base de datos original y las definiciones de objetos cuando se ejecutan. Además, uno o varios volcados de bases de datos MySQL se respaldan o transfieren a un servidor de base de datos SQL secundario.

Un comando mysqldump estándar está representado por la siguiente sintaxis de comando.

$ mysqldump -u [mysql_username] -p[mysql_password] [mysql_database_name] > /path/to/[mysql_dump_file_name].sql
  • -u [mysql_nombre de usuario]: representa un usuario privilegiado de la base de datos MySQL. Este usuario debería poder ejecutar operaciones de volcado de base de datos.
  • -p[contraseña_mysql]: representa la contraseña de usuario de la base de datos MySQL. NO agregue un espacio entre "-p" y "[mysql_password]".
  • [mysql_dump_file_name]: representa el nombre de su base de datos MySQL.
  • >: apunta al destino del volcado de salida
  • /ruta/hacia/[mysql_dump_file_name].sql: apunta a la ubicación de la ruta del archivo de volcado asociado. Puede darle a este archivo de volcado [mysql_dump_file_name] un nombre personalizado si lo desea.

Antes de continuar con esta guía tutorial, hay algo que vale la pena mencionar sobre “-p[mysql_password]”. Si bien esta guía de artículos se centrará en asociar su uso con varios ejemplos de volcado de MySQL, debe evitar usarlo directamente cuando maneje sus volcados de respaldo de MySQL reales, especialmente en una red compartida.

Un volcado en ejecución se puede secuestrar con un comando bidimensional como "ps ax", que revela el nombre de usuario y la contraseña de la base de datos asociada. Sin embargo, el uso de la ubicación “~/.my.cnf” para almacenar la contraseña de la base de datos MySQL hace innecesario el uso de “-p[mysql_password]” en el comando de volcado indicado. Si este comando de volcado se ejecuta a través de un trabajo cron, la opción de comando “–defaults-extra-file=/path/to/.my.cnf” debe apuntar el comando mysqldump a la ubicación de la contraseña de la base de datos.

Algunos ejemplos de copias de seguridad de bases de datos MySQL

Consideremos varios escenarios de usuarios en los que podemos usar el comando mysqldump para hacer una copia de seguridad de los datos de la base de datos MySQL.

Copia de seguridad de todas las bases de datos

El uso de la opción de comando “–all-databases” en su comando mysqldump se encargará de todos los volcados de bases de datos MySQL en su sistema Linux. Por ejemplo, el siguiente comando demuestra cómo volcar todas sus bases de datos MySQL en el archivo "/var/www_my_backups/" ya existente. El usuario de este sistema Linux debe ser root o tener privilegios sudo.

En nuestro caso, y para su comprensión, llamamos a nuestro archivo de volcado "all-databases.sql", pero puede usar cualquier otro nombre de su preferencia. Dado que estamos tratando con todas las bases de datos, es necesario ser un usuario de cuenta raíz de MySQL.

$ mysqldump -u root -p[mysql_password] --all-databases > /var/www_my_backups/all-databases.sql

Copia de seguridad de una base de datos

Si solo una base de datos MySQL es importante para usted, crear su copia de seguridad con el comando mysqldump requiere reemplazar la opción de comando "[mysql_database]" con el nombre real. El nombre del archivo de volcado puede tomar el nombre de esta base de datos "[mysql_database].sql" para que sea más fácil rastrearlo y restaurarlo más tarde. También puede optar por otro nombre de archivo de volcado personalizado si lo desea.

Este comando de ejemplo se implementa con el usuario raíz, pero cualquier otro usuario con acceso a la base de datos de destino es una opción viable.

$ mysqldump -u root -p[mysql_password] [mysql_database_name] > /var/www_my_backups/[mysql_database_name].sql

Copia de seguridad de varias bases de datos

Tal vez tenga una selección de bases de datos MySQL específicas que desee respaldar. En este caso, la opción de comando “[mysql_database_name]” aparecerá más de una vez, y cada caso está asociado con el nombre de la base de datos que desea respaldar. Recuerde espaciar los nombres de estas bases de datos en el comando mysqldump. El archivo de volcado “[mysql_database_name].sql” también debe asociarse con un nombre único que recordará.

$ mysqldump -u root -p[mysql_password] [mysql_database_1_name] [mysql_database_2_name] > /var/www_my_backups/[mysql_databases_1_2_names].sql

Copia de seguridad de una sola tabla

Cuando su rutina de copia de seguridad es solo después de una tabla de base de datos específica, la creación de su copia de seguridad debe tener tanto el nombre de la base de datos como el nombre de la tabla de la base de datos como opciones de comando del comando mysqldump. Puede dar a su archivo de volcado el mismo nombre que la tabla de la base de datos de destino, p. [mysql_database_table_name].sql.

$ mysqldump -u root -p[mysql_password] [mysql_database_name] [mysql_database_table_name] > /var/www_my_backups/[mysql_databases_table_name].sql

Copia de seguridad de varias tablas

Cuando desee realizar una copia de seguridad de muchas tablas de bases de datos MySQL específicas, debe aparecer una mención de todos los nombres de las tablas de bases de datos seleccionadas después del nombre de la base de datos que aloja estas tablas. El archivo de volcado de destino podría tomar un nombre como [mysql_database_tables_1_2_names].sql

$ mysqldump -u root -p[mysql_password] [mysql_database_name] [mysql_database_table_1_name] [mysql_database_table_2_name] > /var/www_my_backups/[mysql_databases_tables_1_2_names].sql

Copia de seguridad de una(s) base(s) de datos remota(s)

Esta implementación de ejemplo también es sencilla. El comando de volcado de la base de datos MySQL deberá incluir la opción de comando "-h" seguida del nombre de host de la máquina remota o la dirección IP asociada. Todas las demás sintaxis habituales de los comandos de copia de seguridad de la base de datos deberían seguir.

$ mysqldump -h [remote_computer_ip_or_hostname] -u root -p[mysql_password] [mysql_database_name] > /var/www_my_backups/[remote_mysql_database_name].sql

Puede ajustar este comando mysqldump para manejar los otros casos de copia de seguridad de bases de datos ya discutidos, por ejemplo, copias de seguridad de MySQL con múltiples bases de datos o tablas.

Copia de seguridad de una base de datos asociada con compresiones

Si desea asociar sus copias de seguridad de datos con compresiones, el botón “| gzip -c>” La opción de comando mysqldump se puede usar para canalizar una salida gzip.

$ mysqldump -u root -p[mysql_password] [mysql_database_name] | gzip -c > /var/www_my_backups/[mysql_database_name].sql.gz

Si su base de datos MySQL es enorme y desea realizar un seguimiento del progreso de la compresión, considere siempre implementar la opción detallada como se muestra en el siguiente ejemplo.

$ mysqldump -u root -p[mysql_password] [mysql_database_name] | gzip -c --verbose > /var/www_my_backups/[mysql_database_name].sql.gz

Restauración de la base de datos MySQL

Una vez que haya terminado con la copia de seguridad de su base de datos MySQL, ¿qué sigue? ¿Cómo accede a los datos que con tanto cuidado protegió? La restauración de sus datos requiere el cumplimiento de la siguiente sintaxis de restauración de MySQL.

$ mysql -u [mysql_username] -p[mysql_password] [mysql_database_name] < /path/to/[mysql_database_name].sql 

Como quizás no haya notado, la única diferencia entre este comando de restauración de la base de datos y el comando de copia de seguridad de la base de datos es que usamos la opción "mysql" en lugar de la opción "mysqldump" y la opción "<" en lugar de la opción ">".

Automatización de copias de seguridad de MySQL

El sistema operativo Linux está equipado con varios servicios útiles que no tienen precio para un administrador de base de datos como el de MySQL RDBMS. Uno de estos servicios es el servicio cron. Es eficaz en la programación de comandos automatizados. Estos comandos, una vez creados, se asignan a la tabla crontab cron. Puede acceder a crontab a través del siguiente comando.

$ sudo crontab -e

Si se le solicita, es posible que este comando desee asociar su ejecución a un editor de texto para seleccionar el editor de texto nano.

Se abrirá un archivo con un nombre como "/tmp/crontab.LVY6A9/crontab". En la parte inferior de este archivo crontab, ingrese un programa cron viable junto con un comando de volcado MySQL aplicable. El ejemplo que se ilustra a continuación implementa el uso de la compresión gzip para las copias de seguridad diarias de la base de datos. A veces, es posible que tenga grandes archivos .sql programados para la copia de seguridad. El uso de gzip reduce dichos archivos a tamaños razonables antes del almacenamiento de respaldo. Ayuda con la gestión de la memoria de copia de seguridad.

00 03 * * * mysqldump -u root -p[mysql_password] [mysql_database_name] | gzip -c > /var/www_my_backups/[mysql_database_name].sql.gz

La opción de comando “00 03 ***” se puede interpretar de la siguiente manera. Cada 24 horas después de las 3 a. m., se ejecuta el siguiente comando mysqldump para respaldar una base de datos. Se sobrescribe el archivo de copia de seguridad de la base de datos que existía actualmente antes del inicio de este proceso de copia de seguridad. En su caso, no necesita esperar más de 24 horas para presenciar la automatización de la copia de seguridad de su base de datos en acción a través de crontab.

Puede editar la opción "00 03 ***" en el archivo crontab a algo como "02 00 ***", y en solo dos minutos, el proceso de copia de seguridad debería autoinicializarse. Alternativamente, si su hora es a las 22:30, editar el archivo con "34 22 ***" inicializará el proceso de copia de seguridad de la base de datos a las 22:34. Recuerde guardar (Ctrl+X) este archivo crontab antes de cerrarlo para que este comando se vuelva ejecutable.

Después de que transcurran los minutos que estableció, el trabajo cron debería haberse ejecutado. Luego, enumere la carpeta de copia de seguridad creada en su terminal, y el archivo de copia de seguridad .sql.gz creado debería estar presente.

$ ls -l /var/www_my_backups/

El resultado resultante debe ser similar al siguiente:

-rw-r--r-- 1 root root 36M Jul 29 22:24 [mysql_database_name].sql.gz

Si tiene problemas para detectar el archivo de copia de seguridad de MySQL .sql.gz, revise su crontab time o el comando completo. Podría haber un error de sintaxis, o podría faltar algo. Alternativamente, el registro cron del sistema podría indicar dónde hay un problema.

$ sudo grep CRON /var/log/syslog 

Recuerde restablecer la entrada de crontab a su horario de base de datos preferido una vez que confirme que todo funciona correctamente.

Uso de my.cnf para almacenar contraseñas de bases de datos MySQL  

Ya hemos mencionado los inconvenientes de la opción “-p[mysql_password]” en un comando mysqldump, especialmente en una red compartida. Necesitamos discutir cómo implementar el almacenamiento de contraseñas en el archivo "~/.my.cnf". Los usuarios que utilicen cron para automatizar las copias de seguridad de sus bases de datos deberán comprender la implementación de la opción de comando “–defaults-extra-file=/path/to/.my.cnf”.

Editando mi archivo.cnf

El directorio de inicio de su sistema Linux contiene este archivo oculto. La ruta directa del sistema es "/home/your_username/.my.cnf". Utilice el editor de texto nano para abrir este archivo. La opción "~" apunta al directorio de inicio.

$ sudo nano ~/.my.cnf

Edite este archivo abierto de acuerdo con la siguiente sintaxis para almacenar correctamente la contraseña de su base de datos MySQL. La parte "YOUR_DB_PASS" es la única entrada que necesita cambiar con su contraseña actual de la base de datos. Ingrese estos detalles de información en la parte inferior del archivo y guárdelos.

[mysqldump] 
password=YOUR_DB_PASS

Utilice Ctrl+X para guardar este archivo. Este archivo "my.cnf" también necesita algunas configuraciones de permisos. Implemente el siguiente comando:

$ sudo chmod 600 ~/.my.cnf

Ahora es el momento de ver la recreación de nuestro nuevo comando mysqldump con la opción de comando “-p[mysql_password]” eliminada.

$ mysqldump -u root [mysql_database_name] | gzip -c > /var/www_my_backups/[mysql_database_name].sql.gz 

Como puede ver, no agregamos nada. Solo parece que lo único que eliminamos es la opción de comando “-p[mysql_password]”.

Crontab y –defaults-extrs-file

Para los usuarios que prefieren automatizar las copias de seguridad de la base de datos, deberá obtener la contraseña de la base de datos en el archivo "~/.my.cnf" a través de la opción de comando "–defaults-extra-file". Este enfoque facilita las cosas para el comando mysqldump cuando necesita hacer referencia a la autenticidad de la contraseña y el usuario de la base de datos. Debe ser específico acerca de la ruta al archivo my.cnf y no solo usar el símbolo "~". Considere la siguiente implementación dentro del archivo crontab:

30 22 * * *   mysqldump --defaults-extra-file=/home/system_username/.my.cnf -u root [mysql_database_name] | gzip -c > /var/www_my_backups/[mysql_database_name].sql.gz 

En este ejemplo, crontab se ejecuta todos los días a las 22:30 horas para crear una compresión gzip respaldada de la base de datos MySQL.

Nota final

Este artículo analizó los mecanismos de copia de seguridad de la base de datos local sobre el directorio de copia de seguridad "/var/www_my_backups". Dado que ahora comprende cómo se lleva a cabo el proceso de copia de seguridad, debe escalar más y comenzar a pensar en copias de seguridad fuera del sitio. Sin embargo, un enfoque más práctico es a través de la configuración de acceso SFTP que apunta a este directorio de copia de seguridad "/var/www_my_backups".

Con una configuración de este tipo, es posible crear un trabajo cron SFTP a través de un servidor remoto para obtener una copia de estos archivos de base de datos almacenados localmente para el almacenamiento seguro durante la noche y el día.

Al concluir esta increíble guía de artículos, ahora es un maestro orgulloso de los escenarios de copia de seguridad de la base de datos MySQL, la restauración de la copia de seguridad de la base de datos y la automatización de la copia de seguridad de la base de datos. Ahora debe confiar y confiar en el uso de trabajos cron para programar y manejar la automatización de la copia de seguridad de su base de datos MySQL. Los horarios de automatización no tienen por qué ser diarios ya que también pueden ser semanales y mensuales.