Backup do servidor MySQL

6

Eu quero fazer backup de todos os bancos de dados, usuários e etc em nosso servidor MySQL.

Eu me deparei com o comando mysqldump e acredito que posso usá-lo assim? (Tentando fazer backup de um servidor REMOTE para nossa máquina LOCAL)

mysqldump -h web-server.com -u root -p root --all-databases > "/backups/mysql/'date +%Y%m%d'.sql"

No entanto:

  1. Estou com medo de executar isso com pouco conhecimento do que está acontecendo (temos muitos dados no banco de dados MySQL e não podemos perder isso!). Então, a primeira pergunta é: isso fará o que eu quero? Entre no servidor remoto (localizado em web-server.com por exemplo) e faça backup de todos os bancos de dados mysql para o caminho /backups/mysql na máquina LOCAL?

  2. Não estou convencido de que isso também manterá todas as informações do usuário para cada banco de dados intactas no caso de uma falha no servidor MySQL. As informações do usuário são armazenadas apenas como outro banco de dados nos bancos de dados MySQL? Ou é uma função do próprio servidor? Neste caso, existe uma maneira diferente de fazer backup do banco de dados para incluir os dados do usuário também?

por Thomas Clayson 10.05.2012 / 13:25

2 respostas

6

1) Sim, isso despejará o conteúdo de todos os bancos de dados como uma série de comandos INSERT sql para que você possa restaurar o lote inteiro com mysql < backup.sql . Puramente para manejar a propriedade, eu recomendo que você faça isso por banco de dados, em vez de usar --all-databases , pois você obtém um arquivo grande que contém TUDO e não é facilmente pesquisável.

Você pode querer olhar para a página de manual mysqldump para ver se há outras opções que gostaria de usar.

2) As informações do usuário e o controle de acesso são armazenados no banco de dados mysql ; --all-databases inclui esse.

    
por 10.05.2012 / 13:40
3

Se você estiver executando mysqldump remotamente e quiser um arquivo de despejo separado para cada banco de dados, será necessário manter uma lista dos bancos de dados dos quais deseja fazer backup. Se você executar mysqldump localmente no servidor de banco de dados, poderá percorrer os bancos de dados existentes no diretório mysql data (como /var/lib/mysql ). Se mysqldump tiver que ser executado remotamente, você poderá escrever um script que se conecte via SSH, recupere uma lista dos bancos de dados e, em seguida, desconecte e execute mysqldump com os nomes dos bancos de dados.

Eu não usaria --all-databases sem especificar nomes de bancos de dados individuais e, adicionalmente, usaria a opção --add-drop-database . Isso também incluirá instruções SQL no arquivo de despejo para criar o banco de dados, se ele não existir, ou eliminar o banco de dados, se existir e recriá-lo. De man 1 mysqldump :

--add-drop-database
  Add a DROP DATABASE statement before each CREATE DATABASE statement.      
  This option is typically used in conjunction with the --all-databases 
  or --databases option because no CREATE DATABASE statements are written
  unless one of those options is specified.

Este é um script rápido e sujo projetado para ser executado localmente no servidor de banco de dados que fará backup dos bancos de dados especificados na variável $DB , resultando em um arquivo de despejo para cada banco de dados. Ele também remove os arquivos de dumps anteriores com mais de 15 dias.

#!/bin/sh

PATH=/bin:/usr/bin
DATE="'date +%Y%m%d'"
DB="mysql drupal drupaldev"
DUMP_DIR="/u01/mysql_dump"

for db in 'echo $DB'
 do
  mysqldump -u root --password=password --databases --add-drop-database $db > $DUMP_DIR/$db.$DATE.dmp
  gzip -9 $DUMP_DIR/$db.$DATE.dmp
  find $DUMP_DIR/* -mtime +14 -exec rm -f '{}' \;
done
    
por 10.05.2012 / 18:41

Tags