Como podemos restaurar o banco de dados mysql com nome diferente do arquivo mysqldump. Eu não quero abrir o arquivo de despejo e editá-lo. Algum outro método melhor?
relate perguntas
-
Existem ferramentas de benchmarking do MySQL? [fechado]
-
Onde posso encontrar o log lento do mysql?
-
Como posso otimizar um mysqldump de um banco de dados grande?
-
Quando é o momento certo para usar o MariaDB em vez do MySQL e por quê?
-
Como um grupo pode rastrear alterações no esquema do banco de dados?
Você pode deixar o mysqldump criar o dump de forma que ele não crie ou selecione o banco de dados.
EXEMPLO: Você está despejando o banco de dados db1 e carregando-o no banco de dados db2
Isso colocará os comandos CREATE DATABASE e USE no dump
Isso não colocará os comandos CREATE DATABASE e USE no dump ( é isso que você quer )
Você pode carregá-lo em outro banco de dados (como db2) de uma das quatro (4) maneiras:
OPÇÃO 1
OPÇÃO 2
OPÇÃO 3
OPÇÃO 4
De uma chance !!!
Eu sou um grande fã de dump, 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ê quiser despejar o banco de dados
MYDATABASE
.então use sed para substituir o nome do banco de dados antigo 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 no novo banco de dados 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, então, conctrete maneiras de evitar isso é.
1) Grep para isso no dump, antes de alterá-lo, assim.
e
2) podemos adicionar alguns ` para torná-lo mais seguro assim:
se mais alguém tiver sugestões concretas, ficarei feliz em editar minha resposta em mais 4 anos.
Se você fizer um dump usando as duas regras a seguir:
--databases
,--database
, e simplesmente coloque o nome do banco de dados no final do comando sem essas opções.--no-create-db
Se você fizer o seguinte, o mysqldump criará o SQL sem fazer referência ao banco de dados, então você poderá usar o novo nome do banco de dados no final do comando mysql durante a importação!
Já fiz isso uma vez, há muito tempo.
Ao exportar todos os seus dados, existe a opção de definir o nome do banco de dados no início do arquivo, algo como: "usar banco de dados x"
Assim, você pode alterar esta declaração.
Se o arquivo é o que você tem em mãos e você está manipulando a partir de um shell/console, eu usaria
sed
para fazer substituições de strings em linhas começando comCREATE DABATASE
,CREATE TABLE
eUSE
opcionalmente--
(comentários mysqldump)Substituindo o nome do banco de dados nas linhas que correspondem aos comentários Create Database, Create Table, Use e mysqldump
É claro que, como muitas das respostas aqui mencionadas, é mais fácil se o backup do mysqldump não contiver uma linha CREATE DATABASE e uma linha USE. Ou seja, as opções
--all-databases
,--databases
ou suas versões curtas-A
ou-B
não foram utilizadas.Aqui está o comando que restauraria apenas o banco de dados nomeado
$DB_FROM
do$BACKUP_FILE
arquivo de backup, com o nome do banco de dados restaurado$DB_TO
(em vez de$DB_FROM
):Minha resposta foi inspirada por esta , bem como por esta e por esta página da web .
Eu respondi a uma pergunta semelhante aqui
Se você estiver usando macOS e MySQLWorkbench. Primeiro exporte o banco de dados para um único arquivo .sql. Em seguida, use o utilitário "Importação de dados". Ele mostrará um erro porque o novo nome do banco de dados não corresponde ao exportado. Você tem que copiar todo o comando de execução no log e:
Exemplo: sudo /Applications/MySQLWorkbench.app/Contents/MacOS/mysql --protocol=tcp --host=localhost --user=root --port=3306 --default-character-set=utf8 --comments --database =ion_development < "/Users/2359media/dumps/Dump20201110.sql"
Você pergunta se pode "restaurar o banco de dados mysql com nome diferente do arquivo mysqldump".
A resposta é que você NÃO deve restaurar para outro banco de dados se tiver definido triggers com nome chema explícito, devido a um bug do mysqldump, pelo menos não sem transformar o dump (veja abaixo).
(Essa é a resposta curta. Você pode não gostar, pode votar negativamente, mas não tem justificativa para excluí-lo porque responde à pergunta, embora pela negativa, com um fato crítico a ser conhecido).
Quando triggers são definidos como (CREATE TRIGGER mydbname.mytriggername ...) então mysqldump incluirá este "mydbname" no dump independente de quaisquer opções de dump.
Você não pode detectar essa nuance no nome do gatilho de information_schema.triggers caso queira reparar primeiro.
Isso torna o despejo não restaurável no nome do banco de dados alternativo, ou pior, pode restaurar um gatilho no lugar errado se esse esquema existir.
Para continuar a resposta, se você não tiver gatilhos ou eles não estavam usando nomes de esquema no momento da definição, você poderá restaurar um despejo feito sem o --databases. (como as respostas acima mencionadas).
Caso contrário, há uma maneira de limpar o dump antes de importá-lo. Você teria que 'sed' para excluir o nome do esquema:
Como praticamente ninguém inspecionaria o dump para este problema, NÃO é recomendado importar dumps cegamente das instruções fornecidas aqui; você pode danificar um ambiente de prod.