Explicação detalhada do uso da ferramenta de backup e recuperação do MySQL XtraBackup no ambiente Docker | Spring Cloud 62

1. Introdução ao XtraBackup

Percona XtraBackupMySQLé uma ferramenta de backup de banco de dados e software livre MariaDBque cria backups consistentes e de alto desempenho com impacto mínimo nos ambientes de produção. As operações de backup e restauração são implementadas copiando os arquivos de dados e logs de transações do mecanismo de armazenamento Percona XtraBackupsem parar MySQLo servidor .InnoDB

Percona XtraBackupAs principais características são as seguintes:

  • Backup de alto desempenho: Percona XtraBackupcapacidade de fazer backup de bancos de dados em paralelo, proporcionando velocidades de backup rápidas com menos impacto nos sistemas de produção.

  • Backup de consistência: Percona XtraBackupUse InnoDBum algoritmo específico para garantir a consistência do backup, ou seja, o arquivo de dados de backup e o log de transações estão no mesmo estado ao mesmo tempo.

  • Backup incremental: Percona XtraBackupo backup incremental é suportado e backups incrementais podem ser criados com base em backups completos anteriores, reduzindo o tempo de backup e o consumo de espaço de armazenamento.

  • Compressão e criptografia de suporte: Percona XtraBackupvocê pode usar um algoritmo de compactação para reduzir o tamanho do arquivo de backup durante o processo de backup e também pode criptografar o arquivo de backup para melhorar a segurança dos dados.

  • Backup e recuperação flexíveis: Percona XtraBackupele suporta a cópia de arquivos de backup de volta ao diretório do banco de dados para recuperação e também suporta a saída de dados de backup no modo de fluxo para recuperação.

  • Compatibilidade: Percona XtraBackupCompatível MySQLcom MariaDBe pode ser usado em diferentes versões do banco de dados.

Resumindo, Percona XtraBackupé uma ferramenta de backup de banco de dados poderosa e flexível, que pode ajudar os administradores de banco de dados a criar facilmente backups confiáveis ​​e executar operações de restauração eficientes quando necessário. Seja proteção de dados para ambientes de produção ou replicação de dados para ambientes de desenvolvimento e teste, Percona XtraBackupé uma escolha confiável.

Endereço do site oficial: https://docs.percona.com/percona-xtrabackup/8.0/

2. Ambiente e implantação

2.1 Introdução ao ambiente operacional

Todas as operações de demonstração neste capítulo estão no Dockerambiente.

insira a descrição da imagem aqui

  • dockerVersão20.10.6
  • docker-composeVersão1.28.5

2.2 Configuração do Mysql e XtraBackup

A estrutura de diretórios é a seguinte:

insira a descrição da imagem aqui

MysqlArquivo de configuração my.cnf:

# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html

[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M

# Remove leading # to revert to previous value for default_authentication_plugin,
# this will increase compatibility with older clients. For background, see:
# https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin
# default-authentication-plugin=mysql_native_password
default-time_zone='+8:00'
log-bin
log_bin_trust_function_creators=1
lower_case_table_names=1
skip-host-cache
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=/var/lib/mysql-files
user=mysql
innodb_undo_tablespaces=2
innodb_read_only=off
pid-file=/var/run/mysqld/mysqld.pid
[client]
socket=/var/run/mysqld/mysqld.sock

# !includedir /etc/mysql/conf.d/

docker-compose.yml

version: "3.8"
# 通用日志设置
x-logging:
    &default-logging
    # 日志大小和数量
    options:
        max-size: "100m"
        max-file: "3"
    # 文件存储类型
    driver: json-file
services:
  mysql:
    container_name: mysql
    image: mysql:8.0.32
    user: 999:999
    environment:
      - MYSQL_ROOT_PASSWORD=1qaz@WSX
    volumes:
      - data_volume:/var/lib/mysql
      - backup_volume:/backup
      - /root/apps/mysql/my.cnf:/etc/my.cnf:ro
      - /etc/timezone:/etc/timezone:ro
    logging: *default-logging
    ports:
      - "3306:3306"
  xtrabackup-command:
    container_name: xtrabackup-command-line
    image: percona/percona-xtrabackup:8.0.32
    user: 999:999
    restart: always
    depends_on:
      - mysql
    volumes_from:
      - mysql
    command: tail -f /dev/null
volumes:
  data_volume:
    driver: local
  backup_volume:
    driver: local

Nota 1:

  • xtrabackup: Por favor, mantenha XtraBackupa versão e Mysqla versão consistentes.
  • volumes_from: indica que docker mysqlo contêiner usa as mesmas informações de volume que o contêiner
  • user: Indica que o contêiner é executado com o usuário especificado mysqle , UIDpara GID, o usuário é o mesmo do usuário para evitar problemas de permissão de arquivo.999:999xtrabackupmysql
  • command: tail -f /dev/null: Use este comando para xtrabackup-command-linetornar o contêiner residente como um serviço, o que é conveniente para a demonstração subsequente do processo de uso.

Nota 2:

  • data_volume: Use a ligação do volume de dados local, o local padrão: /var/lib/docker/volumes/mysql_data_volume/_data, porque o contêiner mencionado acima é executado com o usuário especificado, você precisa alterar as permissões deste diretório, execute fora do contêiner:chmod 777 -R /var/lib/docker/volumes/mysql_data_volume/_data
  • backup_volume: Use a ligação do volume de dados local, o local padrão: /var/lib/docker/volumes/mysql_backup_volume/_data, porque o contêiner mencionado acima é executado com o usuário especificado, você precisa alterar as permissões deste diretório, execute fora do contêiner:chmod 777 -R /var/lib/docker/volumes/mysql_backup_volume/_data

2.3 Iniciar o serviço

cd /root/apps/mysql
docker-compose up -d

insira a descrição da imagem aqui

2.4 Preparar dados de teste

create DATABASE t1;
use t1;
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  `gender` int NULL DEFAULT 0,
  `birthday` varchar(10) DEFAULT NULL,
  `address` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1;
INSERT INTO `user` ( id, name, gender, birthday, address ) VALUES( 1, '张三', 1, '2023-08-06', '黑龙江');
select * from `user`;

insira a descrição da imagem aqui

3. Explicação detalhada do uso do XtraBackup

3.1 Introdução aos Parâmetros Comuns

Percona XtraBackupDescrições de alguns parâmetros comumente usados ​​e seus valores padrão:

  • --backup: executa uma operação de backup, que é habilitada por padrão.

  • --target-dir=<caminho do diretório>: Especifique o caminho do diretório onde o arquivo de backup está armazenado.

  • --incremental-basedir=<caminho do diretório>: especifica o caminho do diretório base do backup incremental, indicando em qual backup completo o backup incremental se baseia.

  • --prepare: executa operações de preparação em arquivos de backup, desativado por padrão.

  • --copy-back:Copie os arquivos de backup de volta para o diretório do banco de dados para operações de restauração, desabilitadas por padrão.

  • --apply-log: aplica logs de transações em arquivos de backup para operações de restauração, desabilitadas por padrão.

  • --datadir=<caminho do diretório>: Especifique o caminho do diretório de dados do banco de dados, o padrão é o diretório de dados especificado no arquivo de configuração do MySQL.

  • --defaults-file=<caminho do arquivo>: Especifique o caminho do arquivo de configuração para backup e restauração, o padrão é o caminho do arquivo de configuração padrão do MySQL.

  • --user=<username>: Especifique o nome de usuário usado ao se conectar ao banco de dados, o padrão é o usuário atual do sistema.

  • --password=<senha>: Especifica a senha utilizada na conexão com o banco de dados, que por padrão está vazia.

  • --host=<nome do host>: Especifique o nome do host usado ao conectar-se ao banco de dados, o padrão é localhost.

  • --port=<número da porta>: Especifique o número da porta usada ao conectar ao banco de dados, o padrão é 3306.

  • --compress: Use o algoritmo de compactação durante o backup para reduzir o tamanho do arquivo de backup, o padrão é desabilitado.

  • --compress-threads=<número de threads>: especifica o número de threads usados ​​para compactar o arquivo de backup, o padrão é 1.

  • --encrypt: criptografar arquivos de backup durante o backup, desativado por padrão.

  • --encrypt-key=<chave>: Especifica a chave usada para criptografia do arquivo de backup.

  • --stream=<tipo de fluxo>: saída dos dados de backup para saída padrão, arquivo ou soquete de rede na forma de fluxo, o padrão é desabilitado.

3.2 Backup e restauração completos

3.2.1 Acesso ao contêiner

docker exec -it xtrabackup-command-line /bin/bash

insira a descrição da imagem aqui

3.2.2 Criar um backup completo

xtrabackup --backup --datadir=/var/lib/mysql --target-dir=/backup/full --user=root --password="1qaz@WSX" --port=3306 --host=192.168.0.50 --no-server-version-check

Precauções:

  • O diretório de destino não existe, XtraBackupele será criado.
  • diretório existe e está vazio, XtraBackupterá sucesso.
  • O diretório existe e não está vazio, XtraBackupos arquivos existentes não são substituídos e falha em tempo de execução com um erro de sistema 17, file exists.

insira a descrição da imagem aqui

3.2.3 Exibir backup completo

ls -lh /backup/full

Precauções:

  • Os backups podem demorar muito, dependendo do tamanho do banco de dados. É seguro cancelar a qualquer momento, pois XtraBackupo banco de dados não será modificado.

insira a descrição da imagem aqui

3.2.4 Simular danos ao banco de dados original

  • fechar recipiente
docker stop mysql
  • excluir arquivo de banco de dados
cd /var/lib/docker/volumes/mysql_data_volume/_data
rm -rf *

insira a descrição da imagem aqui

3.2.5 Prepare um backup completo

Depois de criar um backup, você precisa prepará-lo para restauração. Os arquivos de dados não são consistentes em um ponto no tempo até que sejam preparados, porque são copiados em momentos diferentes durante a execução do programa e podem ter sido alterados ao fazê-lo.

Se você tentar inicializar com esses arquivos de dados InnoDB, ele detectará a corrupção e parará de funcionar para evitar a execução em dados corrompidos. Esta etapa torna os arquivos totalmente consistentes em um único momento, para que você possa executá-los InnoDB.

Você pode executar a operação de preparação em qualquer máquina; ela não precisa estar no servidor original ou no servidor para o qual você está restaurando. Você pode copiar o backup para o servidor utilitário e prepará-lo lá.

Observe que Percona XtraBackup 8.0apenas prepare MySQL 8.0e backups do banco de dados são possíveis Percona Server for MySQL 8.0. Versões anteriores Percona XtraDB Cluster 8.0não são suportadas .8.0

Durante a operação de preparação, xtrabackupuma incorporada modificada InnoDB( extrabackupbiblioteca vinculada) é iniciada. InnoDBEssas modificações são necessárias para desativar as verificações de segurança padrão, como: o tamanho do arquivo de log não é apropriado. Este aviso não se aplica ao processamento de backups. Essas modificações se aplicam apenas aos extrabackupbinários; você não precisa dos modificados InnoDBpara usar xtrabackuppara backup.

A etapa de preparação usa esse "incorporado InnoDB" para executar a recuperação de falha nos arquivos de dados replicados usando os arquivos de log replicados. Esta etapa é muito simples de usar: basta executar com as opções xtrabackupe informar qual diretório preparar. A operação específica é a seguinte:

xtrabackup --prepare --target-dir=/backup/full

Precauções:

  • Interromper o processo durante a preparação de um backup não é recomendado, XtraBackuppois isso pode resultar em corrupção do arquivo de dados e o backup ficará inutilizável. A validade do backup não é garantida se o processo de preparação for interrompido.
  • Se você deseja que o backup seja a base para futuros backups incrementais, você deve usar a opção ao preparar o backup --apply-log-only, caso contrário, os backups incrementais não serão aplicados a ele. Para mais detalhes abaixo.

Feito isso, você deverá ver uma mensagem como a seguinte, onde LSNo valor de dependerá novamente do seu sistema: InnoDB shutdown:
insira a descrição da imagem aqui

3.2.6 Restauração de backup completo

Por conveniência, xtrabackupo binário pode opcionalmente ser copiado para o servidor datadir:

xtrabackup --copy-back --target-dir=/backup/full

Precauções:

  • O diretório de dados deve estar vazio antes de restaurar um backup. Além disso, é importante observar que o serviço precisa ser encerrado antes de executar a restauração MySQL. Você não pode restaurar para o diretório de dados de uma mysqldinstância em execução (exceto ao importar um backup parcial).
  • Você deve verificar se os arquivos restaurados têm a propriedade e as permissões corretas e, se necessário, executar: chown -R mysql:mysql /var/lib/mysqlfazer alterações de propriedade.

insira a descrição da imagem aqui

3.2.7 Inicie o banco de dados e verifique

docker restart mysql
use t1;
select * from `user`;

insira a descrição da imagem aqui
Até agora, a introdução completa de backup e restauração está concluída.

3.3 Backup e recuperação incrementais

3.3.1 Criar um backup completo

Precauções:

  • /var/lib/docker/volumes/mysql_backup_volume/_data/fullPrecisa limpar o diretório primeiro

Para obter detalhes, consulte os capítulos 3.2.1 , 3.2.2 e 3.2.3 acima , as etapas de operação e comandos são os mesmos

3.3.2 Adicionar dados incrementais 1️⃣

use t1;
INSERT INTO `user` ( id, name, gender, birthday, address ) VALUES(4, '七七', 1, '2023-08-06', '海南');
select * from `user`;

3.3.3 Criar backup incremental 1️⃣

xtrabackup --backup --target-dir=/backup/inc1 --incremental-basedir=/backup/full --user=root --password="1qaz@WSX" --port=3306 --host=192.168.0.50 --no-server-version-check

insira a descrição da imagem aqui

3.3.4 Adicionar dados incrementais 2️⃣

use t1;
INSERT INTO `user` ( id, name, gender, birthday, address ) VALUES(5, '八八', 1, '2023-08-06', '合肥');
select * from `user`;

3.3.5 Criar backup incremental 2️⃣

xtrabackup --backup --target-dir=/backup/inc2 --incremental-basedir=/backup/inc1 --user=root --password="1qaz@WSX" --port=3306 --host=192.168.0.50 --no-server-version-check

insira a descrição da imagem aqui

3.3.6 Preparar backup

As etapas de um backup incremental são diferentes das de um backup completo. Em um backup completo, dois tipos de operações são executados para manter o banco de dados consistente: as transações confirmadas são reproduzidas dos arquivos de log relativos aos arquivos de dados e as transações não confirmadas são revertidas.

Ao preparar backups incrementais, você deve ignorar a reversão de transações não confirmadas, porque as transações não confirmadas podem estar em andamento no momento do backup e provavelmente serão confirmadas no próximo backup incremental. Você deve usar --prepare --apply-log-onlyopções para evitar a fase de reversão.

3.3.6.1 Preparar um backup completo

xtrabackup --prepare --apply-log-only --target-dir=/backup/full --user=root --password="1qaz@WSX" --port=3306 --host=192.168.0.50 --no-server-version-check

Observações:
--prepare--apply-log-only: A fase de reversão é impedida pela configuração.

insira a descrição da imagem aqui

3.3.6.2 Preparar backup incremental 1️⃣

Para aplicar o primeiro backup incremental a um backup completo, execute o seguinte comando:

xtrabackup --prepare --apply-log-only --target-dir=/backup/full --incremental-dir=/backup/inc1 --user=root --password="1qaz@WSX" --port=3306 --host=192.168.0.50 --no-server-version-check

Precauções:

  • Esse backup pode ser restaurado com segurança como está, mesmo que a fase de reversão tenha sido ignorada. Se você restaurá-lo e inicializar MySQL, InnoDBele detectará que a fase de reversão não foi executada e o fará em segundo plano, assim como a recuperação de falhas normalmente faz na inicialização. Ele irá notificá-lo de que o banco de dados não foi encerrado corretamente.
  • Os dados finais estão /backup/fullno diretório.

insira a descrição da imagem aqui

3.3.6.3 Preparar backup incremental 2️⃣

O procedimento para preparar o segundo backup incremental é semelhante ao primeiro:

xtrabackup --prepare --target-dir=/backup/full --incremental-dir=/backup/inc2 --user=root --password="1qaz@WSX" --port=3306 --host=192.168.0.50 --no-server-version-check

Notas:
- --apply-log-only: deve ser usado ao mesclar backups incrementais ( exceto o último ). É por isso que a linha anterior não inclui essa opção. Mesmo que seja usado na última etapa, o backup permanecerá consistente, mas neste caso o servidor fará uma fase de rollback.

insira a descrição da imagem aqui

3.3.7 Simular danos ao banco de dados original

Consulte a seção 3.2.4 acima para obter detalhes , as etapas de operação e os comandos são os mesmos

3.2.8 Restauração de backup completo

xtrabackup --copy-back --target-dir=/backup/full

insira a descrição da imagem aqui

3.2.7 Inicie o banco de dados e verifique

docker restart mysql
use t1;
select * from `user`;

insira a descrição da imagem aqui
Até agora, a introdução de backup e recuperação incrementais está completa.

3.3 Outros

Sobre XtraBackupo backup compactado e o backup parcial serão apresentados posteriormente.

Referência: https://blog.51cto.com/u_11750496/6753459

Acho que você gosta

Origin blog.csdn.net/ctwy291314/article/details/132130938
Recomendado
Clasificación