O manual do MySQL no MySQL cobre isso.
Normalmente, apenas despejo o banco de dados e reimporto-o com um novo nome. Esta não é uma opção para bancos de dados muito grandes. Aparentemente, RENAME {DATABASE | SCHEMA} db_name TO new_db_name;
faz coisas ruins, existe apenas em algumas versões e é uma má idéia em geral .
Isso precisa funcionar com o InnoDB , que armazena as coisas de maneira muito diferente do MyISAM .
RENAME DATABASE
declaração de trabalho que não tenha nenhum perigo, pois não há uma maneira fácil de executar essa tarefa atualmente. Não há motivo óbvio para que isso tenha sido perigoso na documentação para que eles possam fazer uma substituição. Pelo menos as pessoas colocaram erros de solicitação de recurso em seu site. Por exemplo, bugs.mysql.com/bug.php?id=58593 e bugs.mysql.com/bug.php?id=1698 .Respostas:
Para o InnoDB , o seguinte parece funcionar: crie o novo banco de dados vazio e renomeie cada tabela para o novo banco de dados:
Você precisará ajustar as permissões depois disso.
Para scripts em um shell, você pode usar um dos seguintes:
OU
Notas:
-p
e a senha. Se o seu banco de dados não tiver senha, remova a-u username -ppassword
peça.Se alguma tabela tiver um gatilho, ela não poderá ser movida para outro banco de dados usando o método acima (resultará em
Trigger in wrong schema
erro). Se for esse o caso, use uma maneira tradicional de clonar um banco de dados e solte o antigo:mysqldump old_db | mysql new_db
Se você tiver procedimentos armazenados, poderá copiá-los depois:
mysqldump -R old_db | mysql new_db
fonte
DROP VIEW
e emCREATE VIEW
vez disso. Desajeitado, sim. Você pode fazer ummysqldump
para mover as visualizações, depois de mover todas as tabelas pela primeira vez. Observe também queSHOW TABLES
mostrará tabelas E visualizações, portanto, tenha cuidado.RENAME DATABASE
foi removido: dev.mysql.com/worklog/task/?id=4030Use estes poucos comandos simples:
Ou, para reduzir a E / S, use o seguinte, conforme sugerido por @Pablo Marin-Garcia:
fonte
-p<password>
em vez de-p
em toda parte assim as declarações executado sem um prompt aparecer .Enter password: Enter password:
Parece ter uma senha, mas não as duas. Estou faltando um detalhe?--routines
flag aos comandos do mysqldump, para garantir que os procedimentos armazenados sejam copiados.Eu acho que a solução é mais simples e foi sugerida por alguns desenvolvedores. O phpMyAdmin possui uma operação para isso.
No phpMyAdmin, selecione o banco de dados que você deseja selecionar. Nas guias existe uma chamada Operações, vá para a seção Renomear. Isso é tudo.
Como muitos sugeriram, ele cria um novo banco de dados com o novo nome, despeja todas as tabelas do banco de dados antigo no novo banco de dados e descarta o banco de dados antigo.
fonte
Você pode usar o SQL para gerar um script SQL para transferir cada tabela no banco de dados de origem para o banco de dados de destino.
Você deve criar o banco de dados de destino antes de executar o script gerado a partir do comando.
Você pode usar um desses dois scripts (sugeri originalmente o primeiro e alguém "melhorou" minha resposta para usar
GROUP_CONCAT
. Faça a sua escolha, mas prefiro o original):ou
($ 1 e $ 2 são origem e destino, respectivamente)
Isso irá gerar um comando SQL que você precisará executar.
Observe que
GROUP_CONCAT
tem um limite de tamanho padrão que pode ser excedido para bancos de dados com um grande número de tabelas. Você pode alterar esse limite executandoSET SESSION group_concat_max_len = 100000000;
(ou outro número grande).fonte
Emulando o
RENAME DATABASE
comando ausente no MySQL:Crie as consultas de renomeação com:
Execute essa saída
Foi extraído de Emulating The Missing RENAME DATABASE Command no MySQL .
fonte
Três opções:
Crie o novo banco de dados, desative o servidor, mova os arquivos de uma pasta para o outro e reinicie o servidor. Observe que isso só funcionará se TODAS as suas tabelas forem MyISAM.
Crie o novo banco de dados, use as instruções CREATE TABLE ... LIKE e, em seguida, use as instruções INSERT ... SELECT * FROM.
Use o mysqldump e recarregue com esse arquivo.
fonte
A maneira simples
Mude para o diretório do banco de dados:
Encerre o MySQL ... Isso é importante!
Ok, esse caminho não funciona para bancos de dados InnoDB ou BDB.
Renomeie o banco de dados:
... ou a mesa ...
Reinicie o MySQL
Feito...
OK, dessa maneira não funciona com os bancos de dados InnoDB ou BDB. Nesse caso, você precisa despejar o banco de dados e importá-lo novamente.
fonte
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
Você pode usar este script de shell:
Referência: Como renomear um banco de dados MySQL?
Está funcionando:
fonte
set -e
ao início do script, o que fará com que a execução seja encerrada em caso de falha e deve atenuar esse problema.Só recentemente me deparei com uma maneira muito legal de fazer isso, trabalha com MyISAM e InnoDB e é muito rápido:
Não me lembro de onde li, mas o crédito é para outra pessoa, não para mim.
fonte
A maneira mais simples de fazer uma renomeação completa à prova de balas e ilusões (incluindo descartar o banco de dados antigo no final, para que seja uma renomeação em vez de uma cópia) :
Passos:
fonte
Isto é o que eu uso:
fonte
O MySQL não suporta a renomeação de um banco de dados através de sua interface de comando no momento, mas você pode renomear o banco de dados se tiver acesso ao diretório em que o MySQL armazena seus bancos de dados. Para instalações padrão do MySQL, isso geralmente está no diretório Data, no diretório em que o MySQL foi instalado. Localize o nome do banco de dados que você deseja renomear no diretório Data e renomeie-o. Renomear o diretório pode causar alguns problemas de permissão. Estar ciente.
Nota: Você deve parar o MySQL antes de renomear o banco de dados
Eu recomendaria criar um novo banco de dados (usando o nome desejado) e exportar / importar os dados necessários do antigo para o novo. Bem simples.
fonte
Quando você renomeia um banco de dados no PHPMyAdmin, ele cria um dump, elimina e recria o banco de dados com o novo nome.
fonte
Bem, existem 2 métodos:
Método 1: Um método conhecido para renomear o esquema do banco de dados é despejar o esquema usando o Mysqldump, restaurá-lo em outro esquema e, em seguida, descartar o esquema antigo (se necessário).
De Shell
Embora o método acima seja fácil, consome tempo e espaço. E se o esquema tiver mais de 100 GB? Existem métodos em que você pode canalizar os comandos acima juntos para economizar espaço, mas isso não economizará tempo.
Para remediar essas situações, existe outro método rápido para renomear esquemas, no entanto, é preciso tomar alguns cuidados ao fazê-lo.
Método 2: O MySQL possui um recurso muito bom para renomear tabelas que até funciona em diferentes esquemas. Essa operação de renomeação é atômica e ninguém mais pode acessar a tabela enquanto ela está sendo renomeada. Isso demora um pouco para ser concluído, pois alterar o nome de uma tabela ou seu esquema é apenas uma alteração de metadados. Aqui está uma abordagem processual ao renomear:
Crie o novo esquema do banco de dados com o nome desejado. Renomeie as tabelas do esquema antigo para o novo esquema, usando o comando “RENAME TABLE” do MySQL. Solte o esquema antigo do banco de dados.
If there are views, triggers, functions, stored procedures in the schema, those will need to be recreated too
. “RENAME TABLE” do MySQL falhará se houver gatilhos nas tabelas. Para remediar isso, podemos fazer o seguinte:1)
Dump the triggers, events and stored routines in a separate file.
Isso foi feito usando os sinalizadores -E, -R (além de -t -d, que despeja os gatilhos) no comando mysqldump. Depois que os gatilhos forem despejados, precisaremos removê-los do esquema, para que o comando RENAME TABLE funcione.2) Gere uma lista apenas das tabelas "BASE". Estes podem ser encontrados usando uma consulta na
information_schema.TABLES
tabela.3) Despejar as visualizações em um arquivo de saída. As visualizações podem ser encontradas usando uma consulta na mesma
information_schema.TABLES
tabela.4) Solte os gatilhos nas tabelas atuais no old_schema.
5) Restaure os arquivos de despejo acima depois que todas as tabelas "Base" encontradas na etapa 2 forem renomeadas.
Complexidades com os métodos acima: Talvez seja necessário atualizar os GRANTS para os usuários para que eles correspondam ao schema_name correto. Isso poderia ser corrigido com uma simples atualização de tabelas mysql.columns_priv, mysql.procs_priv, mysql.tables_priv, mysql.db, atualizando o nome old_schema para new_schema e chamando “Flush privilégios;”. Embora o "método 2" pareça um pouco mais complicado que o "método 1", isso é totalmente programável. Um script simples do bash para executar as etapas acima na sequência correta pode ajudar a economizar espaço e tempo e renomear os esquemas do banco de dados da próxima vez.
A equipe do DBA remoto da Percona escreveu um script chamado "rename_db" que funciona da seguinte maneira:
Para demonstrar o uso desse script, usou um esquema de exemplo "emp", criou gatilhos de teste, rotinas armazenadas nesse esquema. Tentará renomear o esquema do banco de dados usando o script, que leva alguns segundos para ser concluído, em vez do método de despejo / restauração demorado.
Como você pode ver na saída acima, o esquema do banco de dados "emp" foi renomeado para "emp_test" em menos de um segundo. Por fim, este é o script da Percona usado acima para o "método 2".
fonte
Passos :
fonte
Para quem é usuário de Mac, o Sequel Pro tem uma opção Renomear banco de dados no menu Banco de dados. http://www.sequelpro.com/
fonte
A maioria das respostas aqui está errada por um de dois motivos:
A Percona tem um post sobre como fazer isso bem: https://www.percona.com/blog/2013/12/24/renaming-database-schema-mysql/
e script postado (feito?) por Simon R Jones que faz o que é sugerido nesse post. Corrigi um bug que encontrei no script. Você pode vê-lo aqui:
https://gist.github.com/ryantm/76944318b0473ff25993ef2a7186213d
Aqui está uma cópia:
Salve-o em um arquivo chamado
rename_db
e torne o script executávelchmod +x rename_db
e use-o como./rename_db localhost old_db new_db
fonte
É possível renomear todas as tabelas em um banco de dados para estar em outro banco de dados sem precisar executar um despejo e restauração completos.
No entanto, quaisquer gatilhos no banco de dados alvo não serão felizes. Você precisará descartá-los primeiro e depois recriá-los após a renomeação.
fonte
mysql --batch-uroot -e "call mysql.rename_db('test', 'blah2');" | mysql -uroot
Observe, você deve usar --batch para alterar a formatação para a formatação bruta, que gera os resultados com formatação zero.Aqui está um arquivo em lotes que eu escrevi para automatizá-lo na linha de comando, mas para Windows / MS-DOS.
Sintaxe é renomear_mysqldb banco de dados newdatabase -u [user] -p [password]
fonte
O procedimento armazenado do TodoInTX não funcionou muito bem para mim. Aqui está minha facada:
fonte
O método mais simples é usar o software HeidiSQL. É gratuito e de código aberto. É executado no Windows e em qualquer Linux com Wine (execute aplicativos do Windows no Linux, BSD, Solaris e Mac OS X).
Para baixar o HeidiSQL, vá para http://www.heidisql.com/download.php .
Para baixar o Wine, vá para http://www.winehq.org/ .
Para renomear um banco de dados no HeidiSQL, clique com o botão direito do mouse no nome do banco de dados e selecione 'Editar'. Em seguida, insira um novo nome e pressione 'OK'.
É tão simples.
fonte
Database "database_name" contains stored routine(s) which cannot be moved.
Triggers (pelo menos para o banco de dados MariDB) são contados como rotinas armazenadas. Eu não tinha nenhum procedimento armazenado, mas não consegui renomear o banco de dados até eu soltar todos os gatilhos.Para usuários de mac, você pode usar
Sequel Pro
(gratuito), que fornece a opção de renomear bancos de dados. Embora não exclua o banco de dados antigo.Depois de abrir o banco de dados relevante, basta clicar em:
Database
->Rename database...
fonte
Fiz uma pergunta sobre a falha do servidor, tentando evitar o tempo de inatividade ao restaurar bancos de dados muito grandes usando o MySQL Proxy. Não tive sucesso, mas percebi no final o que eu queria era a funcionalidade RENAME DATABASE porque despejo / importação não era uma opção devido ao tamanho do nosso banco de dados.
Há uma funcionalidade RENAME TABLE embutida no MySQL, então acabei escrevendo um script Python simples para fazer o trabalho por mim. Eu o publiquei no GitHub , caso possa ser útil para outras pessoas.
fonte
RENAME TABLE
, que esta declaração foi adicionada no MySQL 5.1.7, mas foi considerada perigosa e removida no MySQL 5.1.23.Para sua comodidade, abaixo está um pequeno shellscript que deve ser executado com dois parâmetros: db-name e new db-name.
Você pode precisar adicionar parâmetros de login às linhas do mysql se você não usar o arquivo .my.cnf no seu diretório home. Faça um backup antes de executar este script.
fonte
Parece que ninguém mencionou isso, mas aqui está outra maneira:
então, para cada tabela, faça:
então, se você quiser,
Essa abordagem teria a vantagem de fazer toda a transferência no servidor com tráfego de rede quase zero, portanto, será muito mais rápido que um despejo / restauração.
Se você possui procedimentos / exibições / etc armazenados, convém transferi-los também.
fonte
create database
declaração? De onde você tirou isso?create table like
sintaxe: dev.mysql.com/doc/refman/5.7/en/create-table-like.html . Quanto à criação de banco de dados, parece que o MySQL abandonou essa cláusula desde então.Aqui está uma maneira rápida de gerar um script sql de renomeação, se você tiver muitas tabelas para mover.
fonte
ALTER DATABASE
é a maneira proposta para contornar isso pelo MySQL eRENAME DATABASE
é descartada.De 13.1.32 RENAME DATABASE Sintaxe :
Esta declaração foi adicionada no MySQL 5.1.7, mas foi considerada perigosa e foi removida no MySQL 5.1.23.
fonte
alter database
renomear o próprio banco de dados, e a documentação à qual você vinculou não sugere que seja possível.No MySQL Administrator, faça o seguinte:
fonte
no phpmyadmin você pode renomear facilmente o banco de dados
peça para soltar a tabela antiga e recarregar os dados da tabela, clique em OK nos dois
Seu banco de dados foi renomeado
fonte
Se você estiver usando o phpMyAdmin, poderá ir para a guia "operações" depois de selecionar o banco de dados que deseja renomear. Em seguida, vá para a última seção "copiar banco de dados para" (ou algo parecido), dê um nome e selecione as opções abaixo. Nesse caso, acho que você deve selecionar as caixas de seleção "estrutura e dados" e "criar banco de dados antes de copiar" e, finalmente, pressionar o botão "ir" nessa seção.
A propósito, estou usando o phpMyAdmin em espanhol, então não tenho certeza de quais são os nomes das seções em inglês.
fonte