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 / 35081
Accepted
ashuthosh
ashuthosh
Asked: 2013-02-21 01:06:04 +0800 CST2013-02-21 01:06:04 +0800 CST 2013-02-21 01:06:04 +0800 CST

Alguma opção para o mysqldump ignorar bancos de dados para backup?

  • 772

Temos 40 bancos de dados em nosso servidor.

Queremos fazer backup de 36 bancos de dados usando mysqldump. Como posso ignorar os 4 bancos de dados restantes no comando mysqldump? Existe alguma opção para o mysqldump ignorar bancos de dados para backup no MySQL?

Eu conheço o comando geral mysqldump, mas é muito longo. Eu quero ignorar apenas 4 bancos de dados e preciso fazer backup de dbs restantes.

mysql backup
  • 10 10 respostas
  • 73230 Views

10 respostas

  • Voted
  1. Best Answer
    RolandoMySQLDBA
    2013-02-21T08:37:23+08:002013-02-21T08:37:23+08:00

    Em 16 de dezembro de 2011, eu respondi a pergunta Como você faz para mysqldump tabela(s) específica(s)?

    Eu coletei todas as tabelas, não incluindo um determinado conjunto de nomes de tabelas.

    Usando os mesmos princípios, você poderia coletar todos os nomes de banco de dados da tabela de metadados information_schema.schemataque deseja mysqldump'd, criar uma consulta para retornar essa lista e usar essa lista de bancos de dados para formular o comando mysqldump.

    DATABASES_TO_EXCLUDE="db1 db2 db3"
    EXCLUSION_LIST="'information_schema','mysql'"
    for DB in `echo "${DATABASES_TO_EXCLUDE}"`
    do
        EXCLUSION_LIST="${EXCLUSION_LIST},'${DB}'"
    done
    SQLSTMT="SELECT schema_name FROM information_schema.schemata"
    SQLSTMT="${SQLSTMT} WHERE schema_name NOT IN (${EXCLUSION_LIST})"
    MYSQLDUMP_DATABASES="--databases"
    for DB in `mysql -ANe"${SQLSTMT}"`
    do
        MYSQLDUMP_DATABASES="${MYSQLDUMP_DATABASES} ${DB}"
    done
    MYSQLDUMP_OPTIONS="--routines --triggers"
    mysqldump ${MYSQLDUMP_OPTIONS} ${MYSQLDUMP_DATABASES} > MySQLDatabases.sql
    

    Tudo o que você precisa fazer é colocar os bancos de dados nos quais você não deseja mysqldump'dDATABASES_TO_EXCLUDE

    De uma chance !!!

    • 19
  2. srcritical
    2014-10-25T00:35:03+08:002014-10-25T00:35:03+08:00

    Use grep para excluir bancos de dados que você não deseja:

    candidates=$(echo "show databases" | mysql | grep -Ev "^(Database|mysql|performance_schema|information_schema)$")
    mysqldump --databases $candidates 
    

    Olhando para https://stackoverflow.com/questions/19354870/bash-command-line-and-input-limit , parece que você será capaz de lidar com longas filas. Caso contrário, você sempre pode

    candidates=$(echo "show databases" | mysql | grep -Ev "^(Database|mysql|performance_schema|information_schema)$")
    for candidate in $candidates[*]; do
        mysqldump $candidate 
    done
    
    • 19
  3. Cybermatatu
    2013-02-21T01:18:57+08:002013-02-21T01:18:57+08:00

    Eu não acho que seja possível, mas você pode tentar esta solução que você terá que digitar os nomes de todos os bancos de dados que deseja despejar.

    mysqldump -u root -password --databases db1 db2 db3 ... db36 > mydb_dump.sql
    

    Deixe-me saber se a solução ajuda.

    • 10
  4. Zafar Malik
    2016-12-28T05:36:38+08:002016-12-28T05:36:38+08:00

    Mesmo aqui há tantas respostas excelentes, então este post é apenas para adicionar mais uma opção. Abaixo de 2 linhas no script, você pode fazer backup de todos os seus servidores de banco de dados ignorando alguns bancos de dados.

    DB_LIST=`mysql -Nse "SELECT GROUP_CONCAT(SCHEMA_NAME SEPARATOR ' ') FROM information_schema.SCHEMATA WHERE SCHEMA_NAME NOT IN ('mysql','information_schema','performance_schema','sys');"`
    
    mysqldump -R -B $DB_LIST > BACKUPNAME.sql
    
    • 5
  5. Leo Galleguillos
    2019-06-10T06:19:07+08:002019-06-10T06:19:07+08:00

    Desde o MySQL 5.7.8, você pode usar mysqlpump(que NÃO é o mesmo que mysqldump) da seguinte forma:

    mysqlpump --user=user --password --exclude-databases=db1,db2,db3,db4 --result-file=partial_backup.sql
    

    Basta substituir db1,db2,db3,db4pelos quatro bancos de dados que você deseja excluir.

    Fonte: Blog do servidor MySQL

    • 4
  6. Cybermatatu
    2013-02-21T01:59:05+08:002013-02-21T01:59:05+08:00

    Alternativamente, você pode consultar os seguintes links;

    Opção de Ignorar Banco de Dados do Mysqldump

                OR
    

    Alguns hacks para simular mysqldump --ignore-database

    Implementando mysqldump –ignore-database

    Deixe-me saber se a solução ajuda.

    Boa sorte!

    • 2
  7. RolandoMySQLDBA
    2017-05-05T14:05:08+08:002017-05-05T14:05:08+08:00

    Muitos sempre quiseram que o mysqldump ignorasse os bancos de dados.

    Você acreditaria que essa opção existe agora ??? Não, não no mysqldump.

    Oracle (Yuck, toowee, ainda não sai da língua) tem DataPump (expdb impdp) para despejar bancos de dados Oracle. Desde o MySQL 5.7 na família Oracle (ainda doendo), o novo programa utilitário de backup é chamado mysqlpump , que vem com --exclude-databases e outras opções interessantes. Assim como o datapump mais antigo , o mysqlpump também apresenta paralelismo para ajudar a acelerar os dumps e dividir o trabalho . Neste momento, não me incorporei no trabalho, mas parece muito promissor. Quando me aprofundo no mysqlpump , posso descobrir que ele traz a mesma aparência do datapump da Oracle .

    Se houver alguém no MySQL Parallel Universe com histórias sobre isso, por favor poste aqui.

    • 1
  8. redgeoff
    2017-05-05T12:41:56+08:002017-05-05T12:41:56+08:00

    A resposta de Rolando é ótima, mas eu queria um script que pudesse ser reutilizado em projetos. Então, peguei o script dele e o modifiquei para que você possa fazer coisas como:

    $ mysqldump-ignore-databases.sh 'myuser' 'mypwd' 'information_schema mysql performance_schema' '--skip-lock-tables' > mydbs.sql
    

    Aqui está o script modificado:

    #!/usr/bin/env bash
    
    # This is an adapted version of Rolando's awesome script at
    # https://dba.stackexchange.com/a/35104/94046
    
    # Usage: mysqldump-ignore-databases.sh username password dbs-to-exclude mysqldump-options
    # e.g.
    #   mysqldumpIgnoreDatabases.sh 'myuser' 'mypwd' 'information_schema mysql performance_schema'
    #                               '--skip-lock-tables' > dbs.sql
    #
    #   mysqldumpIgnoreDatabases.sh 'myuser' 'mypwd' 'mysql' '-h example.com' '-h example.com' > dbs.sql
    
    USERNAME=$1
    PASSWORD=$2
    DATABASES_TO_EXCLUDE=$3
    MYSQLDUMP_OPTIONS=$4
    MYSQL_OPTIONS=$5
    
    EXCLUSION_LIST=""
    for DB in `echo "${DATABASES_TO_EXCLUDE}"`
    do
      if [ "${EXCLUSION_LIST}" != "" ]
      then
        EXCLUSION_LIST="${EXCLUSION_LIST},"
      fi
      EXCLUSION_LIST="${EXCLUSION_LIST}'${DB}'"
    done
    
    SQLSTMT="SELECT schema_name FROM information_schema.schemata"
    SQLSTMT="${SQLSTMT} WHERE schema_name NOT IN (${EXCLUSION_LIST})"
    
    MYSQLDUMP_DATABASES="--databases"
    for DB in `mysql -u${USERNAME} -p${PASSWORD} ${MYSQL_OPTIONS} -ANe"${SQLSTMT}"`
    do
      MYSQLDUMP_DATABASES="${MYSQLDUMP_DATABASES} ${DB}"
    done
    
    mysqldump -u${USERNAME} -p${PASSWORD} ${MYSQLDUMP_OPTIONS} ${MYSQLDUMP_DATABASES}
    

    (Ainda espero que uma --ignore-databaseopção seja adicionada a uma versão futura do mysqldump)

    • 0
  9. Akhil
    2020-06-21T21:30:11+08:002020-06-21T21:30:11+08:00

    Você pode usar este para produção
    Exclui 'performance_schema\|information_schema\|mysql\|sys'...modifique para suas necessidades

    MYSQL_USER=
    MYSQL_PASS=
    MYSQL_HOST=
    MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS} -h${MYSQL_HOST}"
    MYSQLDUMP_OPTIONS="--routines --triggers --single-transaction"
    
    DBLIST=`mysql -s --host=$MYSQL_HOST --user=$MYSQL_USER --password=$MYSQL_PASS \
    --execute="SHOW DATABASES;" | grep -v \
    'performance_schema\|information_schema\|mysql\|sys' | awk '{printf("\"%s\" ",$0)}'`
    
    mysqldump ${MYSQL_CONN} ${MYSQLDUMP_OPTIONS} --databases ${DBLIST} | gzip >all-dbs.sql.gz
    
    • 0
  10. Angga
    2021-09-27T23:45:55+08:002021-09-27T23:45:55+08:00

    Eu sou capaz de ignorar determinado nome de banco de dados usando o script abaixo. Estou excluindo o banco de dados information_schema ao executar o mysqldump. Você pode substituir "information_schema" pelo nome do banco de dados que deseja excluir.

    for DB in $(mysql -u db_username -p'db_password' -e 'show databases' -s --skip-column-names); do
      if [ "$DB" != "information_schema" ]
      then
      mysqldump --single-transaction --skip-lock-tables -u db_username -p'db_password' $DB | gzip > $DB.sql.gz;
      fi
    done
    
    • 0

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 fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Conceder acesso a todas as tabelas para um usuário

    • 5 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

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

    • 4 respostas
  • Marko Smith

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

    • 10 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
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +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

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