O mysqldump é uma ferramenta de linha de comando para criar backups lógicos (dumps) de bancos de dados MySQL. Ela gera um arquivo de texto contendo instruções SQL que podem ser executadas para restaurar o banco de dados original.
Exportação de Dados
O usuário que realiza a exportação deve possuir as permissões necessárias sobre os objetos sendo exportados. Exemplos incluem: SELECT para tabelas, SHOW VIEW para views, TRIGGER para triggers e LOCK TABLES se for necessário bloquear tabelas.
Se o arquivo de dump contiver informações de GTID (Global Transaction Identifiers), ele não poderá ser importado em um banco de dados que não tenha GTID habilitado.
Exportação no Nível do Banco de Dados
Exportar todos os bancos de dados com estrutura e dados:
mysqldump -u admin -p --all-databases > /backup/completo.sql
Exportar apenas a estrutura de todos os bancos de dados:
mysqldump -u admin -p --all-databases --no-data > /backup/estrutura_global.sql
Exportar apenas os dados de todos os bancos de dados:
mysqldump -u admin -p --all-databases --no-create-info > /backup/dados_global.sql
Exportar um único banco de dados (estrutura e dados):
mysqldump -u admin -p banco_principal > /backup/banco_principal.sql
Exportar a esturtura de um único banco de dados:
mysqldump -u admin -p banco_principal --no-data > /backup/estrutura_bp.sql
Exportar os dados de um único banco de dados:
mysqldump -u admin -p banco_principal --no-create-info > /backup/dados_bp.sql
Exportar múltiplos bancos de dados específicos (use a opção --databases):
mysqldump -u admin -p --databases loja forum > /backup/multiplos_bancos.sql
Exportação no Nível da Tabela
Exportar uma tabela específica (com estrutura e dados):
mysqldump -u admin -p banco_dados tabela_pedidos > /backup/pedidos.sql
Exportar múltiplas tabelas de um banco de dados:
mysqldump -u admin -p banco_dados clientes itens_pagamento > /backup/tabelas_vendas.sql
Exportar todas as tabelas de um banco, exceto algumas:
mysqldump -u admin -p banco_dados --ignore-table=banco_dados.log_temporario --ignore-table=banco_dados.sessao_usuario > /backup/banco_filtrado.sql
Exportar apenas linhas que correspondam a uma cláusula WHERE:
mysqldump -u admin -p --where="status='ativo'" banco_dados tabela_clientes > /backup/clientes_ativos.sql
Parâmetros Principais do mysqldump
--all-databasesou-A: Exporta todos os bancos de dados.--databasesou-B: Exporta múltiplos bancos de dados listados. Sem esta opção, o primeiro argumento é tratado como nome do banco e os subsequentes como tabelas.--default-character-set=conjunto: Define o conjunto de caracteres padrão. O padrão é utf8mb4.--forceou-f: Continua a exportação mesmo que ocorram erros SQL.--no-dataou-d: Exporta apenas a estrutura (DDL) das tabelas.--port=numero_portaou-P numero_porta: Especifica a porta de conexão.--quickou-q: Força o mysqldump a buscar as linhas uma a uma do servidor, evitando carregar tabelas inteiras na memória.--single-transaction: Inicia a exportação com uma transação, garantindo consistência sem bloquear tabelas (recomendado para InnoDB). Requer que nenhuma DDL seja executada durante o processo.--lock-all-tablesou-x: Bloqueia todas as tabelas em todos os bancos de dados durante a exportação, garantindo consistência global, mas tornando o banco somente leitura temporariamente.--master-data=[valor]: Utilizado para configurar um servidor de réplica. Com valor=1, o arquivo de dump inclui a instrução CHANGE MASTER. Com valor=2, a instrução é comentada.--where=condicaoou-w condicao: Filtra as linhas exportadas.--eventsou-E: Inclui eventos do agendador no dump.--routinesou-R: Inclui stored procedures e functions.--triggers: Inclui triggers.--hex-blob: Exporta colunas BLOB, VARBINARY e BIT em formato hexadecimal.
Importação de Dados
O usuário que realiza a importação precisa de permissões para executar as instruções SQL contidas no arquivo de backup (DDL, DML, etc.).
Comandos Básicos de Importação
A partir do sistema operacional (linha de comando):
mysql -u admin -p < /caminho/para/backup.sql
Interativamente no cliente mysql (comando SOURCE):
mysql -u admin -p
USE nome_do_banco;
SOURCE /caminho/para/backup.sql;
Exemplos de Importação
Restaurar todos os bancos de dados:
mysql -u admin -p < /backup/completo.sql
Restaurar um único banco de dados (para um banco já existente):
mysql -u admin -p banco_principal < /backup/banco_principal.sql
Restaurar múltiplas tabelas dentro de um banco de dados:
mysql -u admin -p banco_dados < /backup/tabelas_vendas.sql
Restaurar um arquivo de dump que contém múltiplos bancos de dados:
mysql -u admin -p < /backup/multiplos_bancos.sql
Gerando SQL para Objetos Específicos
Ao migrar bancos de dados para um novo ambiente, pode ser necessário alterar nomes de banco de dados ou usuários. Objetos como views, procedures, functions, triggers e eventos podem conter referências rígidas ao banco de dados ou a um DEFINER específico em sua criação, o que pode causar falhas na importação.
Uma abordagem consiste em: 1) Realizar um backup e restauração completa inicialmente, ignorando erros; 2) Identificar e remover os objetos problemáticos; 3) Gerar scripts de criação desses objetos com as referências corrigidas e importá-los separadamente.
Exportando Definições de Views
Para exportar a DDL das views sem os nomes de banco e DEFINER, pode-se consultar o INFORMATION_SCHEMA:
SELECT CONCAT('CREATE VIEW `', TABLE_NAME, '` AS ', VIEW_DEFINITION, ';')
FROM INFORMATION_SCHEMA.VIEWS
WHERE TABLE_SCHEMA = 'meu_banco';
Exportando Definições de Outros Objetos
Procedures e Functions: A consulta abaixo gera os comandos de criação:
SELECT CONCAT(
'DROP ', ROUTINE_TYPE, ' IF EXISTS `', ROUTINE_SCHEMA, '`.`', ROUTINE_NAME, '`;\n',
'DELIMITER ;;\n',
'CREATE ', ROUTINE_TYPE, ' `', ROUTINE_SCHEMA, '`.`', ROUTINE_NAME, '`', '(', IFNULL(DTD_IDENTIFIER, ''), ') ',
IF(ROUTINE_TYPE = 'FUNCTION', CONCAT('RETURNS ', DATA_TYPE, '\n'), ''),
ROUTINE_DEFINITION,
';;\nDELIMITER ;'
)
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_SCHEMA = 'meu_banco';
Triggers:
SELECT CONCAT(
'DROP TRIGGER IF EXISTS `', TRIGGER_SCHEMA, '`.`', TRIGGER_NAME, '`;\n',
'DELIMITER ;;\n',
'CREATE TRIGGER `', TRIGGER_SCHEMA, '`.`', TRIGGER_NAME, '` ',
ACTION_TIMING, ' ', EVENT_MANIPULATION,
' ON `', EVENT_OBJECT_SCHEMA, '`.`', EVENT_OBJECT_TABLE, '`',
' FOR EACH ROW\n',
ACTION_STATEMENT,
';;\nDELIMITER ;'
)
FROM INFORMATION_SCHEMA.TRIGGERS
WHERE TRIGGER_SCHEMA = 'meu_banco';
Eventos:
SELECT CONCAT(
'DROP EVENT IF EXISTS `', EVENT_SCHEMA, '`.`', EVENT_NAME, '`;\n',
'DELIMITER ;;\n',
'CREATE EVENT `', EVENT_SCHEMA, '`.`', EVENT_NAME, '`',
' ON SCHEDULE EVERY ', INTERVAL_VALUE, ' ', INTERVAL_FIELD,
' STARTS \'', STARTS, '\'',
IF(ENDS IS NOT NULL, CONCAT(' ENDS \'', ENDS, '\''), ''),
' ON COMPLETION ', ON_COMPLETION,
IF(STATUS = 'ENABLE', ' ENABLE', ' DISABLE'),
' DO ',
EVENT_DEFINITION,
';;\nDELIMITER ;'
)
FROM INFORMATION_SCHEMA.EVENTS
WHERE EVENT_SCHEMA = 'meu_banco';
Esses comandos SELECT geram o script SQL completo para recriar os objetos, permitindo que você edite as partes de nome de banco e DEFINER antes de executá-los no servidor de destino.