网页制作公司业务部门负责人工作,网站排名优化软件哪家好,深圳市律师网站建设怎么样,wordpress模版使用教程一、XtraBackup 简介
Percona XtraBackup是一个开源的MySQL和MariaDB数据库备份工具#xff0c;它能够创建高性能、一致性的备份#xff0c;并且对生产环境的影响很小。Percona XtraBackup通过在不停止MySQL服务器的情况下#xff0c;复制InnoDB存储引擎的数据文件和事务日…一、XtraBackup 简介
Percona XtraBackup是一个开源的MySQL和MariaDB数据库备份工具它能够创建高性能、一致性的备份并且对生产环境的影响很小。Percona XtraBackup通过在不停止MySQL服务器的情况下复制InnoDB存储引擎的数据文件和事务日志来实现备份和还原操作。
Percona XtraBackup的主要特点如下 高性能备份Percona XtraBackup能够以并行方式备份数据库提供快速备份速度并且对生产系统影响较小。 一致性备份Percona XtraBackup使用InnoDB特定的算法来确保备份的一致性即备份的数据文件和事务日志是同一时刻的状态。 增量备份Percona XtraBackup支持增量备份可以根据之前的全量备份来创建增量备份减少备份时间和存储空间的消耗。 支持压缩和加密Percona XtraBackup可以在备份过程中使用压缩算法来减小备份文件的大小还可以对备份文件进行加密提高数据的安全性。 灵活的备份恢复Percona XtraBackup支持将备份文件复制回数据库目录进行恢复也支持以流的方式输出备份数据进行恢复。 兼容性Percona XtraBackup兼容MySQL和MariaDB可以在不同版本的数据库上使用。
总之Percona XtraBackup是一个强大而灵活的数据库备份工具它可以帮助数据库管理员轻松地创建可靠的备份并在需要时进行高效的还原操作。无论是用于生产环境的数据保护还是用于开发和测试环境的数据复制Percona XtraBackup都是一个可靠的选择。
官网地址https://docs.percona.com/percona-xtrabackup/8.0/
二、环境及部署
2.1 运行环境介绍
本章节所有演示操作均在Docker环境下。 docker 版本 20.10.6docker-compose 版本1.28.5
2.2 Mysql及XtraBackup配置
目录结构如下 Mysql配置文件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-pluginmysql_native_password
default-time_zone8:00
log-bin
log_bin_trust_function_creators1
lower_case_table_names1
skip-host-cache
skip-name-resolve
datadir/var/lib/mysql
socket/var/run/mysqld/mysqld.sock
secure-file-priv/var/lib/mysql-files
usermysql
innodb_undo_tablespaces2
innodb_read_onlyoff
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: 100mmax-file: 3# 文件存储类型driver: json-file
services:mysql:container_name: mysqlimage: mysql:8.0.32user: 999:999environment:- MYSQL_ROOT_PASSWORD1qazWSXvolumes:- data_volume:/var/lib/mysql- backup_volume:/backup- /root/apps/mysql/my.cnf:/etc/my.cnf:ro- /etc/timezone:/etc/timezone:rologging: *default-loggingports:- 3306:3306xtrabackup-command:container_name: xtrabackup-command-lineimage: percona/percona-xtrabackup:8.0.32user: 999:999restart: alwaysdepends_on:- mysqlvolumes_from:- mysqlcommand: tail -f /dev/null
volumes:data_volume:driver: localbackup_volume:driver: local注意事项一 xtrabackup请XtraBackup版本和Mysql版本保持一致。volumes_from表示和docker mysql容器使用相同的容器卷信息user表示容器运行使用指定的用户mysql的UID和GID为999:999xtrabackup用户与mysql相同出现避免文件权限问题。command: tail -f /dev/null通过此命令将容器xtrabackup-command-line进行服务常驻方便后续使用过程演示。 注意事项二 data_volume使用本地数据卷绑定默认位置/var/lib/docker/volumes/mysql_data_volume/_data因上文中提到容器运行使用指定的用户需更改此目录权限容器外部执行chmod 777 -R /var/lib/docker/volumes/mysql_data_volume/_databackup_volume使用本地数据卷绑定默认位置/var/lib/docker/volumes/mysql_backup_volume/_data因上文中提到容器运行使用指定的用户需更改此目录权限容器外部执行chmod 777 -R /var/lib/docker/volumes/mysql_backup_volume/_data 2.3 启动服务
cd /root/apps/mysql
docker-compose up -d2.4 准备测试数据
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;三、XtraBackup使用详解
3.1 常用参数介绍
Percona XtraBackup中一些常用参数的说明及其默认值 --backup执行备份操作默认为启用。 --target-dir目录路径指定备份文件存储的目录路径。 --incremental-basedir目录路径指定增量备份的基准目录路径表示该增量备份是基于哪个全量备份进行的。 --prepare对备份文件执行准备操作默认为禁用。 --copy-back将备份文件复制回数据库目录用于还原操作默认为禁用。 --apply-log在备份文件上应用事务日志用于还原操作默认为禁用。 --datadir目录路径指定数据库的数据目录路径默认为MySQL配置文件中指定的数据目录。 --defaults-file文件路径指定用于备份和还原的配置文件路径默认为MySQL的默认配置文件路径。 --user用户名指定连接数据库时使用的用户名默认为当前系统用户。 --password密码指定连接数据库时使用的密码默认为空。 --host主机名指定连接数据库时使用的主机名默认为localhost。 --port端口号指定连接数据库时使用的端口号默认为3306。 --compress在备份过程中使用压缩算法以减小备份文件的大小默认为禁用。 --compress-threads线程数指定用于压缩备份文件的线程数默认为1。 --encrypt在备份过程中对备份文件进行加密默认为禁用。 --encrypt-key密钥指定用于备份文件加密的密钥。 --stream流类型将备份数据以流的方式输出到标准输出、文件或网络套接字默认为禁用。
3.2 完整备份及恢复
3.2.1 进入容器
docker exec -it xtrabackup-command-line /bin/bash3.2.2 创建完整备份
xtrabackup --backup --datadir/var/lib/mysql --target-dir/backup/full --userroot --password1qazWSX --port3306 --host192.168.0.50 --no-server-version-check注意事项 目标目录不存在XtraBackup 会创建它。目录存在且为空XtraBackup 将成功。目录存在且为不为空XtraBackup不会覆盖现有文件它会在运行时失败显示系统错误17 file exists。 3.2.3 查看完整备份
ls -lh /backup/full注意事项 备份可能需要很长时间具体取决于数据库的大小。随时取消是安全的因为XtraBackup不会修改数据库。 3.2.4 模拟原数据库损坏
关闭容器
docker stop mysql删除数据库文件
cd /var/lib/docker/volumes/mysql_data_volume/_data
rm -rf *3.2.5 准备完整备份
创建备份后您需要对其进行准备以进行还原。在准备好数据文件之前数据文件在时间点上是不一致的因为它们是在程序运行的不同时间复制的并且在执行此操作时可能已被更改。
如果你试图用这些数据文件启动InnoDB它会检测到损坏并停止工作以避免在损坏的数据上运行。该步骤使文件在单个时刻完全一致因此您可以在它们上运行InnoDB。
您可以在任何机器上运行准备操作它不需要位于原始服务器或要恢复到的服务器上。您可以将备份复制到实用工具服务器并在那里进行准备。 请注意Percona XtraBackup 8.0只能准备MySQL 8.0、Percona Server for MySQL 8.0和Percona XtraDB Cluster 8.0数据库的备份。不支持8.0之前的版本。 在准备操作期间xtrabackup启动了一种经过修改的嵌入式InnoDBextrabackup链接的库。这些修改对于禁用InnoDB标准安全检查是必要的例如日志文件大小不合适。此警告不适用于处理备份。这些修改仅适用于extrabackup二进制文件您不需要修改后的InnoDB即可使用xtrabackup进行备份。
准备步骤使用这个“嵌入式InnoDB”使用复制的日志文件对复制的数据文件执行崩溃恢复。该步骤使用起来非常简单您只需使用选项运行xtrabackup并告诉它要准备哪个目录。具体操作如下
xtrabackup --prepare --target-dir/backup/full注意事项 不建议在准备备份时中断XtraBackup过程因为这可能会导致数据文件损坏并且备份将变得不可用。如果准备过程中断则不保证备份有效性。如果希望备份作为进一步增量备份的基础则应在准备备份时使用--apply-log-only选项否则将无法对其应用增量备份。有关更多详细下文介绍。 完成此操作后您应该会看到如下所示的消息其中 LSN 的值将再次取决于您的系统InnoDB shutdown
3.2.6 完整备份还原
为方便起见xtrabackup 二进制文件可以选择将备份复制到服务器的 datadir
xtrabackup --copy-back --target-dir/backup/full注意事项 在还原备份之前数据目录必须为空。此外请务必注意在执行还原之前需要关闭MySQL服务。您无法还原到正在运行的 mysqld 实例的数据目录导入部分备份时除外。应该检查还原的文件是否具有正确的所有权和权限需要时可执行chown -R mysql:mysql /var/lib/mysql进行所有权更改。 3.2.7 启动数据库及验证
docker restart mysqluse t1;
select * from user;至此完整备份及恢复介绍完毕。
3.3 增量备份及恢复
3.3.1 创建完整备份 注意事项 需先清空/var/lib/docker/volumes/mysql_backup_volume/_data/full目录 详见上文3.2.1、3.2.2、3.2.3章节操作步骤及命令一致 3.3.2 添加增量数据1️⃣
use t1;
INSERT INTO user ( id, name, gender, birthday, address ) VALUES(4, 七七, 1, 2023-08-06, 海南);
select * from user;3.3.3 创建增量备份1️⃣
xtrabackup --backup --target-dir/backup/inc1 --incremental-basedir/backup/full --userroot --password1qazWSX --port3306 --host192.168.0.50 --no-server-version-check3.3.4 添加增量数据2️⃣
use t1;
INSERT INTO user ( id, name, gender, birthday, address ) VALUES(5, 八八, 1, 2023-08-06, 合肥);
select * from user;3.3.5 创建增量备份2️⃣
xtrabackup --backup --target-dir/backup/inc2 --incremental-basedir/backup/inc1 --userroot --password1qazWSX --port3306 --host192.168.0.50 --no-server-version-check3.3.6 准备备份
增量备份的步骤与完整备份的步骤不同。在完全备份中执行两种类型的操作以使数据库保持一致已提交的事务从日志文件相对于数据文件重播未提交的事务回滚。
在准备增量备份时您必须跳过未提交事务的回滚因为备份时未提交的事务可能正在进行中而且很可能会在下一次增量备份中提交。您应该使用--prepare --apply-log-only选项来阻止回滚阶段。
3.3.6.1 准备完整备份
xtrabackup --prepare --apply-log-only --target-dir/backup/full --userroot --password1qazWSX --port3306 --host192.168.0.50 --no-server-version-check注意事项 --prepare--apply-log-only通过配置来阻止回滚阶段。 3.3.6.2 准备增量备份1️⃣
将第一个增量备份应用于完整备份请运行以下命令
xtrabackup --prepare --apply-log-only --target-dir/backup/full --incremental-dir/backup/inc1 --userroot --password1qazWSX --port3306 --host192.168.0.50 --no-server-version-check注意事项 此备份实际上可以安全地按原样还原即使已跳过回滚阶段也是如此。如果您还原它并启动MySQLInnoDB将检测到未执行回滚阶段并且它将在后台执行此操作就像通常在启动时进行崩溃恢复一样。它将通知您数据库未正常关闭。最终数据在/backup/full目录中。 3.3.6.3准备增量备份2️⃣
准备第二个增量备份的过程与第一个类似
xtrabackup --prepare --target-dir/backup/full --incremental-dir/backup/inc2 --userroot --password1qazWSX --port3306 --host192.168.0.50 --no-server-version-check注意事项 ---apply-log-only在合并增量备份最后一个备份除外时应使用。这就是上一行不包含该选项的原因。即使在最后一步中使用了 备份仍将保持一致但在这种情况下服务器将执行回滚阶段。 3.3.7 模拟原数据库损坏 详见上文3.2.4章节操作步骤及命令一致 3.2.8 完整备份还原
xtrabackup --copy-back --target-dir/backup/full3.2.7 启动数据库及验证
docker restart mysqluse t1;
select * from user;至此增量备份及恢复介绍完毕。
3.3 其他 关于XtraBackup压缩备份及部分备份稍后整理介绍。 参考https://blog.51cto.com/u_11750496/6753459