Backups de MySQL/MariaDB con el comando mysqldump

Aunque existen diferentes métodos para realizar copias de seguridad de bases de datos MySQL o MariaDB, el más común y eficiente se basa en el uso de una herramienta nativa que tanto MySQL como MariaDB ponen a nuestra disposición para este cometido: el comando mysqldump. Este comando se incluye dentro de las utilidades de MySQL, por lo que, la tendremos disponible sin necesidad de instalarla.

Realizar backup con mysqldump

Para realizar un backup de nuestra base de datos, vamos a tener que indicar los detalles de la base de datos de laque queremos realizar el backup. Los detalles de la base de datos, son tres. Nombre de la base de datos, usuario de la base de datos, y contraseña de la base de datos. Si conocemos dichos datos, podremos obtener el backup de la base de datos de la siguiente forma:

mysqldump --user=USUARIO_BASE_DATOS --password=PASSWORD_BASE_DATOS NOMBRE_BASE_DATOS > nombredelacopiadeseguridad.sql

Hay que tener en cuenta, que introduciendo dicho comando, podemos dejar en el historial datos sensibles como la contraseña, por lo que es posible dejar el password vacío. Una vez presionemos enter, la herramienta nos solicitará el backup que podremos introducir, y una vez realizado, volvemos a pulsar enter, para que el backup se realice.

mysqldump -u USUARIO_BASE_DATOS -p NOMBRE_BASE_DATOS > nombredelacopiadeseguridad.sql

También lo podremos realizar desde root si lo necesitamos

mysqldump -u root -p NOMBRE_BASE_DATOS > nombredelacopiadeseguridad.sql

Backup de todas las bases de datos

En ocasiones, en lugar de querer realizar backup de una base de datos, es posible que queramos tener una copia de seguridad de todas las que tengamos en el servidor. Para ello, en lugar de utilizar el nombre de la base de datos, utilizaremos la opción «–all-databases». Ten en cuenta, que en este caso, por permisos, necesitarás utilizar el de un usuario que tenga permisos para volcar todas las bases de datos. Generalmente, esto ocurre con el usuario root (en paneles cPanel, por ejemplo), o el usuario admin (en paneles Plesk). El comando, quedaría tal que así:

mysqldump --uadmin -p --all-databases > nombredelacopiadeseguridad.sql

Backup completo de una base de datos

Imaginemos que disponemos de un servidor de base de datos MySQL o MariaDB con varias bases de datos y que queremos hacer una copia de seguridad de todo el contenido de una de ellas. En este sentido mysqldump nos ofrece la posibilidad de exportar por separado la estructura, los datos, los triggers y los procedimientos o rutinas, o todo ello en su conjunto. Veamos en primer lugar lo que sería el ejemplo estrella, es decir, cómo realizar una exportación completa de toda la información de una base de datos que incluya estructura, datos, eventos, procedimientos, triggers y vistas:

mysqldump -v --opt --events --routines --triggers --default-character-set=utf8 -u USUARIO_BASE_DATOS -p NOMBRE_BASE_DATOS > nombredelacopiadeseguridad.sql

Comprimir la copia

Si además queremos que se genere directamente un fichero comprimido con gzip o bzip2 sin necesidad de que se escriba en disco primero el fichero SQL resultante de la ejecución del comando mysqldump, el cual tendrá un tamaño mucho mayor, para luego realizar la compresión del mismo en un segundo paso, ejecutaremos el comando añadiendo | gzip -c después del nombre de la base de datos a exportar.

mysqldump -v --opt --events --routines --triggers --default-character-set=utf8 -u USUARIO_BASE_DATOS -p NOMBRE_BASE_DATOS  | gzip -c  > nombredelacopiadeseguridad.sql.gz

En el ejemplo simple

mysqldump -u USUARIO_BASE_DATOS -p NOMBRE_BASE_DATOS | gzip -c > nombredelacopiadeseguridad.sql.gz

Exportar solo la estructura

mysqldump -v --opt --no-data --default-character-set=utf8 -u USUARIO_BASE_DATOS -p NOMBRE_BASE_DATOS > copiadeseguridadestructura.sql

Sincronizar base de datos entre dos servidores

Podemos hacer backup y restore en un solo comando usando los ejemplos anteriores. Para sincronizar el contenido completo de una base de datos en otra sin crear ningún fichero intermedio

ssh ssh_username@server "mysqldump -v --opt --events --routines --triggers --default-character-set=utf8 -u USUARIO_BASE_DATOS --password=PASSWORD_BASE_DATOS NOMBRE_BASE_DATOS | gzip -c" | gunzip | mysql --password=PASSWORD_BASE_DATOS -u USUARIO_BASE_DATOS NOMBRE_BASE_DATOS

Revision #9
Created 17 May 2022 14:36:38 by Admin
Updated 17 May 2022 16:34:45 by Admin