Ir al contenido

Gestionar tus bases de datos

Christophe TREMBLAY-GUILLOUX
Christophe TREMBLAY-GUILLOUXIngeniero de sistemas Linux

Si usas phpMyAdmin, exporta el SQL en un formato comprimido, preferiblemente bzip2, luego gzip, luego zip.

Desde la línea de comandos, así se prepara un archivo SQL comprimido. Sustituye las xxxxx por los valores correctos:

bash
# Directorio donde guardar la base de datos
DBPATH=xxxxx/
# Nombre de la base de datos
DBNAME=xxxxx
# Usuario de conexión a la base de datos
DBUSER=xxxxx
# Contraseña de ese usuario
DBPASS=xxxxx
# Servidor de la base de datos (pon localhost en lugar de 127.0.0.1 si no funciona)
DBHOST=127.0.0.1
mysqldump --single-transaction --routines --triggers --events --hex-blob -h${DBHOST} -u${DBUSER} -p${DBPASS} ${DBNAME} | bzip2 -c > ${DBPATH}/mysql_backup_${DBNAME}_`date +%Y%m%d-%H%M%S`.sql.bz2
  • El archivo obtenido tiene un nombre parecido a mysql_backup_${DBNAME}_`date +%Y%m%d-%H%M%S`.sql.bz2.
  • Súbelo al servidor en el directorio virtualmin-backup.

Para importar sin pasar por PHP hay que usar la línea de comandos, ya sea por una conexión SSH o por el terminal integrado en Virtualmin.

Una vez conectado al terminal:

bash
# Nombre de la nueva base de datos
DBNAME=xxxxx
# Usuario de conexión a la base de datos
DBUSER=xxxxx
# Contraseña de ese usuario
DBPASS=xxxxx
# Servidor de la base de datos (pon localhost en lugar de 127.0.0.1 si no funciona)
DBHOST=127.0.0.1
# La base debe estar VACÍA: elimina todas sus tablas si hace falta (sin tocar la base)
mysql --protocol=TCP -N -h${DBHOST} -u${DBUSER} -p${DBPASS} ${DBNAME} -e 'SHOW TABLES' | sed 's/.*/DROP TABLE IF EXISTS `&`;/' | mysql --protocol=TCP -h${DBHOST} -u${DBUSER} -p${DBPASS} ${DBNAME}
# Alternativas según el formato del archivo.
# El sed quita las instrucciones USE / CREATE DATABASE del volcado: si no, cambia
# a la base de origen (error "Access denied ... to database ...").
# Importar un archivo en formato sql.bz2
bunzip2 -dc db_filename.sql.bz2 | sed -E '/^\s*(USE|CREATE DATABASE)\b/Id' | mysql --protocol=TCP --binary-mode=1 -h${DBHOST} -u${DBUSER} -p${DBPASS} ${DBNAME}
# Importar un archivo en formato sql.gz
gunzip -c db_filename.sql.gz | sed -E '/^\s*(USE|CREATE DATABASE)\b/Id' | mysql --protocol=TCP --binary-mode=1 -h${DBHOST} -u${DBUSER} -p${DBPASS} ${DBNAME}
# Importar un archivo en formato sql.zip
unzip -p db_filename.sql.zip | sed -E '/^\s*(USE|CREATE DATABASE)\b/Id' | mysql --protocol=TCP --binary-mode=1 -h${DBHOST} -u${DBUSER} -p${DBPASS} ${DBNAME}