AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 8869
Accepted
Praveen Prasannan
Praveen Prasannan
Asked: 2011-12-07 23:33:46 +0800 CST2011-12-07 23:33:46 +0800 CST 2011-12-07 23:33:46 +0800 CST

Restaurar banco de dados mysql com nome diferente

  • 772

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?

mysql backup restore
  • 8 8 respostas
  • 120586 Views

8 respostas

  • Voted
  1. Best Answer
    RolandoMySQLDBA
    2011-12-08T08:10:01+08:002011-12-08T08:10:01+08:00

    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

    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ê quer )

    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 !!!

    • 80
  2. Sverre
    2014-07-04T02:32:18+08:002014-07-04T02:32:18+08:00

    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.

    mysqldump MYDATABASE > mydump.sql
    

    então use sed para substituir o nome do banco de dados antigo por um novo como este

    sed -i 's/MYDATABASE/MYNEWDATABASE/g' mydump.sql
    

    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'

    mysqladmin create MYNEWDATABASE
    
    mysql MYNEWDATABASE < mydump.sql
    

    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.

    cat mydump.sql | grep "MYDATABASE"
    

    e

    2) podemos adicionar alguns ` para torná-lo mais seguro assim:

    sed -i 's/`MYDATABASE`/`MYNEWDATABASE`/g' mydump.sql
    

    se mais alguém tiver sugestões concretas, ficarei feliz em editar minha resposta em mais 4 anos.

    • 11
  3. Neo
    2014-12-28T13:45:14+08:002014-12-28T13:45:14+08:00

    Se você fizer um dump usando as duas regras a seguir:

    1. Não use opções como --databases, --database, e simplesmente coloque o nome do banco de dados no final do comando sem essas opções.
    2. Inclua a opção--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!

    mysqldump  --no-create-db old_db_name --single-transaction --compress --order-by-primary --host old_db_host -u old_db_user -pOld_db_password | mysql --host new_host -u new_user -pnewpassword new_db_name
    
    • 5
  4. Victor
    2011-12-08T03:44:36+08:002011-12-08T03:44:36+08:00

    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.

    • 3
  5. bksunday
    2015-07-21T15:29:51+08:002015-07-21T15:29:51+08:00

    Se o arquivo é o que você tem em mãos e você está manipulando a partir de um shell/console, eu usaria sedpara fazer substituições de strings em linhas começando com CREATE DABATASE, CREATE TABLEe USEopcionalmente --(comentários mysqldump)

    Substituindo o nome do banco de dados nas linhas que correspondem aos comentários Create Database, Create Table, Use e mysqldump

    dbfile="yoursqldumpfile.sql";
    dbname="current_db_name";
    dbnewname="new_db_name";
    dbnewfile="/tmp/$dbnewname.sql";
    cat $dbfile | sed "/^CREATE DATABASE/ s=$dbname=$dbnewname=" | sed "/^CREATE TABLE/ s=$dbname=$dbnewname=" | sed "/^USE / s=$dbname=$dbnewname=" | sed "/^-- / s=$dbname=$dbnewname=" > $dbnewfile
    


    É 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, --databasesou suas versões curtas -Aou -Bnão foram utilizadas.

    • 3
  6. Anthony O.
    2021-09-29T10:39:43+08:002021-09-29T10:39:43+08:00

    Aqui está o comando que restauraria apenas o banco de dados nomeado $DB_FROMdo $BACKUP_FILEarquivo de backup, com o nome do banco de dados restaurado $DB_TO(em vez de $DB_FROM):

    (sed '/^-- Current Database: `/q' "$BACKUP_FILE"; sed -n "/^-- Current Database: \`$DB_FROM\`/,/^-- Current Database: \`/p" "$BACKUP_FILE") | sed "s/\`$DB_FROM\`/\`$DB_TO\`/g" | mysql -u root -p
    

    Minha resposta foi inspirada por esta , bem como por esta e por esta página da web .

    Eu respondi a uma pergunta semelhante aqui

    • 0
  7. Quốc Việt Nguyễn
    2020-11-10T23:50:11+08:002020-11-10T23:50:11+08:00

    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:

    • substitua o sinalizador --database
    • remova o sinalizador --defaults-file

    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"

    • -1
  8. user226671
    2021-07-30T02:05:59+08:002021-07-30T02:05:59+08:00

    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:

    sed 's/\/\*!50003 TRIGGER `mydbname`\./\/\*!50003 TRIGGER /g'
    

    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.

    • -1

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?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Como você mostra o SQL em execução em um banco de dados Oracle?

    • 2 respostas
  • Marko Smith

    Como selecionar a primeira linha de cada grupo?

    • 6 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Posso ver Consultas Históricas executadas em um banco de dados SQL Server?

    • 6 respostas
  • Marko Smith

    Como uso currval() no PostgreSQL para obter o último id inserido?

    • 10 respostas
  • Marko Smith

    Como executar o psql no Mac OS X?

    • 11 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Marko Smith

    Passando parâmetros de array para um procedimento armazenado

    • 12 respostas
  • Martin Hope
    Manuel Leduc Restrição exclusiva de várias colunas do PostgreSQL e valores NULL 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler Quando uma chave primária deve ser declarada sem cluster? 2011-11-11 13:31:59 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    BrunoLM Guid vs INT - Qual é melhor como chave primária? 2011-01-05 23:46:34 +0800 CST
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +0800 CST
  • Martin Hope
    Patrick Como posso otimizar um mysqldump de um banco de dados grande? 2011-01-04 13:13:48 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve