Como podemos restaurar o banco de dados mysql com nome diferente do arquivo mysqldump. Não quero abrir o arquivo de despejo e editá-lo. Algum outro método melhor?
41
Você pode permitir que o mysqldump crie o dump de forma que ele não crie ou selecione o banco de dados.
EXEMPLO: Você está descartando o banco de dados db1 e carregando-o no banco de dados db2
Isso colocará os comandos CREATE DATABASE e USE no dump
mysqldump -u... -p... --routines --triggers --databases db1 > /root/db1.sql
Isso não colocará os comandos CREATE DATABASE e USE no dump ( é isso que você deseja )
mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql
Você pode carregá-lo em outro banco de dados (como db2) de uma das quatro (4) maneiras:
OPÇÃO 1
$ mysqldump -u... -p... --routines --triggers db1 | mysql -u... -p... -A -Ddb2
OPÇÃO 2
$ mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql
$ mysql -u... -p... -A -Ddb2 < /root/db1.sql
OPÇÃO 3
$ mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql
$ mysql -u... -p... -A -Ddb2
mysql> source /root/db1.sql
OPÇÃO 4
$ mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql
$ mysql -u... -p... -A
mysql> use db2
mysql> source /root/db1.sql
De uma chance !!!
-Ddb2
não deve ter um hífen na frente. Pelo menos, recebi um erro de sintaxe do MySQL quando o incluí.ALTER DATABASE ... CHARACTER SET ...
nele, o que está interrompendo minha importação. Edit: Oracle está basicamente ignorando o bug .Sou um grande fã de despejar, editar e inserir. mas você não precisa abrir o arquivo de texto (arquivo de despejo) para alterá-lo (isso é especialmente útil quando tem vários milhões de linhas). se você deseja despejar o banco de dados
MYDATABASE
.use sed para substituir o antigo nome do banco de dados por um novo como este
então você pode simplesmente criar o novo banco de dados e importá-lo novamente, e ele criará todas as tabelas com os novos dados na MYNEWDATABASE '
Edit: Como algumas pessoas legais na seção de comentários apontaram, isso pode ser perigoso, se alguns dos dados também forem alterados por isso acima, portanto, para restringir maneiras de evitar isso.
1) Grep para isso no despejo, antes de alterá-lo, assim.
e
2) podemos adicionar alguns `para torná-lo mais seguro assim:
se alguém tiver sugestões concretas, fico feliz em editar minha resposta em mais quatro anos.
fonte
sed -i 's/MYDATABASE/MYNEWDATABASE/g' mydump.sql
), verifique todas as ocorrências de MYDATABASE comcat mydump.sql | grep "MYDATABASE"
para garantir que apenas o nome do banco de dados seja alterado, outros dados permanecem intocados.sed -i 's/`MYDATABASE`/`MYNEWDATABASE`/g' mydump.sql
# edição a vapor potencialmente mais segura. meu dump de banco de dados não contém nenhuma instrução USE ou CREATE DATABASE, mas o nome do banco de dados está em comentários, visualizações e gatilhos sql (MySQL 5.7). Isso NÃO substitui o nome do banco de dados nos comentários, mas eles não têm efeito no banco de dados resultante. Isto funcionou bem para mim.Eu já fiz isso uma vez, há muito tempo.
Quando você exporta todos os seus dados, existe uma opção para definir o nome do banco de dados no início do arquivo, algo como: "use database x"
Então, você pode alterar esta declaração.
fonte
Se o arquivo é o que você tem na mão e você está manipulando-o a partir de um shell / console, eu usaria
sed
para fazer substituições de corda em linhas começando comCREATE DABATASE
,CREATE TABLE
,USE
e optionnally--
(comentários mysqldump)Substituindo o nome db nas linhas que correspondem aos comentários Criar banco de dados, Criar tabela, Usar e mysqldump
Obviamente, como muitas das respostas mencionadas aqui, é mais fácil se o backup do mysqldump não contiver uma linha CREATE DATABASE e uma linha USE. Significado das opções
--all-databases
,--databases
ou suas versões curtas-A
ou-B
não foram utilizados.fonte
--no-create-db
e sem--database
ou--databases
.Se você fizer um dump usando as duas regras a seguir:
--databases
,--database
e simplesmente basta colocar o nome da base ao final do comando sem estas opções.--no-create-db
Se você fizer o seguinte, o mysqldump criará o SQL sem fazer referência ao banco de dados, e poderá usar o novo nome do banco de dados no final do seu comando mysql durante a importação!
fonte
--no-create-db
e sem--database
ou--databases
.Aqui está o script de shell que permitirá adicionar sufixo / afixo a todos os nomes de esquema em tempo real.
http://snippets.dzone.com/posts/show/13749
fonte