Backup MySQL com mysqldump

O comando mysqldump do sistema gestor de base de dados MySQL serve para fazer cópias de segurança. Explicamo-lo ao pormenor e vemos as suas opções mais importantes.

Por Carlos Cuenca Díaz


Publicado em: 05/9/04
Valorize este artigo:
Este comando permite fazer a cópia de segurança de uma ou várias bases de dados. Também permite que estas cópias de segurança se possam restaurar em diversos tipos de gestores de bases de dados, sem a necessidade de que se trate de um gestor de mySQL. Isto consegue-se criando uns ficheiros, que contêm todas as sentenças SQL necessárias para poder restaurar a tabela, que contem desde a sentença de criação da tabela, até uma sentença insert por cada um dos registos que formam parte da mesma.

O comando dispõem de uma ampla variedade de opções que nos permitirá realizar a cópia da forma mais conveniente para o propósito da mesma. Para poder restaurar a cópia de segurança, bastará com executar todas as sentenças SQL que se encontram dentro do ficheiro, bem desde a linha de comandos de MySQL, ou desde o menu de criação de sentenças SQL de qualquer entorno gráfico como pode ser o MySQL Control Center.

As limitações da restauração dependerão das opções que se especificaram na hora de fazer a cópia de segurança, por exemplo, se incluirmos a opção -add-drop-table ao fazer a cópia de segurança, poderão-se restaurar tabelas que existem actualmente no servidor (apagando-as primeiro). Pelo qual é necessário estudar primeiro os procedimentos que se utilizarão tanto na cópia como na restauração, para que tudo saia correcto!

Algumas das opções que tem são:

--add-locks
Adiciona LOCK TABLES antes, e UNLOCK TABLE depois da cópia de cada tabela.

--add-drop-table
Adiciona um drop table antes de cada sentença create.

-A, --all-databases
Copia todas as bases de dados. Isto é o mesmo que utilizar -databases seleccionando todas.

-a, --all
Inclui todas as opções de criação específicas de MySQL.

--allow-keywords
Permite a criação de nomes de colunas que são palavras chave, isto realiza-se pondo como prefixo a cada nome de coluna, o nome da tabela.

-c, --complete-insert
Utiliza inserts incluindo os nomes de coluna em cada sentença (incrementa bastante o tamanho do ficheiro)

-C, --compress
Comprime a informação entre o cliente e o servidor, se ambos suportam compressão.

-B, --databases
Para copiar várias bases de dados. Neste caso, não se especificam tabelas. O nome dos argumentos refere-se aos nomes das bases de dados. Incluirá-se USE db_name na saída antes de cada base de dados.

--delayed
Insere as filas com o comando INSERT DELAYED.

-e, --extended-insert
Utiliza a sintaxe de INSERT multilinha. (proporciona sentenças de insert mais compactas e rápidas)

-#, --debug[=option_string]
Utilização do modo de depuração.

--help
Mostra mensagem de ajuda e termina.

--fields-terminated-by=...
--fields-enclosed-by=...
--fields-optionally-enclosed-by=...
--fields-escaped-by=...
--lines-terminated-by=...

Estas opções utilizam-se com a opção -T e têm o mesmo significado que a correspondente cláusula LOAD DATA INFILE.

-F, --flush-logs
Escreve em disco todos os logs antes de começar com a cópia.

-f, --force,
Continua ainda que se produza um erro de SQL durante a cópia.

-h, --host=..
Copia os dados do servidor de MySQL especificado. O servidor pré-definido é localhost.

-l, --lock-tables.
Bloqueia todas as tabelas antes de começar com a cópia. As tabelas bloqueiam-se com READ LOCAL para permitir inserts simultâneos em caso das tabelas MyISAM. Quando se realiza a cópia de múltiplas bases de dados. As tabelas em diferentes bases de dados copiarão-se em estados completamente diferentes.

-K, --disable-keys
Incluirá-se na saída /*!40000 ALTER TABLE tb_name DISABLE KEYS */;e /*!40000 ALTER TABLE tb_name ENABLE KEYS */; Isto fará que o carregamento de dados num servidor MySQL 4.0 se realize mais rápido devido a que os índices se criarão depois de que todos os dados tenham sido restaurados.

-n, --no-create-db
Não se incluirá na saída CREATE DATABASE /*!32312 IF NOT EXISTS*/ db_name; Esta linha inclui-se se a opção --databases ou --all-databases foi seleccionada.

-t, --no-create-info
Não incluirá a informação de criação da tabela (sentença CREATE TABLE).

-d, --no-data
Não incluirá nenhuma informação sobre os registos da tabela. Esta opção serve para criar uma cópia só da estrutura da base de dados.

--opt
O mesmo que --quick --add-drop-table --add-locks --extended-insert --lock-tables. Esta opção deveria permitir realizar a cópia de segurança da base de dados da forma mais rápida e efetiva.

-pyour_pass, --password[=your_pass]
Password utilizada quando se conecta com o servidor. Se não se especifica `=your_pass', mysqldump preguntará a password.

-P, --port=...
Porto utilizado pelas ligações TCP/IP.

--protocol=(TCP | SOCKET | PIPE | MEMORY)
Especifica o protocolo de conexão que se utilizará.

-q, --quick
Não armazena no buffer a sentença, copia-a diretamente na saída. Utiliza mysql_use_result() para realiza-lo.

-Q, --quote-names
Põe entre aspas as tabelas e nomes de coluna.

-r, --result-file=...
Redireciona a saída ao ficheiro especificado. Esta opção deveria utilizar-se em MSDOS, porque previne a conversão de nova linha '\n' em nova linha e return '\n\r'.

--single-transaction
Utiliza o comando BEGIN antes de realizar a cópia desde o servidor. É muito útil com as tables InnoDB e o nível de transação READ_COMMITTED, porque deste modo realizará-se a copia de segurança de um estado consistente sem a necessidade de bloquear as aplicações. Consultar o manual para mais detalhes.

-S /path/to/socket, --socket=/path/to/socket
O ficheiro de sockets que se especifica ao conectar ao localhost (que é o host pré-definido).

--tables
sobrescreve a opção --databases (-B).

-T, --tab=path-to-some-directory
Cria um ficheiro table_name.sql, que contem a sentença de criação de SQL, e um ficheiro table_name.txt, que contem os dados de cada tabela. O formato do ficheiro '.txt' realiza-se com as opções --fields-xxx y --lines--xxx options.

Nota: Esta opção só funciona se o comando mysqldump se executa na mesma máquina que o demónio (daemon) mysqld, o usuário deverá ter licença para criar e escrever o ficheiro no path especificado.

-u nombre_usuario, --user=nombre_usuario
O nome de usuário que se utilizará quando se conecte com o servidor, o valor pré-definido é o do usuário actual.

-v, --verbose
Vai mostrando informação sobre as acções que se vão realizando (mais lento)

-w, --where='cláusula where'
Serve para realizar a cópia de determinados registos.

-X, --xml
Realiza a cópia de segurança num documento XML.

-x, --first-slave
Bloqueia todas as tabelas de todas as bases de dados.

Exemplo:

Para realizar a cópia de segurança da base de dados minhabase ao ficheiro copia_seguranca.sql

mysqldump --opt minhabase > copia_seguranca.sql





Comentários do artigo
Foram enviados 2 comentários ao artigo
2 comentários não revisados
0 comentários revisados

Usuários :    login / registro

Manuais relacionados
Categorias relacionadas
O autor
Carlos Cuenca Díaz
Consultoria Informática

Home | Sobre nós | Copyright | Anuncie | Entrar em contato