Created
September 4, 2013 01:21
-
-
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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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 :)