1. Introdução ao XtraBackup
Percona XtraBackup
MySQL
é uma ferramenta de backup de banco de dados e software livre MariaDB
que 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 XtraBackup
sem parar MySQL
o servidor .InnoDB
Percona XtraBackup
As principais características são as seguintes:
-
Backup de alto desempenho:
Percona XtraBackup
capacidade 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 XtraBackup
UseInnoDB
um 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 XtraBackup
o 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 XtraBackup
você 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 XtraBackup
ele 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 XtraBackup
CompatívelMySQL
comMariaDB
e 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 Docker
ambiente.
docker
Versão20.10.6
docker-compose
Versão1.28.5
2.2 Configuração do Mysql e XtraBackup
A estrutura de diretórios é a seguinte:
Mysql
Arquivo 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, mantenhaXtraBackup
a versão eMysql
a versão consistentes.volumes_from
: indica quedocker mysql
o contêiner usa as mesmas informações de volume que o contêineruser
: Indica que o contêiner é executado com o usuário especificadomysql
e ,UID
paraGID
, o usuário é o mesmo do usuário para evitar problemas de permissão de arquivo.999:999
xtrabackup
mysql
command: tail -f /dev/null
: Use este comando paraxtrabackup-command-line
tornar 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
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`;
3. Explicação detalhada do uso do XtraBackup
3.1 Introdução aos Parâmetros Comuns
Percona XtraBackup
Descriçõ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
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,
XtraBackup
ele será criado.- diretório existe e está vazio,
XtraBackup
terá sucesso.- O diretório existe e não está vazio,
XtraBackup
os arquivos existentes não são substituídos e falha em tempo de execução com um erro de sistema17
,file exists
.
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
XtraBackup
o banco de dados não será modificado.
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 *
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.0
apenas prepareMySQL 8.0
e backups do banco de dados são possíveisPercona Server for MySQL 8.0
. Versões anterioresPercona XtraDB Cluster 8.0
não são suportadas .8.0
Durante a operação de preparação, xtrabackup
uma incorporada modificada InnoDB
( extrabackup
biblioteca vinculada) é iniciada. InnoDB
Essas 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 extrabackup
binários; você não precisa dos modificados InnoDB
para usar xtrabackup
para 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 xtrabackup
e 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,
XtraBackup
pois 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 LSN
o valor de dependerá novamente do seu sistema: InnoDB shutdown
:
3.2.6 Restauração de backup completo
Por conveniência, xtrabackup
o 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 umamysqld
instâ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/mysql
fazer alterações de propriedade.
3.2.7 Inicie o banco de dados e verifique
docker restart mysql
use t1;
select * from `user`;
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/full
Precisa 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
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
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-only
opçõ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.
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
,InnoDB
ele 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/full
no diretório.
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.
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
3.2.7 Inicie o banco de dados e verifique
docker restart mysql
use t1;
select * from `user`;
Até agora, a introdução de backup e recuperação incrementais está completa.
3.3 Outros
Sobre
XtraBackup
o backup compactado e o backup parcial serão apresentados posteriormente.
Referência: https://blog.51cto.com/u_11750496/6753459