首页 > 数据库 > 数据库开发技术 > 如何通过Binlog快速恢复数据库
XtraceBackup是由知名数据库软件服务企业Percona提供的一款热备工具,除了能够支持最为常见的MyISAM,INNODB引擎对象外,还支持XtraDB引擎。
yum install percona-xtrabackup -y
备份 高效 完整 可用
备份任务执行过程中不会有阻塞任务
节省磁盘空间,降低网络带宽占用
自动验证机制
恢复更快xtrabackup必须在MySQL服务端执行(但是创建的备份集不一定是保存在本地),特别是通过innobackupex命令创建备份集时,由于操作需要连接数据库获取信息,因此还要指定的连接参数(用户名,密码),而且连接所使用的的用户,必须拥有正确的操作权限。
percona官方在文档中说要在之后的版本中放弃innobackupex工具,推荐使用xtracebackupex工具
innobackupex的参数有很多,仅通过实例说明经常使用的,若需要某些参数可以查看官方文档!
备份很简单,/data/backup/为备份的目录innobackupex --user=root --password=123456 /data/backup/
如果开启了binlog 文件会有对应的二进制日志文件备份和position 位置,做PIT恢复时使用PIT恢复cat xtrabackup_info
uuid = d60d5b36-2dff-11eb-b1f7-000c29d7c710 # 当前数据库UUID
name =
tool_name = innobackupex #包含备份的工具,备份的命令,备份工具的版本,MySQL的版本
tool_command = /data/backup/ # 备份目录
tool_version = 2.3.6
ibbackup_version = 2.3.6
server_version = 5.5.68-MariaDB
start_time = 2020-11-23 21:50:34 #备份开始时间
end_time = 2020-11-23 21:50:39 # 备份结束时间
lock_time = 0
binlog_pos =
innodb_from_lsn = 0
innodb_to_lsn = 340415510 # 刷新到lsn(https://www.cnblogs.com/drizzle-xu/p/9713378.html)的位置
partial = N
incremental = N # 增量备份
format = file
compact = N
compressed = N
encrypted = N
此处我已经对当前数据库进行了删除操作
所谓准备恢复,就是要为恢复做准备。就是说备份集没办法直接拿来用,因为这中间可能存在未提交或未回滚的事务,数据文件不一致,所以需要一个队备份集的准备过程。innobackupex --apply-log /data/backup/2020-11-23_21-50-34/
innobackupex提供了--copy-back参数,就是将指定的备份集,恢复到指定的路径下面(这个指定的路径是配置文件中datadir指定的路径)!停止数据库systemctl stop mariadbrm -rf /var/lib/mysql # 线上环境先备份 原数据目录innobackupex --copy-back /data/backup/2020-11-23_21-50-34/complete 完成后 会发现新建了一个mysql 权限修改chown -R mysql.mysql /var/lib/mysql启动数据库 发现数据已经恢复了
有时候因为socket文件不在默认位置,可以使用--socket指定位置:
innobackupex --user=root --password=123456 --no-timestamp /data/backup/full_backup创建一个张表后插入几条数据
create table tb3(a varchar(5), sysTime datetime);
insert into tb3 select "aa", now();
insert into tb3 select "bb", now();
select * from tb3;
innobackupex --user=root --password=123456 --no-timestamp --incremental /data/backup/incre1 --incremental-basedir=/data/backup/full_backup
--no-timestamp: 上面已经说过,自己定义备份集的名字
--incremental /data/backup/incre1 :参数说明这次备份时一个增量备份,后面的路径指定增量备份的目录
--incremental-basedir=/data/backup/full_backup :增量备份时基于全备的,这个参数就是说明本次的增量备份时基于那次的全备,指向全备的目录文件
备份全库备份cp -r 2020-11-23_22-26-38 2020-11-23_22-26-38.bakll
cd incre1 mv 2020-11_22-55-29/* .
innobackupex --apply-log --redo-only --use-memory=1G /data/backup/2020-11-23_22-26-38
--use-memory=1G #表示使用的内存大小把增量备份在全备上面回放,也就是把增量备份附加到全备上。
innobackupex --apply-log --redo-only /data/backup/2020-11-23_22-26-38 --incremental-dir=/data/backup/incre1整个恢复操作分为两步:
1:准备全部备份,保证文件的一致性。
2:把所有的增量备份附加到全备备份上。如果有多个增量备份,则每一个增量备份文件都要执行附加操作。但是要注意顺序,可以查看增量备份的xtrabackup_checkpoints文件根据lsn来确定文件的顺序
drop database fiberstore_cnsystemctl stop mariadbrm -rf /var/lib/mysqlinnobackupex --copy-back /data/backup/2020-11-23_22-26-38chown -R mysql.mysql /var/lib/mysqlsystemctl start mairadbmysql fiberstore_cn -e "select * from tb3"
发现数据已经恢复
原文作者:步步运维步步坑;如有侵权,请联系管理员删除。