Jun 112014
 
Artículo MySQL

Casi con toda seguridad, lo primero que se le ocurrirá a un DBA para cambiar el nombre de una base de datos es usar un comando de la forma "RENAME DATABASE nombre_viejo TO nombre_nuevo", pero desafortunadamente, este comando no existe en MySQL.

En este artículo explicamos las alternativas existentes para realizar esta tarea.

1. Volcar la base de datos y recuperar el volcado sobre la nueva base de datos

Si la base de datos es pequeña, esta puede ser la manera más rápida y sencilla de cambiar su nombre:

  • Volcar la base de datos. Suponiendo que la base de datos existente se llama “nombre_viejo”, ejecutamos el siguiente comando en un terminal:

    Si la base de datos contiene triggers, funciones o procedimientos almacenados, es necesario también volcarlos a un fichero:
  • Crear la nueva base de datos. Nos conectamos a mysql, y ejecutamos el comando para crear una base de datos llamada “nombre_nuevo”:
  • Importar el volcado en la nueva base de datos. Desde línea de comandos llamamos al intérprete mysql para que importe, en la base de datos “nombre_nuevo”, el fichero generado previamente:
  • Eliminar la vieja base de datos. Ya solo nos queda eliminar la antigua base de datos. Nos conectamos a mysql, y ejecutamos:

2. Mover cada una de las tablas a la nueva base de datos

Si el tamaño de la base de datos es grande, y el sistema tiene poco espacio de disco libre, puede que no sea posible realizar el volcado y crear la nueva base de datos siguiendo el procedimiento presentado en el apartado anterior.

En este caso, la alternativa es crear la nueva base de datos, y mover a la misma cada una de las tablas de la base de datos vieja. El comando “RENAME TABLE” se puede utilizar para este propósito (de la misma manera que el comando “mv” en un sistema Linux nos permite cambiar un fichero de un directorio a otro).

Los pasos a seguir son:

  • Crear la nueva base de datos

  • Obtener un listado de las tablas existentes en la vieja base de datos

  • Para cada tabla, moverla a la nueva base de datos

  • Eliminar la vieja base de datos

Nota: En lugar de obtener los nombres de las tablas con el comando “show tables”, podemos ejecutar un comando que genera directamente los comandos “RENAME TABLE” a ejecutar:

3. Cambiar el nombre del directorio que contiene la base de datos

Este procedimiento sólo se puede aplicar si todas las tablas de la base de datos son de tipo MyISAM.

Por otra parte, hay que realizarlo habiendo parado completamente la base de datos.

Si se cumplen estos requisitos, el procedimiento a seguir es:

  • Parar el servicio mysql.
    Típicamente, en un sistema Linux podemos hacer esto con un comando:

  • Cambiar de nombre el directorio que contiene la base de datos.
    En una instalación estándar de MySQL sobre un sistema Linux, los directorios que contienen las bases de datos se encuentran bajo “/var/lib/mysql”:

  • Arrancar de nuevo el servicio mysql

Script para cambiar de nombre una base de datos mysql

Todos los pasos explicados en el segundo apartado se pueden automatizar mediante un script “rename_db”, como el que fué publicado en el blog de Percona:

Nota: Como se puede ver, en las llamadas a mysql y mysqldump que contiene el script no se especifican el usuario y la contraseña para acceder a la base de datos. El script asume que éstos están configurados en un fichero ~/my.cnf (my.ini), o bien que se pasan como variables de entorno.

 Publicado por en 7:20 pm

 Deja un comentario

(requerido)

(requerido)