Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como renomear um banco de dados no MySQL


Em alguns casos, pode ser desejável alterar rapidamente o nome de um banco de dados MySQL. Enquanto costumava existir um simples RENAME DATABASE comando em versões mais antigas do MySQL que se destinava a realizar esta tarefa, RENAME DATABASE desde então foi removido de todas as versões mais recentes para evitar riscos de segurança.

Em vez disso, exploraremos brevemente alguns métodos opcionais que podem ser usados ​​para renomear seu banco de dados MySQL de forma rápida e segura.

Dumping e reimportação


Ao trabalhar com um banco de dados relativamente pequeno, o método mais rápido normalmente é usar o mysqldump comando shell para criar uma cópia de despejo de todo o banco de dados e, em seguida, importe todos os dados para o banco de dados recém-criado com o nome apropriado.

Comece emitindo o seguinte mysqldump comando do seu prompt de shell, substituindo o username apropriado , password e oldDbName valores. mysqldump é usado para criar backups físicos de um banco de dados, então podemos usar essa cópia para importar os dados de volta para um novo banco de dados.
$ mysqldump -u username -p"password" -R oldDbName > oldDbName.sql

Estamos usando o -p sinalizador imediatamente seguido por nossa senha para se conectar ao banco de dados (sem espaço entre eles) e evitar prompts de entrada de senha ao emitir esses comandos. Certifique-se de deixar as aspas ao redor porque as senhas com caracteres exclusivos podem causar problemas de execução. O -R flag também é importante e diz ao mysqldump para copiar procedimentos e funções armazenados junto com os dados normais do banco de dados.

Em seguida, use o mysqladmin comando para criar um novo banco de dados:
$ mysqladmin -u username -p"password" create newDbName

Por fim, com o novo banco de dados criado, use mysql para importar o arquivo dump que criamos para o novo banco de dados.
$ mysql -u username -p"password" newDbName < oldDbName.sql

Três comandos básicos e seu novo banco de dados foi criado. Depois de verificar se tudo está conforme o esperado, você pode prosseguir com a remoção do banco de dados antigo.

Renomeando tabelas com InnoDB


Se você estiver usando o MySQL versão 5.5 (ou superior), provavelmente está usando o mecanismo de armazenamento InnoDB, o que simplifica bastante a tarefa de renomear bancos de dados.

Resumindo, você pode usar o RENAME TABLE comando dentro de um prompt do MySQL para alterar efetivamente o nome do banco de dados de uma tabela em particular, mantendo o nome da tabela intacto. No entanto, isso requer que o banco de dados com o novo nome já exista, então comece criando um novo banco de dados usando o mysqladmin comando shell como visto acima.

Por exemplo, se já temos um catalog banco de dados que queremos renomear para library , primeiro criaríamos a nova library base de dados:
$ mysqladmin -u username -p"password" create library

Agora conecte-se ao mysql prompt e emita o seguinte MySQL RENAME TABLE declaração para uma tabela de sua escolha:
mysql> RENAME TABLE catalog.books TO library.books;

Acabamos de mover a totalidade dos books tabela do catalog banco de dados para nossa nova library base de dados. Este comando pode ser executado manualmente para todas as tabelas relevantes conforme desejado, ou podemos simplificar a tarefa com um script de shell como visto abaixo.

Usando um script de comando Shell


Para todos os bancos de dados, exceto os menores, emitindo manualmente RENAME TABLE comandos para cada tabela não serão muito práticos nem eficientes, mas felizmente podemos usar um comando shell simples usando o mysql utilitário para percorrer todas as tabelas em nosso banco de dados antigo e renomeá-las, movendo-as para o novo banco de dados.

Esta é a estrutura básica do comando:
$ mysql -u dbUsername -p"dbPassword" oldDatabase -sNe 'show tables' | while read table; do mysql -u dbUsername -p"dbPassword" -sNe "RENAME TABLE oldDatabase.$table TO newDatabase.$table"; done

Assim, para nossa mudança do antigo catalog banco de dados para a nova library database, mudaríamos a declaração da seguinte forma:
$ mysql -u dbUsername -p"dbPassword" catalog -sNe 'show tables' | while read table; do mysql -u dbUsername -p"dbPassword" -sNe "RENAME TABLE catalog.$table TO library.$table"; done

Também adicionamos alguns sinalizadores aos nossos comandos:
  • -s é o sinalizador para silent mode portanto, há menos saída para o shell.
  • -N impede a saída de nomes de coluna dos resultados.
  • -e indica a instrução que segue o -e sinalizador deve ser executado então o shell é encerrado. Isso significa que as instruções 'show tables' e "RENAME TABLE catalog.$table TO library.$table" são executados como instruções SQL normais, conforme desejado.

Isso é tudo o que há para isso. Seu banco de dados MySQL agora está efetivamente renomeado.