AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 33883
Accepted
Question Overflow
Question Overflow
Asked: 2013-01-31 23:01:27 +0800 CST2013-01-31 23:01:27 +0800 CST 2013-01-31 23:01:27 +0800 CST

Qual é a maneira correta de fazer backup do banco de dados MySQL com rsnapshot?

  • 772

Desejo fazer backup do meu site que contém imagens carregadas pelo usuário e dados armazenados no banco de dados MySQL, de modo que sejam sempre consistentes entre si em qualquer ponto específico do tempo. Enquanto procurava soluções, encontrei este rsnapshot de aplicativo que pode ser apropriado para a tarefa. Tendo passado por alguns blogs na internet, percebi que isso é realmente feito com um backup_script usando o método mysqldump:

backup_script   ssh [email protected] "mysqldump -A > /var/db/dump/mysql.sql"    unused2
backup  [email protected]:/var/db/dump/  example.com/

O que não tenho certeza é se há necessidade de liberar todas as tabelas com bloqueio de leitura antes de executar o dump no script para garantir a consistência do banco de dados. Em caso afirmativo, como isso deve ser incorporado? Se não, por que não é necessário?

mysql backup
  • 1 1 respostas
  • 5249 Views

1 respostas

  • Voted
  1. Best Answer
    Michael - sqlbot
    2013-02-01T18:51:11+08:002013-02-01T18:51:11+08:00

    Por padrão, o uso de mysqldumpbloqueará cada tabela à medida que a despeja e não haverá consistência entre as tabelas. Você também não obterá nenhum backup de gatilhos, procedimentos armazenados, funções armazenadas ou eventos e, se qualquer uma das definições de exibição for inválida (referindo-se a tabelas ou colunas inexistentes que você pode ter descartado ou renomeado desde que a exibição foi definida), o dump processo terminará quando esse erro for encontrado.

    Se todas as suas tabelas forem InnoDB, você pode obter um instantâneo consistente adicionando isto:

    --single-transaction 
    

    Esta opção desativa o padrão --lock-tablesque bloqueia cada tabela à medida que ela é despejada e, em seguida, a desbloqueia quando termina de despejá-la e, em vez disso, emite as seguintes instruções para o servidor no início do despejo (que você pode observar ativando o log de consulta geral):

    SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
    START TRANSACTION WITH CONSISTENT SNAPSHOT;
    

    Claro, isso só ajuda com o InnoDB. Se suas tabelas são MyISAM ou qualquer outro mecanismo não transacional, você só tem uma opção:

    --lock-all-tables
    

    ...que bloqueia todas as tabelas para todo o despejo, já que é a única maneira de garantir consistência sem transações para auxiliar.

    Para fazer backup de seus procedimentos armazenados, eventos e gatilhos, adicione:

    --routines --events --triggers
    

    Para evitar mysqldumpfalhas quando há uma definição de visualização inválida

    --force
    

    Para capturar sua posição binlog e armazená-la no arquivo de backup, adicione:

    --master-data=2
    

    Esta opção não funciona se sua máquina não for escrava.


    Sua pergunta era sobre fazer backup do banco de dados "com rsnapshot", embora, para colocar um ponto final, você está propondo fazer backup do banco de dados com mysqldump e, em seguida, fazer backup do dumpfile com rsnapshot ... É difícil dizer com uma breve olhada em seu site se essa será uma boa escolha, porque o rsnapshot parece ter granularidade no nível do arquivo. Ele não parece armazenar diferenças, mas armazena arquivos completos para "cada" arquivo que muda entre os ciclos de backup:

    "A quantidade de espaço necessária é aproximadamente o tamanho de um backup completo, mais uma cópia de cada arquivo adicional alterado." -- http://www.rsnapshot.org/rsnapshot.html

    Aceito correção se eu estiver errado neste ponto. Neste caso, você tem apenas 1 arquivo, seu arquivo de despejo do mysqldump, que obviamente mudará toda vez.

    Faça o que fizer, não pense em tentar fazer backup dos arquivos reais (.frm, .ibd, .MYD, etc.) subjacentes às suas tabelas no MySQL. Isso não funciona com o servidor em execução, embora em raras condições você possa obter um backup que pareça estar intacto. Não é.


    Atualizar:

    Há uma distinção importante entre o que o mylvmbackup está fazendo e "fazer backup dos arquivos reais". Para usar mylvmbackup, você deve usar LVM , que pode ser visualizado como uma camada de abstração entre seu sistema de arquivos e seu disco rígido. Com o LVM, você tem a capacidade de congelar o sistema de arquivos e fazer um instantâneo pontual de todo o sistema de arquivos.

    Parece que mylvmbackup está fazendo um FLUSH TABLESseguido por um FLUSH TABLES WITH READ LOCKantes de procurar as coordenadas de replicação (se especificado na configuração), que é o mesmo processo que mysqldump faz quando --single-transactione --master-datasão usados. Isso estabiliza o MySQL, mas não desativa totalmente o InnoDB;

    Se os arquivos de dados do seu site estivessem no mesmo sistema de arquivos, então um instantâneo LVM conteria tudo consistente para um único ponto no tempo, mas se ter seus outros arquivos do site no mesmo sistema de arquivos do banco de dados é uma boa prática (se, de fato, executar seu servidor web no mesmo servidor é uma boa prática) é outra discussão.

    Seja qual for a abordagem, é de vital importância em qualquer estratégia de backup verificar periodicamente se seus backups podem realmente ser restaurados (em uma máquina diferente). O método verdadeiramente mais seguro seria ter certeza innodb_fast_shutdown= 0 e realmente desligar o MySQL, mas isso provavelmente não é prático.

    Claro, se você quiser com algo como rsnapshot, você sempre pode capturar os arquivos do site, depois capturar o banco de dados e, em seguida, capturar os arquivos do site novamente. Se nada mudar nos arquivos do site durante o backup do banco de dados, o rsnapshot usará muito pouco espaço para a segunda execução. Se as coisas mudarem, deve ser bastante trivial entender as diferenças se você precisar se recuperar.

    • 8

relate perguntas

  • Existem ferramentas de benchmarking do MySQL? [fechado]

  • Onde posso encontrar o log lento do mysql?

  • Como posso otimizar um mysqldump de um banco de dados grande?

  • Quando é o momento certo para usar o MariaDB em vez do MySQL e por quê?

  • Como um grupo pode rastrear alterações no esquema do banco de dados?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Conceder acesso a todas as tabelas para um usuário

    • 5 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve