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 parasilent 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.