Você vai achar isso chocante, mas você só precisa de uma opção importante: --opt
O que é --opt ?
Esta opção, ativada por padrão, é uma abreviação para a combinação de --add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --lock-tables --quick - set-charset . Ele fornece uma operação de despejo rápido e produz um arquivo de despejo que pode ser recarregado rapidamente em um servidor MySQL.
Como a opção - -opt está ativada por padrão , você especifica apenas o inverso, o --skip-opt para desativar várias configurações padrão. Veja a discussão dos grupos de opções do mysqldump para obter informações sobre como ativar ou desativar seletivamente um subconjunto das opções afetadas pelo --opt.
Como --opt já está ativado, você não precisa especificar --opt . Não obstante, você pode precisar de algumas opções necessárias que não estão incluídas.
Execute esta consulta no seu banco de dados
SELECT engine,COUNT(1) TableCount
FROM information_schema.tables
WHERE engine IN ('InnoDB','MyISAM')
AND table_schema NOT IN ('information_schema','mysql','performance_schema')
GROUP BY engine;
Se você tiver todas as tabelas do InnoDB, precisará especificar --single-transaction . Isso desativará automaticamente --lock-tables e permitirá que você despeje todas as tabelas no mesmo momento e permita que novas gravações ocorram ao mesmo tempo.
Se você possui uma ou mais tabelas MyISAM, precisa especificar --lock-all-tables . Isso desativa automaticamente --lock-tables , desativa - Única transação , bloqueia todas as tabelas em todos os bancos de dados e cria o dump. As gravações nas tabelas do InnoDB ainda podem ocorrer, mas elas serão enfileiradas até que os bloqueios sejam liberados. Qualquer conexão com o banco de dados que tente gravar em qualquer tabela MyISAM será realmente suspensa até que todos os bloqueios sejam liberados.
Execute esta consulta: SELECT COUNT(1) Number_Of_Stored_Procedures FROM mysql.proc;
Se Number_Of_Stored_Procedures
for maior que zero, use --rotines .
Execute esta consulta: SELECT COUNT(1) Number_Of_Triggers FROM information_schema.triggers;
Se Number_Of_Triggers
for maior que zero, use --triggers .
CAVEAT : Por favor, não use --order-by-primary para descarregar todos os bancos de dados, pois ele pode potencialmente tornar os índices BTREE bastante desequilibrados na recarga. --order-by-primary deve ser usado apenas ao descarregar uma tabela individual que você sabe que possui uma chave primária inteira e terá várias varreduras de intervalo do seu aplicativo.
Se você precisar de mais tipos criativos de backups do mysqldump, consulte a minha antiga postagem Como otimizar um mysqldump de um banco de dados grande? .
Por favor, leia todas as opções para o mysqldump .
UPDATE 2014-12-29 09:44 EST
Eu atualizei meu comando mysqldump (veja minha edição). Eu tenho uma última pergunta, no entanto. Você acha que valeria a pena usar todos os argumentos a seguir também? --add-drop-database \ --add-drop-table \ --complete-insert \ --delayed-insert \ --tz-utc
Observando seu comentário e sua edição mais recente, vamos analisar cada uma dessas opções e ver se você precisa de alguma delas.
- --opt : Eu já disse que você não precisa especificá-lo porque está ativado por padrão.
- --delayed-insert : permanentemente me afasto disso com um banco de dados totalmente InnoDB. De fato, eu permaneço firmemente longe deste PERÍODO !!! . Como 1) é possível que INSERT DELAYED possa perder dados, 2) é convertido em INSERT para escravos de replicação do MySQL, 3) existe um relatório de erro aberto sobre o uso com gatilhos no MySQL 5.6 e não é considerado um bug , 4 ) foi descontinuado no MySQL 5.6 e 5) O Morgan Tocker (conhecido MySQL Guru) previu sua descontinuação em 2012 , você deve esquecer que essa opção já existiu. Nunca, nunca (infinito) use-o !!!
- --complete-insert : será usado em
INSERT INTO tblname (colnam_1,colnam_2,...colnam_n) VALUES ...
vez de INSERT INTO tblname VALUES ...
. Isso pode inchar o mysqldump se houver muitas colunas na definição da tabela e muitas linhas na tabela. Não use.
- --add-drop-table : Como --opt habilita isso para você, você não precisa especificá-lo.
- --add-drop-database : Se você soltar o --add-drop-database , ele faz com que o
DROP TABLE IF EXISTS
(que foi adicionado pela --add-drop-table ) vá mais rápido. Não usá-lo simplesmente permite DROP TABLE IF EXISTS
ocorrer para cada tabela. Portanto, o uso de --add-drop-database é uma questão de escolha pessoal.
- --tz-utc : se você planeja restaurar os dados no mesmo servidor de backup, não precisa --tz-utc . Se você restaurar os dados para outro data center em um fuso horário diferente e ...
- se você deseja manter o mesmo fuso horário do qual faz backup, não precisa --tz-utc .
- se você deseja que os dados usem o fuso horário de um novo datacenter, você precisa --tz-utc .
- EXEMPLO: Digamos que você faça backup de um banco de dados em Nova York. Isso é EST. Se você tiver outro data center em Seattle, seria o PST. Se você deseja que o New York Backup seja restaurado em Seattle e os carimbos de data e hora no banco de dados ainda representem Nova York, não deseja usar --tz-utc .
- --default-character-set
Ajustando sua edição mais recente, é disso que você precisa especialmente
mysqldump\
--host=localhost\
--port=3306\
--databases ****\
--user=****\
--password=****\
--single-transaction\
--routines\
--triggers\
--events\
--add-drop-database\
> dump/test.sql
Novamente, eu digo, por favor leia todas as opções para mysqldump .