Como renomear um banco de dados MySQL?

48

Como renomear um banco de dados MySQL?

O manual online do MySQL falou sobre o comando RENAME DATABASE (esta página de documentação foi removida pela Oracle há algum tempo):

Esta declaração foi adicionada no MySQL 5.1.7, mas foi considerada perigosa e foi removida no MySQL 5.1.23.

Então, como proceder? A lógica: começamos com um nome de código para o projeto e queremos que o nome do banco de dados agora reflita o nome definitivo do projeto.

nalply
fonte
Todas as quatro respostas fazem sentido. É uma pergunta com muitas soluções possíveis.
nalply

Respostas:

59

A partir desta postagem de blog de Ilan Hazan:

No MySQL não há suporte para renomeação de banco de dados. Para renomear um banco de dados MySQL, você pode fazer um dos seguintes:

  1. Crie um novo banco de dados e renomeie todas as tabelas no banco de dados antigo para estar no novo banco de dados:

    CREATE database new_db_name;
    RENAME TABLE db_name.table1 TO new_db_name, db_name.table2 TO new_db_name;
    DROP database db_name;
  2. No shell do Linux, use o mysqldump para fazer backup do banco de dados antigo e, em seguida, restaure o banco de dados despejado com um novo nome usando o utilitário MySQL. Por fim, use o comando drop database para descartar o banco de dados antigo. Esta opção pode ter um desempenho ruim para bancos de dados grandes.

    mysqldump -uxxxx -pxxxx -h xxxx db_name > db_name_dump.sql
    mysql -uxxxx -pxxxx -h xxxx -e "CREATE DATABASE new_db_name"
    mysql -uxxxx -pxxxx -h xxxx new_db_name < db_name_dump.sql
    mysql -uxxxx -pxxxx -h xxxx -e "DROP DATABASE db_name"
    
  3. Escreva um script Linux simples (minha solução favorita)

    #!/bin/bash
    
    dbuser=xxxx
    dbpass=xxxx
    olddb=xxxx
    newdb=xxxx
    
    mysqlconn="mysql -u $dbuser -p$dbpass -h localhost"
    
    $mysqlconn -e "CREATE DATABASE $newdb"
    params=$($mysqlconn -N -e "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE table_schema='$olddb'")
    
    for name in $params; do
          $mysqlconn -e "RENAME TABLE $olddb.$name to $newdb.$name";
          echo "Renamed $olddb.$name to $newdb.$name";
    done;
    
    #$mysqlconn -e "DROP DATABASE $olddb"
  4. Se todas as suas tabelas forem MyISAM, você poderá renomear o nome antigo da pasta do banco de dados:

    1. Desligue o servidor MySQL,
    2. Renomeie o nome da pasta do banco de dados para o novo nome,
    3. Inicie o servidor MySQL.
alexeit
fonte
Aqui está uma forma alternativa de gerar comando RENAME TABLE no SQL dentro de MySQL diretamente: blog.marceloaltmann.com/how-to-rename-a-database-in-mysql
Yves Martin
Isso ajudará a criar uma consulta para a primeira solução. Basta copiar os resultados da pasta atrás de RENAME TABLE SELECT CONCAT('olddb.', TABLE_NAME, ' TO newdb.', TABLE_NAME, ',') FROM INFORMATION_SCHEMA.TABLES WHERE table_schema='olddb';;
Syclone 28/07
Mas Se você não inserir os dados no novo banco de dados, eles serão perdidos
rainman
Obrigado. Esta é a melhor resposta. Muito obrigado!
Typelogic 07/0318
Esse script é super arrumado, elaborado imediatamente no MariaDB 10.1.
Luc
12

O MySQL meio que é péssimo por isso. A única solução sólida e confiável é usar phpMyAdmin.

Login-> click Scheme-> click Operations-> encontre Rename database to:-> escreva NewName> click Go.

Tão simples como isso. Todas as permissões são transferidas.

spencerthayer
fonte
6
+1 para uma solução GUI, mas o simples comandos e scripts na resposta wiki comunidade também são perfeitamente "sólida e confiável"
Will Sheppard
7

Encontrei uma solução muito simples: Desligue o MySQL, renomeie o diretório do banco de dados e reinicie. Isso é tudo!

É um pouco perigoso se você tiver código SQL ou dados referentes ao nome antigo. Então você precisa alterar isso também antes de reiniciar o aplicativo. Mas eu não precisava fazer isso, mas YMV.

O Google fornece algumas dicas como essas duas:

https://stackoverflow.com/questions/67093/how-do-i-quickly-rename-a-mysql-database-change-schema-name

http://www.delphifaq.com/faq/databases/mysql/f574.shtml

nalply
fonte
5

Eu costumo criar um novo banco de dados e, em seguida, despejar as tabelas do antigo em um arquivo .sql (com mysqldump), editar o arquivo, fazer algum tipo de s/old_database/new_database/ge reimportá-lo para o novo banco de dados.
Provavelmente não é a melhor maneira de fazê-lo, mas funciona.

Tom O'Connor
fonte
2

Se você tiver chance de usar uma Ferramenta de Gerenciamento MySQL (por exemplo, phpMyAdmin), poderá renomeá-la facilmente, pois elas criarão a consulta para você.

No phpMyAdmin, eles também criam cada tabela e inserem os dados "INSERT INTO ... SELECT * FROM ...". Então, encadeando eles copiam os dados.

Se você não puder fazer isso, recomendo fazer um despejo e reimportar o arquivo sql para um novo banco de dados.

Boa sorte!

Atenciosamente, Ben.

Benedikt Niessen
fonte
2

Eu usei o seguinte método para renomear o banco de dados

  1. faça backup do arquivo usando o mysqldump ou qualquer ferramenta de banco de dados, por exemplo, heidiSQL, administrador do mysql, etc.

  2. Abra o arquivo de backup (por exemplo, backupfile.sql) em algum editor de texto.

  3. Pesquise e substitua o nome do banco de dados e salve o arquivo.

  4. Restaurar o arquivo sql editado

Adarsha
fonte