Em 16 de dezembro de 2011, respondi à pergunta Como você mysqldump tabelas específicas?
Coletei todas as tabelas sem incluir um determinado conjunto de nomes de tabelas.
Usando os mesmos princípios, você pode coletar todos os nomes de banco de dados da tabela de metadados information_schema.schemata
que deseja que o mysqldump'd, criar uma consulta para retornar essa lista e, em seguida, 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 que o mysqldump'd DATABASES_TO_EXCLUDE
De uma chance !!!
information_schema
que não está sendo descartado.mysqldump does not dump the INFORMATION_SCHEMA or performance_schema database by default. To dump either of these, name it explicitly on the command line and also use the --skip-lock-tables option. You can also name them with the --databases option. Before MySQL 5.5 mysqldump silently ignores INFORMATION_SCHEMA even if you name it explicitly on the command line.
dev.mysql.com/doc/refman/5.5/en/mysqldump.htmlUse grep para excluir bancos de dados que você não deseja:
Olhando /programming/19354870/bash-command-line-and-input-limit , parece que você será capaz de lidar com longas filas. Caso contrário, você sempre pode
fonte
grep
fim de passar da saída multilinha para uma única linha com cada nome de banco de dados separado por um espaço, exigido pormysqldump
. Portanto, o comando serácandidates=$(echo "show databases" | mysql | grep -Ev "^(Database|mysql|performance_schema|information_schema)$" | paste -sd " " -)
Eu não acho que é possível, mas você pode tentar estas soluções, que serão necessárias para digitar os nomes de todos os bancos de dados que você deseja despejar.
Deixe-me saber se a solução ajuda.
fonte
Mesmo com tantas respostas excelentes, este post é apenas para adicionar mais uma opção. Abaixo de 2 linhas no script, você pode executar todos os backups do servidor em todos os bancos de dados ignorando alguns.
fonte
sys
uma vez que isso faz parte do MySQL 5.7.Como alternativa, você pode olhar para os seguintes links;
Opção de banco de dados ignorar Mysqldump
Alguns hacks para simular o mysqldump --ignore-database
Implementando mysqldump –ignore-database
Deixe-me saber se a solução ajuda.
Boa sorte!
fonte
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.
O Oracle (Yuck, ainda não saiu da língua) possui o DataPump (expdb impdp) para despejar os bancos de dados Oracle. Desde o MySQL 5.7 na família Oracle (ainda sofrendo), o novo programa utilitário de backup chama-se mysqlpump , que vem com --exclude-database e outras opções interessantes. Como seu datapump mais antigo , o mysqlpump também possui paralelismo para ajudar a acelerar despejos e dividir o trabalho . No momento, não me inscrevi no trabalho, mas parece muito promissor. Quando eu mergulho fundo no mysqlpump, posso achar que ele traz a mesma aparência do datapump da Oracle .
Se houver alguém no Universo Paralelo do MySQL com histórias sobre isso, por favor poste aqui.
fonte
A resposta de Rolando é ótima, mas eu queria um script que pudesse ser reutilizado nos projetos. Então, peguei o script dele e o modifiquei para que você possa fazer coisas como:
Aqui está o script modificado:
(Eu ainda espero que uma
--ignore-database
opção seja adicionada a uma versão futura do mysqldump)fonte
Desde o MySQL 5.7.8, você pode usar
mysqlpump
(que NÃO é o mesmomysqldump
) da seguinte maneira:Apenas substitua
db1,db2,db3,db4
pelos quatro bancos de dados que você deseja excluir.Fonte: Blog do Servidor MySQL
fonte