Após algumas pesquisas, acabei com as seguintes configurações:
mysqldump\
--host=localhost\
--port=3306\
--databases ****\
--user=****\
--password=****\
--default-character-set=utf8\
--add-drop-database\
--add-drop-table\
--add-locks\
--complete-insert\
--extended-insert\
--lock-all-tables\
--create-options\
--disable-keys\
--quick\
--order-by-primary\
--set-charset\
--tz-utc\
> dump/test.sql
Até aí tudo bem, mas eu tenho algumas perguntas sobre os parâmetros, bem como a execução.
Em relação à minha primeira preocupação, quero apenas garantir que todas elas sejam necessárias e que não causem conflitos quando usadas em conjunto. Por fim, gostaria de criar um arquivo de despejo muito robusto e consistente, com milhões de registros, que crie tabelas, bancos de dados e insira dados. O bom é que tornar o banco de dados indisponível por um tempo não é um problema para mim. Meu único objetivo é criar um arquivo de despejo robusto e consistente.
Em relação ao meu segundo concerto, eu gostaria de saber como ser informado quando o comando sair errado e, em caso afirmativo, lançar uma exceção.
Alguma ideia?
EDITAR
Este é o meu comando mysqldump atualizado com base nos comentários de RolandoMySQLDBA.
mysqldump\
--host=localhost\
--port=3306\
--databases ****\
--user=****\
--password=****\
--default-character-set=utf8\
--opt\
--single-transaction\
--routines\
--triggers\
--events\
--add-drop-database\
--add-drop-table\
--complete-insert\
--delayed-insert\
--tz-utc\
> dump/test.sql
fonte
Respostas:
Você vai achar isso chocante, mas você só precisa de uma opção importante: --opt
O que é --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
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
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.
INSERT INTO tblname (colnam_1,colnam_2,...colnam_n) VALUES ...
vez deINSERT 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.DROP TABLE IF EXISTS
(que foi adicionado pela --add-drop-table ) vá mais rápido. Não usá-lo simplesmente permiteDROP TABLE IF EXISTS
ocorrer para cada tabela. Portanto, o uso de --add-drop-database é uma questão de escolha pessoal.Ajustando sua edição mais recente, é disso que você precisa especialmente
Novamente, eu digo, por favor leia todas as opções para mysqldump .
fonte
--add-drop-trigger
?