MYSQL备份工具 Percona

Percona Xtrabackup是一款针对MySQL的物理备份工具,尤其适合InnoDB表。它通过拷贝数据并跟踪日志变化实现备份,同时支持全备和增量备份。在恢复时,能确保数据一致性。使用innobackupex命令进行备份、增量备份、预处理和恢复操作,适用于主从复制环境,有助于提升备份效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Mysql备份工具 percona
官网:https://www.percona.com/
安装percona-xtrabackup
yum -y localinstall percona-xtrabackup-24-2.4.12-1.el6.x86_64.rpm
percona xtrabackup 是基于innodb的物理拷贝,工作原理,先拷贝,拷贝的同时有一个线关注log线程的变化,有变化就拷贝,拷贝完毕后有一个应用日志的操作,最后给出一个唯一的日志点

  1. 针对非InnoDB,进行锁表备份,copy所有的非innoDB表文件
  2. 针对InnoDB表,立即触发CKPT(将脏页写入磁盘),copy所有InnoDB表相关的文件(ibdata1,ibd,frm).
    并且将备份过程中产生,新的数据变化的部分redo一起备份走
  3. 在恢复时,xbk会调用InnoDB引擎的CSR过程,将数据和redo的LSN追平,然后进行一致性恢复.

备份产生的文件介绍
(1) xtrabackup_binlog_info *****
记录备份时刻的二进制日志信息. 可以作为binlog截取的起点.
(2) xtrabackup_checkpoints *****
from : 备份中包含的LSN号的起点,全备:0,增量:上次备份的结束位置
to : ckpt 时的LSN
last-9 : 备份结束时的LSN.下次增量备份的起始位置.

备份
innobackupex --defaults-file="/etc/my.cnf" --user=root --password=xxxx --socket=/tmp/mysql.sock /tmp
可选参数 --parallel 例:–parallel=5 开启5个进程
此参数用于开启多个子进程并发备份多个数据文件(注意,一个数据文件只会有一个进程完成备份)。可以加快备份速度。但是在服务器资源不足时,谨慎使用。
–no-timestamp 备份时不生成年月日的目录 可以自己指定目录 --no-timestamp /backup/full
简单写法
innobackupex --user=root --password=123 --no-timestamp /backup/full

第一次增量备份
innobackupex --defaults-file="/etc/my.cnf" --user=root --password=xxxx --socket=/tmp/mysql.sock --incremental /tmp --incremental-basedir=/tmp/2018-12-07_11-46-45/
注:–incremental /tmp 备份的路径
–incremental-basedir=/tmp/2018-12-07_11-46-45/ 上一次备份的路径 会读取里面的位置点然后做增量备份 备份后存储到/tmp路径下
在这里插入图片描述

第二次增量备份
命令没有变化 --incremental-basedir 读取路径必须要是上一次增量备份保存的路径
在执行过增量备份之后再一次进行增量备份时,其–incremental-basedir应该指向上一次的增量备份所在的目录

备份文件预处理
把备份数据发送给从节点
在从节点预处理 (主库也可以操作 然后把处理后的文件scp给从库)
innobackupex --defaults-file="/etc/my.cnf" --user=root --password=xxxx --socket=/tmp/mysql.sock --apply-log --use-memory=1G /tmp/2018-12-07_11-46-45/
注:-use-memory=1G 是用内存处理 尽量给的大

如果有增量备份的情况 生产环境应用如下操作
第一步 处理全量备份
innobackupex --defaults-file="/etc/my.cnf" --user=root --password=xxxx --socket=/tmp/mysql.sock --apply-log --use-memory=1G --redo-only /tmp/2018-12-07_11-46-45/
第二步 处理增量备份
innobackupex --defaults-file="/etc/my.cnf" --user=root --password=xxxx --socket=/tmp/mysql.sock --apply-log --use-memory=1G --redo-only /tmp/2018-12-07_11-46-45/ --incremental-dir=/tmp/2018-12-08_11-46-45/ #第一次增量备份的路径 然后依次类推恢复增量

注:备份和处理数据的时候–incremental是不同的
增量备份 --incremental-basedir
处理增量备份 --incremental-dir

恢复备份
预处理后恢复数据 首先要关闭从库mysql服务
清空mysql的data目录下文件,包括ibdata、各个数据库文件,注意,若binlog目录在data目录下,不能删除binlog!
删除data数据是因为move-back时不会覆盖原来的数据。
处理完全备和所有增量备份后 恢复数据时只需要恢复全备的路径 因为处理增量备份的时候会把增量的数据合并入全备

innobackupex --defaults-file="/etc/my.cnf" --user=root --password=xxx --socket=/tmp/mysql.sock --move-back /tmp/2018-12-07_11-46-45/
其实–move-back就是将备份拷贝回到datadir下 datadir路径必须在my.cof存在 比copy-back快 或直接把/tmp/2018-12-07_11-46-45/中文件直接拷贝到datadir也可以
注:恢复后的数据的权限可能会有问题因为我是用root账号操作的 把文件权限恢复为mysql chown -R mysql.mysql /usr/local/mysql/data/

错误总结:
Error: datadir must be specified. # 报错信息显示,在默认配置文件 /etc/my.cnf 中,没有找到 datadir 配置项 datadir = /usr/local/mysql/data
如果恢复备份后mysql无法启动 查看/usr/local/mysql/data中文件权限如果不是mysql更改所属主所属组 chown -R mysql.mysql /usr/local/mysql/data/

复制环境全量备份
生产环境都是主从模式,主提供服务,从提供备份,在从服务器上进行全备

innobackupex --defaults-file="/etc/my.cnf" --user=root --password=xxxx --socket=/tmp/mysql.sock --slave-info --safe-slave-backup /tmp
–slave-info:该选项表示对slave进行备份的时候使用,打印出master的名字和binlogpos,同样将这些信息以change master的命令写入xtrabackup_slave_info文件。可以通过基于这份备份新启动一个从库
–safe-slave-backup:该选项表示为保证一致性复制状态

复制环境增量备份
innobackupex --defaults-file="/etc/my.cnf" --user=root --password=xxxx --socket=/tmp/mysql.sock --slave-info --safe-slave-backup --incremental /tmp --incremental-basedir=/tmp/2018-12-07_11-46-45/

做主从查看位置点
cat /usr/local/mysql/data/xtrabckup_binlog_pos_innodb

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值