Linux – Creación de shell scripts

A lo largo de esta semana me ha tocado hacer backups de bases de datos de una forma automática, con lo cual me ha hecho meterme en lo que son los shell scripts.

El problema era el siguiente:
Necesito hacer un backup de sólo una determinada información de la base de datos, almacenarla en el formato más facilmente accesible e inversible (vamos, que si sucede algo pueda dar marcha atrás a todo y subirlo de nuevo). Para complicarlo más, hay información relacionada en otras tablas a las que tengo que acceder haciendo joins…

Pasos que he seguido:
1 – Pedir el id de la compañía (el que quería) y almacenar esa información en una variable:

echo “Dime el id de la compania que quieres hacer backup”
read id_company

2 – Mediante mysqldump solicitar la información con un where por esa compañía y todas las tablas que necesitara e incluir en un archivo toda esta info.

mysqldump -h DIRECCION_IP -u USUARIO -pPASSWORD –where=”id_company=$id_company” –skip-add-drop-table BASEDATOS TABLA1 TABLA2 TABLA3 > /var/www/tmp/backups/company_$id_company.sql

Importante sustituir DIRECCION_IP, USUARIO, PASSWORD, BASEDATOS y las TABLAX por los valores adecuados. PASSWORD va pegado a -p.

3 – Mediante mysqldump solicitar la información que dependa de las tablas intermedias de la siguiente forma:

mysqldump -h DIRECCION_IP -u USUARIO -pPASSWORD –where=”id_user in (select id_user from user where id_company=$id_company)” –skip-add-drop-table –lock-all-tables BASEDATOS TABLADEPENDEUSER1 TABLADEPENDEUSER2 TABLADEPENDEUSER3 > /var/www/tmp/backups/company_user_$id_company.sql

4 – Hacemos un zip de todo.

tar vcf company_$id_company.tar backups

5 – Eliminamos los archivos individuales (dejando solo y únicamente el archivo comprimido .tar)

rm /var/www/tmp/backups/company_$id_company.sql
rm /var/www/tmp/backups/company_user_$id_company.sql

6 – Y ya únicamente queda ejecutarlo!! En mi caso, como se llamaba backup_company.sh simplemente en la línea de comandos tuve que poner: ./backup_company.sh

Leave a Reply

Your email address will not be published. Required fields are marked *