Copia de seguridad y restauración MySQL por línea de comandos

Realización de la copia de seguridad de una base de datos MySQL y su posterior restauración en un sólo paso mediante la ayuda de guiones de consola.

Archivo con las contraseñas

Si creamos el archivo .my.cnf en nuestra carpeta personal no será necesario introducir el usuario y la contraseña cada vez que invoquemos los comandos mysql y mysqldump

~/.my.cnf

[mysql]
user=name
password=secret

[mysqldump]
user=name
password=secret

Luego restringimos sus permisos con la orden chmod 600 ~/.my.cnf (o 644)

Realización de la copia de seguridad

backup_db.sh

#!/bin/bash

if [ -z "$1" ]
  then
    echo "Required mysql database name"
    exit
fi

DATE=$(date +"%Y-%m-%d")
DATABASE=$1
BACKUP="$DATABASE.$DATE.sql.gz"

mysqldump --force --opt --skip-lock-tables --events --routines --triggers --databases $DATABASE | gzip > $BACKUP
echo $BACKUP

Hay que dar permisos de ejecución chmod u+x backup_db.sh

Características:

  • Hay que dar el nombre de la base de datos por parámetro
  • El archivo resultante incluye la fecha y está comprimido
  • En la copia se incluyen los eventos, rutinas y disparadores

Restauración de la copia de seguridad

restore_db.sh

#!/bin/bash

if [ -z "$1" ]
  then
    echo "Required backup file: database.YYYY-MM-DD.sql.gz"
    exit
fi

GZFILE=$1
SQLFILE=`echo $1 | sed 's/\.gz//'`
DATABASE=`cut -d'.' -f1 <<< "$1"`
USER=$DATABASE
PASS=$DATABASE

echo "Decompress '$GZFILE' ..."
  gzip -d $GZFILE
echo "Drop database '$DATABASE' ..."
  echo "DROP DATABASE IF EXISTS $DATABASE;" | mysql
echo "Restoring database from '$SQLFILE' ..."
  mysql < $SQLFILE
echo "Creating user '$USER' ..."
  echo "CREATE USER IF NOT EXISTS '$USER'@'%' IDENTIFIED BY '$PASS';" | mysql
  echo "GRANT ALL PRIVILEGES ON $DATABASE.* TO '$USER'@'%';" | mysql
echo "Done!"

Hay que dar permisos de ejecución chmod u+x restore_db.sh

Características:

  • Hay que indicar la copia de seguridad por parámetro
  • ¡Borra la anterior base de datos!
  • Crea el usuario para la base de datos

Ejemplo de uso

Copia de respaldo

$ ./backup_db.sh mydb
mydb.2018-02-17.sql.gz

Restauración

$ ./restore_db.sh mydb.2018-02-17.sql.gz
Decompress 'mydb.2018-02-17.sql.gz' ...
Drop database 'mydb' ...
Restoring database from 'mydb.2018-02-17.sql' ...
Creating user 'mydb' ...
Done!

Ejemplo de ejecución manual sin los scripts

En este caso no nos apoyaremos en el archivo de contraseñas ~/.my.cnf

Copia de respaldo

$ mysqldump --force --opt --skip-lock-tables --events --routines --triggers --databases mydb -u user -p | gzip > mydb.sql.gz

Restauración

$ mysql -u user -p
mysql> DROP DATABASE mydb;
mysql> quit
$ gzip -d mydb.sql.gz
$ mysql -u user -p < mydb.sql
$ mysql -u user -p
mysql> CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypass';
mysql> GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'%';
mysql> quit

Comentarios

Proinf.net, ©2003-2018 ci 3.1.9 (CC) Esta obra está bajo una licencia de Creative Commons Este software está sujeto a la CC-GNU GPL