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 / 16642
Accepted
jcho360
jcho360
Asked: 2012-04-18 11:52:54 +0800 CST2012-04-18 11:52:54 +0800 CST 2012-04-18 11:52:54 +0800 CST

Diferença entre os métodos de backup: Oracle e MySQL

  • 772

Eu estava lendo que os bancos de dados Oracle têm backups frios, mornos, completos e refazer.

Perguntas

  • Como é possível que o MySQL não tenha tantas opções?
  • Eu li que o MySQL tem backups frios (ele coloca o banco de dados em um modo de bloqueio por si só); existem outros métodos?
  • Como posso implementar métodos semelhantes aos que o Oracle possui no MySQL?
mysql backup
  • 2 2 respostas
  • 1319 Views

2 respostas

  • Voted
  1. Neil McGuigan
    2012-04-18T19:12:49+08:002012-04-18T19:12:49+08:00

    Porque o MySQL não é tão maduro.

    Mas existem opções, como o hot backup (gratuito) do Percona para innodb:

    http://www.percona.com/software/percona-xtrabackup/

    Há também o MySQL Enterprise Backup da Oracle, mas não é gratuito.

    • 2
  2. Best Answer
    RolandoMySQLDBA
    2012-04-19T09:42:28+08:002012-04-19T09:42:28+08:00

    Existem duas maneiras de fazer backups que não são padrão para o MySQL

    COLD BACKUP

    Você pode executar mysqldumps paralelos em conjunto comFLUSH TABLES WITH READ LOCK

    Eu escrevi um post sobre isso há muito tempo: Como posso otimizar um mysqldump de um banco de dados grande?

    Aqui está um script de amostra para usar um bloqueio de leitura global e um mysqldump monolítico

    MYSQL_CONN="-hhostip -uusername -ppassword"
    mysql ${MYSQL_CONN} -A -e"FLUSH TABLES WITH READ LOCK; SELECT SLEEP(86400)" &
    SEARCHING_FOR_SLEEP=0
    while [ ${SEARCHING_FOR_SLEEP} -eq 0 ]
    do
        sleep 3
        SEARCHING_FOR_SLEEP=`${MYSQL} ${MYSQL_CONN} -A -e"SHOW PROCESSLIST;" | grep -c "SELECT SLEEP(86400)"`
    done
    sleep 1
    SLEEP_ID=`mysql ${MYSQL_CONN} -A -e"SHOW PROCESSLIST;" | grep "SELECT SLEEP(86400)" | awk '{print $1}'`
    
    mysqldump ${MYSQL_CONN} --master-data=2 --single-transaction --flush-privileges --routines --triggers --all-databases > /root/mydata.sql
    
    mysql ${MYSQL_CONN} -A -e"KILL ${SLEEP_ID}"
    

    Aqui está um script de amostra para usar um bloqueio de leitura global e mysqldumps paralelos 20 DBs por vez

    MYSQL_CONN="-hhostip -uusername -ppassword"
    mysql ${MYSQL_CONN} -A -e"FLUSH TABLES WITH READ LOCK; SELECT SLEEP(86400)" &
    SEARCHING_FOR_SLEEP=0
    while [ ${SEARCHING_FOR_SLEEP} -eq 0 ]
    do
        sleep 3
        SEARCHING_FOR_SLEEP=`${MYSQL} ${MYSQL_CONN} -A -e"SHOW PROCESSLIST;" | grep -c "SELECT SLEEP(86400)"`
    done
    sleep 1
    SLEEP_ID=`mysql ${MYSQL_CONN} -A -e"SHOW PROCESSLIST;" | grep "SELECT SLEEP(86400)" | awk '{print $1}'`
    
    mysql ${MYSQL_CONN} -AN -e"SELECT schema_name FROM information_schema.schemata WHERE schema_name NOT IN ('information_schema','mysql')" > /tmp/ListOfDatabases.txt
    
    COMMIT_COUNT=0 
    COMMIT_LIMIT=20 
    for DB in `cat /tmp/ListOfDatabases.txt` 
    do
        mysqldump ${MYSQL_CONN} --single-transaction --hex-blob --routines --triggers ${TBL_EXCLUSION_LIST} ${DB} | gzip > ${DB}.sql.gz & 
        (( COMMIT_COUNT++ )) 
        if [ ${COMMIT_COUNT} -eq ${COMMIT_LIMIT} ] 
        then 
            COMMIT_COUNT=0 
            wait 
        fi 
    done 
    if [ ${COMMIT_COUNT} -gt 0 ] 
    then 
        wait 
    fi 
    
    mysql ${MYSQL_CONN} -A -e"KILL ${SLEEP_ID}"
    

    BACKUP MORNO / FRIO

    Um método mais arriscado para fazer backup do mysql é fazer rsyncs. O conceito básico é este:

    • Passo 01) Cerca de 1 hora antes, execute SET GLOBAL innodb_max_dirty_pages_pct = 0;(OPCIONAL se seus dados forem todos InnoDB)
    • Etapa 02) Certifique-se de que o DB2 já tenha o mysql desligado
    • Etapa 03) rsync /var/lib/mysql para DB1 para /var/lib/mysql no DB2
    • Etapa 04) Repita a Etapa 03 até que dois rsyncs consecutivos sejam aproximadamente ao mesmo tempo
    • Passo 05) desligar o mysql no DB1
    • Passo 06) rsync /var/lib/mysql para DB1 para /var/lib/mysql no DB2
    • Passo 07) inicialização do mysql no DB1

    A partir daqui, você pode inicializar o mysql no DB2 e executar mysqldumps no DB2 para o conteúdo do seu coração.

    Em vez de apenas colocar o código aqui, vou compartilhar com vocês os links que postei no passado sobre o conceito disso (este conceito eu uso periodicamente para fazer novos escravos para mestres gigantes)

    • https://dba.stackexchange.com/a/2734/877
    • https://dba.stackexchange.com/a/10915/877
    • https://serverfault.com/a/257426/69271
    • https://serverfault.com/a/288467/69271 (o código que você precisa ver está aqui)
    • 2

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 ver a lista de bancos de dados no Oracle?

    • 8 respostas
  • Marko Smith

    Quão grande deve ser o mysql innodb_buffer_pool_size?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    restaurar a tabela do arquivo .frm e .ibd?

    • 10 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

    Como selecionar a primeira linha de cada grupo?

    • 6 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
    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
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +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