El manual de MySQL en MySQL cubre esto.
Por lo general, simplemente vuelco la base de datos y la vuelvo a importar con un nuevo nombre. Esta no es una opción para bases de datos muy grandes. Aparentemente RENAME {DATABASE | SCHEMA} db_name TO new_db_name;
hace cosas malas, existe solo en un puñado de versiones y es una mala idea en general .
Esto debe funcionar con InnoDB , que almacena cosas de manera muy diferente a MyISAM .
RENAME DATABASE
declaración de trabajo que no tiene ningún peligro, ya que no hay una manera fácil de hacer esta tarea actualmente. No hay una razón obvia por la que fuera peligroso en la documentación, por lo que deberían poder hacer un reemplazo. Al menos las personas han puesto errores de solicitud de funciones en su sitio web. Por ejemplo, bugs.mysql.com/bug.php?id=58593 y bugs.mysql.com/bug.php?id=1698 .Respuestas:
Para InnoDB , lo siguiente parece funcionar: cree la nueva base de datos vacía, luego cambie el nombre de cada tabla a la nueva base de datos:
Deberá ajustar los permisos después de eso.
Para las secuencias de comandos en un shell, puede usar cualquiera de los siguientes:
O
Notas:
-p
y la contraseña. Si su base de datos no tiene contraseña, elimine la-u username -ppassword
parte.Si alguna tabla tiene un activador, no se puede mover a otra base de datos utilizando el método anterior (dará como resultado un
Trigger in wrong schema
error). Si ese es el caso, use una forma tradicional para clonar una base de datos y luego descarte la antigua:mysqldump old_db | mysql new_db
Si tiene procedimientos almacenados, puede copiarlos después:
mysqldump -R old_db | mysql new_db
fuente
DROP VIEW
y en suCREATE VIEW
lugar. Torpe, si. Es posible que desee hacer unamysqldump
para mover las vistas, después de mover primero todas las tablas. También tenga en cuenta queSHOW TABLES
mostrará tablas Y vistas, así que tenga cuidado.RENAME DATABASE
se eliminó: dev.mysql.com/worklog/task/?id=4030Use estos pocos comandos simples:
O para reducir las E / S, use lo siguiente como lo sugiere @Pablo Marin-Garcia:
fuente
-p<password>
lugar de en-p
todas partes para que las declaraciones se ejecuten sin una pronta aparición .Enter password: Enter password:
Parece que toma una contraseña, pero no ambas. ¿Me estoy perdiendo un detalle?--routines
bandera a los comandos mysqldump, para asegurarse de que los procedimientos almacenados se copien.Creo que la solución es más simple y fue sugerida por algunos desarrolladores. phpMyAdmin tiene una operación para esto.
Desde phpMyAdmin, seleccione la base de datos que desea seleccionar. En las pestañas hay una llamada Operaciones, vaya a la sección de cambio de nombre. Eso es todo.
Como muchos sugirieron, crea una nueva base de datos con el nuevo nombre, descarga todas las tablas de la base de datos anterior en la nueva base de datos y suelta la base de datos anterior.
fuente
Puede usar SQL para generar un script SQL para transferir cada tabla de su base de datos de origen a la base de datos de destino.
Debe crear la base de datos de destino antes de ejecutar el script generado a partir del comando.
Puede usar cualquiera de estos dos scripts (originalmente sugerí el primero y alguien "mejoró" mi respuesta para usar
GROUP_CONCAT
. Elija, pero prefiero el original):o
($ 1 y $ 2 son fuente y destino respectivamente)
Esto generará un comando SQL que luego deberá ejecutar.
Tenga en cuenta que
GROUP_CONCAT
tiene un límite de longitud predeterminado que se puede superar para las bases de datos con una gran cantidad de tablas. Puede alterar ese límite ejecutandoSET SESSION group_concat_max_len = 100000000;
(o algún otro gran número).fuente
Emulando el
RENAME DATABASE
comando que falta en MySQL:Cree las consultas de cambio de nombre con:
Ejecuta esa salida
Fue tomado de Emular el comando RENAME DATABASE que falta en MySQL .
fuente
Tres opciones:
Cree la nueva base de datos, baje el servidor, mueva los archivos de una carpeta de la base de datos a la otra y reinicie el servidor. Tenga en cuenta que esto solo funcionará si TODAS sus tablas son MyISAM.
Cree la nueva base de datos, use las declaraciones CREATE TABLE ... LIKE, y luego use las instrucciones INSERT ... SELECT * FROM.
Use mysqldump y vuelva a cargar con ese archivo.
fuente
La forma simple
Cambie al directorio de la base de datos:
Cierre MySQL ... ¡Esto es importante!
De acuerdo, esta forma no funciona para las bases de datos InnoDB o BDB.
Cambiar el nombre de la base de datos:
... o la mesa ...
Reiniciar MySQL
Hecho...
OK, de esta manera no funciona con las bases de datos InnoDB o BDB. En este caso, debe volcar la base de datos y volver a importarla.
fuente
launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist cd /usr/local/var/mysql mv old-name new-name launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
Puede usar este script de shell:
Referencia: ¿Cómo cambiar el nombre de una base de datos MySQL?
Esta funcionando:
fuente
set -e
al comienzo del script, lo que hará que la ejecución finalice en caso de falla y debería mitigar ese problema.Recientemente me he encontrado con una forma muy agradable de hacerlo, funciona con MyISAM e InnoDB y es muy rápido:
No recuerdo dónde lo leí, pero el crédito va a alguien más, no a mí.
fuente
Más simple forma de bala y toda prueba de hacer un completo cambio de nombre (incluida la eliminación de la antigua base de datos al final lo que es un cambio de nombre en lugar de una copia) :
Pasos:
fuente
Esto es lo que uso:
fuente
MySQL no admite el cambio de nombre de una base de datos a través de su interfaz de comandos en este momento, pero puede cambiar el nombre de la base de datos si tiene acceso al directorio en el que MySQL almacena sus bases de datos. Para las instalaciones de MySQL predeterminadas, esto generalmente se encuentra en el directorio de Datos debajo del directorio donde se instaló MySQL. Localice el nombre de la base de datos que desea cambiar de nombre en el directorio Datos y cámbiele el nombre. Sin embargo, cambiar el nombre del directorio podría causar algunos problemas de permisos. Ten cuidado
Nota: debe detener MySQL antes de poder cambiar el nombre de la base de datos
Recomendaría crear una nueva base de datos (utilizando el nombre que desee) y exportar / importar los datos que necesita de la antigua a la nueva. Bastante simple.
fuente
Cuando cambia el nombre de una base de datos en PHPMyAdmin, crea un volcado, luego descarta y recrea la base de datos con el nuevo nombre.
fuente
Bueno, hay 2 métodos:
Método 1: Un método bien conocido para renombrar el esquema de la base de datos es volcar el esquema usando Mysqldump y restaurarlo en otro esquema, y luego descartar el esquema anterior (si es necesario).
De Shell
Aunque el método anterior es fácil, requiere mucho tiempo y espacio. ¿Qué pasa si el esquema es más de 100 GB? Existen métodos en los que puede canalizar los comandos anteriores para ahorrar espacio, sin embargo, no ahorrará tiempo.
Para remediar tales situaciones, hay otro método rápido para cambiar el nombre de los esquemas, sin embargo, se debe tener cuidado al hacerlo.
Método 2: MySQL tiene una muy buena característica para renombrar tablas que incluso funciona en diferentes esquemas. Esta operación de cambio de nombre es atómica y nadie más puede acceder a la tabla mientras se renombra. Esto lleva poco tiempo en completarse ya que cambiar el nombre de una tabla o su esquema es solo un cambio de metadatos. Aquí hay un enfoque de procedimiento para cambiar el nombre:
Cree el nuevo esquema de base de datos con el nombre deseado. Cambie el nombre de las tablas del antiguo esquema al nuevo esquema, utilizando el comando "RENAME TABLE" de MySQL. Descarte el antiguo esquema de la base de datos.
If there are views, triggers, functions, stored procedures in the schema, those will need to be recreated too
. La "RENAME TABLE" de MySQL falla si existen desencadenantes en las tablas. Para remediar esto, podemos hacer lo siguiente:1)
Dump the triggers, events and stored routines in a separate file.
Esto se hace usando los indicadores -E, -R (además de -t -d que vuelca los disparadores) al comando mysqldump. Una vez que se descartan los desencadenantes, tendremos que eliminarlos del esquema para que funcione el comando RENAME TABLE.2) Genere una lista de solo tablas "BASE". Estos se pueden encontrar utilizando una consulta en la
information_schema.TABLES
tabla.3) Volcar las vistas en un archivo de salida. Las vistas se pueden encontrar usando una consulta en la misma
information_schema.TABLES
tabla.4) Suelta los disparadores en las tablas actuales en old_schema.
5) Restaure los archivos de volcado anteriores una vez que todas las tablas "Base" encontradas en el paso # 2 cambien de nombre.
Complejos con los métodos anteriores: es posible que debamos actualizar las SUBVENCIONES para los usuarios de modo que coincidan con el nombre_esquema correcto. Esto podría solucionarse con una simple ACTUALIZACIÓN en las tablas mysql.columns_priv, mysql.procs_priv, mysql.tables_priv, mysql.db actualizando el nombre old_schema a new_schema y llamando a "Flush privileges;". Aunque el "método 2" parece un poco más complicado que el "método 1", esto es totalmente programable. Una secuencia de comandos bash simple para llevar a cabo los pasos anteriores en la secuencia adecuada puede ayudarlo a ahorrar espacio y tiempo mientras renombra los esquemas de la base de datos la próxima vez.
El equipo de Percona Remote DBA ha escrito un script llamado "rename_db" que funciona de la siguiente manera:
Para demostrar el uso de este script, usé un esquema de muestra "emp", creó disparadores de prueba, almacenó rutinas en ese esquema. Intentará cambiar el nombre del esquema de la base de datos utilizando el script, que tarda unos segundos en completarse en lugar del método de volcado / restauración que consume mucho tiempo.
Como puede ver en el resultado anterior, el esquema de la base de datos "emp" fue renombrado como "emp_test" en menos de un segundo. Por último, este es el script de Percona que se usa arriba para el "método 2".
fuente
Pasos:
fuente
Para aquellos que son usuarios de Mac, Sequel Pro tiene una opción de Cambiar nombre de base de datos en el menú Base de datos. http://www.sequelpro.com/
fuente
La mayoría de las respuestas aquí son incorrectas por una de dos razones:
Percona tiene una publicación de blog sobre cómo hacerlo bien: https://www.percona.com/blog/2013/12/24/renaming-database-schema-mysql/
y guión publicado (hecho?) por Simon R Jones que hace lo que se sugiere en esa publicación Arregle un error que encontré en el script. Puedes verlo aqui:
https://gist.github.com/ryantm/76944318b0473ff25993ef2a7186213d
Aquí hay una copia del mismo:
Guárdelo en un archivo llamado
rename_db
y haga que el script sea ejecutable,chmod +x rename_db
luego úselo como./rename_db localhost old_db new_db
fuente
Es posible cambiar el nombre de todas las tablas dentro de una base de datos para que estén bajo otra base de datos sin tener que hacer un volcado completo y restaurar.
Sin embargo, cualquier desencadenante en el objetivo db no será feliz. Tendrá que soltarlos primero y luego recrearlos después del cambio de nombre.
fuente
mysql --batch-uroot -e "call mysql.rename_db('test', 'blah2');" | mysql -uroot
Aviso, debe usar --batch para cambiar el formato a formato sin formato que genera los resultados con formato cero.Aquí hay un archivo por lotes que escribí para automatizarlo desde la línea de comandos, pero para Windows / MS-DOS.
La sintaxis es rename_mysqldb database newdatabase -u [usuario] -p [contraseña]
fuente
El procedimiento almacenado de TodoInTX no funcionó para mí. Aquí está mi puñalada:
fuente
El método más simple es usar el software HeidiSQL. Es gratis y de código abierto. Se ejecuta en Windows y en cualquier Linux con Wine (ejecuta aplicaciones de Windows en Linux, BSD, Solaris y Mac OS X).
Para descargar HeidiSQL, vaya a http://www.heidisql.com/download.php .
Para descargar Wine, vaya a http://www.winehq.org/ .
Para cambiar el nombre de una base de datos en HeidiSQL, simplemente haga clic derecho en el nombre de la base de datos y seleccione 'Editar'. Luego ingrese un nuevo nombre y presione 'OK'.
Es muy simple
fuente
Database "database_name" contains stored routine(s) which cannot be moved.
disparadores (al menos para la base de datos MariDB) se cuentan como rutinas almacenadas. No tenía ningún procedimiento almacenado, pero no pude cambiar el nombre de la base de datos hasta que solté todos los desencadenantes.Para usuarios de mac, puede usar
Sequel Pro
(gratis), que solo ofrece la opción de cambiar el nombre de las Bases de datos. Aunque no elimina el antiguo DB.una vez abierto el DB relevante simplemente haga clic en:
Database
->Rename database...
fuente
Me hizo una pregunta en el servidor falla intentando rodear el tiempo de inactividad en la restauración de grandes bases de datos mediante el uso de MySQL Proxy. No tuve ningún éxito, pero al final me di cuenta de que lo que quería era la funcionalidad RENAME DATABASE porque dump / import no era una opción debido al tamaño de nuestra base de datos.
Hay una funcionalidad RENAME TABLE incorporada en MySQL, así que terminé escribiendo un script Python simple para hacer el trabajo por mí. Lo he publicado en GitHub en caso de que pueda ser útil para otros.
fuente
RENAME TABLE
, tengaPara su conveniencia, a continuación hay un pequeño shellscript que debe ejecutarse con dos parámetros: db-name y new db-name.
Es posible que necesite agregar parámetros de inicio de sesión a las líneas mysql si no utiliza el archivo .my.cnf en su directorio de inicio. Haga una copia de seguridad antes de ejecutar este script.
fuente
Parece que nadie mencionó esto, pero aquí hay otra manera:
entonces para cada tabla haga:
entonces, si quieres,
Este enfoque tendría la ventaja de hacer la transferencia completa en el servidor con tráfico de red casi cero, por lo que será mucho más rápido que un volcado / restauración.
Si tiene procedimientos almacenados / vistas / etc., es posible que también desee transferirlos.
fuente
create database
declaración. ¿De dónde sacaste eso?create table like
sintaxis: dev.mysql.com/doc/refman/5.7/en/create-table-like.html . En cuanto a crear una base de datos como, parece que MySQL eliminó esa cláusula desde entonces.Aquí hay una forma rápida de generar el cambio de nombre del script sql, si tiene muchas tablas para mover.
fuente
ALTER DATABASE
es la forma propuesta de evitar esto por MySQL yRENAME DATABASE
se descarta.Desde 13.1.32 RENAME DATABASE Sintaxis :
Esta declaración se agregó en MySQL 5.1.7, pero se encontró que era peligrosa y se eliminó en MySQL 5.1.23.
fuente
alter database
cambiar el nombre de la base de datos, y la documentación a la que se vinculó no sugiere que sea posible.En MySQL Administrator, haga lo siguiente:
fuente
en phpmyadmin puede cambiar fácilmente el nombre de la base de datos
pida que abandone la tabla anterior y vuelva a cargar los datos de la tabla, haga clic en Aceptar en ambos
Su base de datos cambia de nombre
fuente
Si está utilizando phpMyAdmin , puede ir a la pestaña "operaciones" una vez que haya seleccionado la base de datos que desea renombrar. Luego vaya a la última sección "copiar base de datos a" (o algo así), asigne un nombre y seleccione las opciones a continuación. En este caso, supongo que debe seleccionar las casillas de verificación "estructura y datos" y "crear base de datos antes de copiar" y, finalmente, presionar el botón "ir" en esa sección.
Por cierto, estoy usando phpMyAdmin en español, así que no estoy seguro de cuáles son los nombres de las secciones en inglés.
fuente