jueves, 30 de abril de 2009

Renombrar Bases de Datos MySQL en Linux

Por varias razones sucede , que en ocasiones debemos renombrar una base de datos completa, en mi caso el motivo fue que un aplicativo tenía el nombre de la base de datos que debía usarse en su código interno (hard-code) y la base de datos que se creo con mysql se hizo con otro nombre, es obvio que al final la aplicación y la base de datos nunca se iban a ver, entonces que hay que hacer? renombrar.

Aunque parezca muy raro, el administrador de mysql no trae ninguna funcionalidad que permita simplemente renombrar una base de datos, existe un comando para renombrar tablas, pero no bases de datos.
Entonces que opción nos queda?, bueno hay que recordar que los esquemas literalmente el sistema los ve como un directorio, de ser así entonces sería cuestión de renombrar el directorio y ya, pues bien esto es lo que hay que hacer. El asunto es que hay que buscar donde linux guarda los esquemas de mysql.
Dependiendo de la distribución , la colocación de los esquemas va a variar, sin embargo existe un archivo que nos va a indicar donde son almacenados, este archivo es:

my.cnf


La ubicación de este archivo en distribuciones como Debian y sus variaciones, esta generalmente en:

/etc/mysql


De todas formas sino sabemos donde esta lo buscamos con usando find

find / -name my.cnf


Una vez ubicado el archivo accedemos al mismo , y ubicamos la linea que diga

datadir = /var/lib/mysql


Datadir nos indica el lugar donde MySQL almacena todas las bases de datos, en mi distribución Ubuntu observamos que esta en /var/lib/mysql, nos cambiamos a ese directorio y dentro de él veremos que contiene todas las bases de datos que tenga nuestro MySQL, y ya aquí se hace lo más sencillo de todo el cuento, simplemente renombre el directorio al nombre que desee y listo.
No es necesario bajar el servicio de mysql ni reiniciarlo.

6 comentarios:

  1. Te felicito gracias por resolverme un problema tenia 3 meses tratando de renombrar esa bases de datos.

    ResponderEliminar
  2. Has probado con la instrucción de SQL de ALTER TABLE?

    ResponderEliminar
  3. hey shakaran te equivocas porque alter table es para modificar tablas, pero no sirve para renombrar la base de datos entera yo me lei este post y es el unico que he conseguido en la red que me haya explicado como resolver el problema

    ResponderEliminar
  4. Se agradece el aporte, lol @shakaran. Con respecto al cambiar de golpe el nombre de la DB desde el directorio de MySQL no es muy recomendado, en la versión 5.2.x provoca un conflicto en las tablas impidiendo que se creen respaldos ya que la base de datos estaba arriba cuando se hizo esto, por lo que las tablas estaban lock y se pierde la referencia con respecto al nombre de la DB (MySQL tendrá como referencia el nombre anterior, no el actual) por lo tanto si bien se puede cambiar, se pierden las referencias a las tablas de la DB.

    Es más recomendable usar el comando RENAME DATABASE desde la terminal ya que es una operación que el mismo DBMS realiza y cambia las referencias a las tablas de la DB, ya que para eso está hecho :p

    ResponderEliminar
  5. Actualización: el comando rename database fue removido luego de la versión 5.1 debido a que producía pérdida de datos por la misma razón de cambiar el nombre del directorio y fue reemplazado por ALTER {DATABASE | SCHEMA} db_name UPGRADE DATA DIRECTORY NAME, como fuera de tema no entiendo por qué si me pide mi perfil no puedo editar mis propios comentarios....

    ResponderEliminar
  6. Gracias JuanC por tu información actualizada!. Saludos.

    ResponderEliminar