Skip to content

Instantly share code, notes, and snippets.

@gabrielkfr
Created September 4, 2013 01:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save gabrielkfr/6431743 to your computer and use it in GitHub Desktop.
Save gabrielkfr/6431743 to your computer and use it in GitHub Desktop.
Script bash que permite importar una base de datos en MySQL o PostgreSQL a partir de una archivo dump.
#!/bin/bash
 
# -- CONFIGURACIÓN DE VARIABLES GLOBALES
APP_HOME="."
APP_OUTPUT="import.log"
 
MYSQL_DBUSER_ADM="root"
MYSQL_DBUSER="admin"
MYSQL_DBPASS="admin"
MYSQL_DBNAME="mi_db"
 
PG_DBUSER_ADM="postgres"
PG_DBUSER="admin"
PG_DBPASS="admin"
PG_DBNAME="mi_db"
 
# -- SE LIMPIA LA CONSOLA Y SE DESPLIEGA EL TITULO DEL PROGRAMA.
clear
echo "IMPORT"
echo "======"
 
# -- SE VERIFICA QUE LOS DOS PARAMETROS QUE INDICAN EL TIPO DE BASE
# DE DATOS A UTILIZAR (MYSQL O POSTGRESQL) Y EL ARCHIVO DUMP DE DONDE
# IMPORTAR LA BASE DE DATOS HAYAN SIDO PASADOS POR EL USUARIO.
if [ -z $1 ] || [ -z $2 ]; then
echo "Error en la ejecución! Faltan parámetros.."
echo "Ejemplo ejecución:"
echo
echo "  $ sh import.sh [mysql|pg] dump.sql"
echo
exit
fi
 
# -- SE COMPRUEBA QUE EL PRIMER PARÁMETRO RECIBIDO CORRESPONDA
# A LAS OPCIONES VÁLIDAS QUE SON mysql Y pg.
if [ $1 != "mysql" ] && [ $1 != "pg" ]; then
echo "Error en la ejecución! las opciones para el primer parámetro pueden ser solamente 'mysql' y 'pg' (postgres)."
echo "Ejemplo ejecución:"
echo
echo "  $ sh import.sh [mysql|pg] dump.sql"
echo
exit
fi
 
# -- SE VERIFICA LA EXISTENCIA DEL ARCHIVO DUMP.
if ! [ -f $APP_HOME/$2 ]; then
echo "Error en la ejecución! El archivo dump '$2' no existe."
echo
exit
fi
 
# -- SE LE SOLICITA AL OPERADOR QUE INGRESE LA CONTRASEÑA DEL USUARIO
# ADMINISTRADOR DE LA BASE DE DATOS.
STTY_SAVE=$(stty -g)
stty -echo
if [ $1 == "mysql" ]; then
echo "Favor de introducir a continuación la contraseña del usuario '$MYSQL_DBUSER_ADM', administrador del motor de base de datos 'MySQL'."
elif [ $1 == "pg" ]; then
echo "Favor de introducir a continuación la contraseña del usuario '$PG_DBUSER_ADM', administrador del motor de base de datos 'PostgreSQL'."
else
echo "Favor de introducir a continuación la contraseña del usuario administrador del motor de base de datos."
fi
echo
echo -n "Introduzca Password: "
read DBADMIN_SECRET_PASSWD
stty $STTY_SAVE
echo
echo
 
# -- SEGÚN LA BASE DE DATOS ESPECIFICADA SE PROCEDE A IMPORTAR EL DUMP.
echo "" > $APP_HOME/$APP_OUTPUT
if [ $1 == "mysql" ]; then
echo -n "Desea eliminar la base de datos $MYSQL_DBNAME y el usuario $MYSQL_DBUSER antes de importar la copia de seguridad? OPCIONES (S|N): "
read ELIMINA_DB_USER
if [ $ELIMINA_DB_USER == "S" ] || [ $ELIMINA_DB_USER == "s" ]; then
echo "Eliminando la base de datos y el usuario del sistema del motor MySQL. Aguarde un momento..."
mysql -v -u $MYSQL_DBUSER_ADM -p$DBADMIN_SECRET_PASSWD -e "drop database $MYSQL_DBNAME;" >> $APP_HOME/$APP_OUTPUT
mysql -v -u $MYSQL_DBUSER_ADM -p$DBADMIN_SECRET_PASSWD -e "drop user $MYSQL_DBUSER@localhost;" >> $APP_HOME/$APP_OUTPUT
echo
fi
echo "Importando Base de Datos del sistema en MySQL. Aguarde un momento..."
mysql -v -u $MYSQL_DBUSER_ADM -p$DBADMIN_SECRET_PASSWD < $APP_HOME/$2 >> $APP_HOME/$APP_OUTPUT
mysql -v -u $MYSQL_DBUSER_ADM -p$DBADMIN_SECRET_PASSWD -e "grant all on $MYSQL_DBNAME.* to $MYSQL_DBUSER@localhost identified by '$MYSQL_DBPASS'" >> $APP_HOME/$APP_OUTPUT
echo "Fin del proceso de importación! Puede ver la salida del proceso en el archivo '$APP_HOME/$APP_OUTPUT'."
echo
elif [ $1 == "pg" ]; then
export PGUSER=$PG_DBUSER_ADM
export PGPASSWORD=$DBADMIN_SECRET_PASSWD
echo -n "Desea eliminar la base de datos $PG_DBNAME y el usuario $PG_DBUSER antes de importar la copia de seguridad? OPCIONES (S|N): "
read ELIMINA_DB_USER
if [ $ELIMINA_DB_USER == "S" ] || [ $ELIMINA_DB_USER == "s" ]; then
echo "Eliminando la base de datos y el usuario del sistema del motor PostgreSQL. Aguarde un momento..."
psql -L $APP_HOME/$APP_OUTPUT -c "drop database $PG_DBNAME;" >> $APP_HOME/$APP_OUTPUT
psql -L $APP_HOME/$APP_OUTPUT -c "drop user $PG_DBUSER;" >> $APP_HOME/$APP_OUTPUT
echo
fi
echo "Importando Base de Datos del sistema en PostgreSQL. Aguarde un momento..."
psql -L $APP_HOME/$APP_OUTPUT -c "create user $PG_DBUSER createdb createuser createrole;" >> $APP_HOME/$APP_OUTPUT
psql -L $APP_HOME/$APP_OUTPUT -c "alter user $PG_DBUSER with password '$PG_DBPASS';" >> $APP_HOME/$APP_OUTPUT
psql -L $APP_HOME/$APP_OUTPUT -c "create database $PG_DBNAME;" >> $APP_HOME/$APP_OUTPUT
psql -L $APP_HOME/$APP_OUTPUT -c "alter database $PG_DBNAME owner to $PG_DBUSER;" >> $APP_HOME/$APP_OUTPUT
psql -L $APP_HOME/$APP_OUTPUT -d $PG_DBNAME -f $APP_HOME/$2 >> $APP_HOME/$APP_OUTPUT
unset PGUSER
unset PGPASSWORD
echo "Fin del proceso de importación! Puede ver la salida del proceso en el archivo '$APP_HOME/$APP_OUTPUT'."
echo
else
echo "Opción no soportada!"
echo
fi
@seon22break
Copy link

Una pregunta estoy haciendo algo similar, pero tengo un problema respecto al comando que ejecuto:
/opt/lampp/bin/mysql -v -uroot --database db_name < $filename
Este comando no me funciona y no logro encontrar el error. Sin embargo cuando lo lanzo desde la terminal funciona correctamente. En cambio lo ejecuto desde el script y no muestra ningún error , pero no lo ejecuta.

Muchas gracias :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment