使用xtrabackup对Mysql备份恢复

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: 使用xtrabackup对Mysql备份恢复
备份原理:XtraBackup基于InnoDB的crash-recovery功能。它会复制innodb的data file,由于不锁表,复制出来的数据是不一致的,在恢复的时候使用crash-recovery,使得数据恢复一致。InnoDB维护了一个redo log,又称为transaction log,事务日志,它包含了innodb数据的所有改动情况。XtraBackup在备份的时候, 一页一页地复制innodb的数据,而且不锁定表,与此同时,XtraBackup还有另外一个线程监视着transactions log,一旦log发生变化,就把变化过的log pages复制走
增量备份的原理:在完整备份和增量备份文件中都有一个文件xtrabackup_checkpoint会记录备份完成时的检查点lsn,在进行新的增量备份时,xtrabackup会比较表空间中每页的lsn是否大于上次备份完成的lsn,若果是,则备份该页,并记录当前检查点lsn

恢复原理:使用备份文件进行恢复是基于:InnoDB启动时会先去检查data file和transaction log,查看两者的一致性,然后进行crash recovery


一、全备恢复过程

1、全备
./innobackupex  --defaults-file=/etc/my.cnf  --no-timestamp --user root --socket=/var/lib/mysql/mysql.sock --password root /work/bak/all-20170607-bak

171018 23:19:41 Backup created in directory '/work/bak/all-20170607-bak/'
MySQL binlog position: filename 'binlog.000003', position '154'
171018 23:19:41 [00] Writing /work/bak/all-20170607-bak/backup-my.cnf
171018 23:19:41 [00]        ...done
171018 23:19:41 [00] Writing /work/bak/all-20170607-bak/xtrabackup_info
171018 23:19:41 [00]        ...done
xtrabackup: Transaction log of lsn (2561401) to (2561410) was copied.
171018 23:19:41 completed OK!


备份目录下相关文件

[root@ttt all-20170607-bak]# ll
total 12336
-rw-r-----. 1 root root      426 Oct 18 23:19 backup-my.cnf
drwxr-x---. 2 root root     4096 Oct 18 23:19 bhs
-rw-r-----. 1 root root      306 Oct 18 23:19 ib_buffer_pool
-rw-r-----. 1 root root 12582912 Oct 18 23:19 ibdata1
drwxr-x---. 2 root root     4096 Oct 18 23:19 mysql
drwxr-x---. 2 root root     4096 Oct 18 23:19 performance_schema
drwxr-x---. 2 root root    12288 Oct 18 23:19 sys
-rw-r-----. 1 root root       18 Oct 18 23:19 xtrabackup_binlog_info
-rw-r-----. 1 root root      113 Oct 18 23:19 xtrabackup_checkpoints
-rw-r-----. 1 root root      562 Oct 18 23:19 xtrabackup_info
-rw-r-----. 1 root root     2560 Oct 18 23:19 xtrabackup_logfile
[root@ttt all-20170607-bak]# more xtrabackup_binlog_info
binlog.000003 154
[root@ttt all-20170607-bak]# 
[root@ttt all-20170607-bak]# more xtrabackup_checkpoints
backup_type = full-backuped
from_lsn = 0
to_lsn = 2561401
last_lsn = 2561410
compact = 0
recover_binlog_info = 0

模拟删除库bhs下的test表


--no-timestamp 自定义备份文件名字,若不加会自动命名


2、恢复
./innobackupex  --defaults-file=/etc/my.cnf --user root --socket=/var/lib/mysql/mysql.sock --password root  --apply-log /work/bak/all-20170607-bak

--apply-log恢复已提交的前滚,没提交回滚

InnoDB: 96 redo rollback segment(s) found. 1 redo rollback segment(s) are active.
InnoDB: 32 non-redo rollback segment(s) are active.
InnoDB: Waiting for purge to start
InnoDB: 5.7.13 started; log sequence number 2561557
xtrabackup: starting shutdown with innodb_fast_shutdown = 1
InnoDB: FTS optimize thread exiting.
InnoDB: Starting shutdown...
InnoDB: Shutdown completed; log sequence number 2561576
171018 23:39:21 completed OK!

3、到备份集目录下 cp -R * /mysql/

[root@ttt mysql]# ll
total 12
drwxr-x---.  6 root  root  4096 Oct 18 23:41 all-20170607-bak
drwxr-xr-x.  6 mysql mysql 4096 Oct 18 21:46 data
drwxr-xr-x. 10 mysql mysql 4096 Oct 11 15:05 mysql
[root@ttt mysql]# pwd
/mysql      

4、mysqladmin -u root -p shutdown   之后将之前的mysql的数据目录备份  mv data data.bak,然后将cp过来的备份集 mv  all-20170607-bak data,修改data的权限  
5、重启mysql,完成全备恢复

查看验证表test是否存在:存在
mysql> show tables;
+---------------+
| Tables_in_bhs |
+---------------+
| test          |
+---------------+
1 row in set (0.00 sec)



二、增量备份恢复

1、全备
./innobackupex --no-timestamp --defaults-file=/etc/my.cnf --user root --socket=/tmp/mysql.sock --password 12345 /mysql/mysql/data/bak/all-20150906-bak


2、插入数据,做一次增量备份

./innobackupex --no-timestamp --user root --socket=/tmp/mysql.sock --password --defaults-file=/etc/my.cnf --incremental--incremental-basedir=/data/all-20150906-bak  /data/xtrabackup/all-20150907-incr

--incremental-basedir=/data/all-20150906-bak 为全备份目录     /data/xtrabackup/all-20150907-incr为增量备份
3、继续插入数据,再做一次增量备份


./innobackupex --no-timestamp --user root --socket=/tmp/mysql.sock --password --defaults-file=/etc/my.cnf--incremental--incremental-basedir=/data/xtrabackup/all-20150907-incr /data/xtrabackup/all-20150908-incr

/data/xtrabackup/all-20150907-incr指向为上一次增量备份目录,/data/xtrabackup/all-20150908-incr指向为增量备份
4、将表删除测试恢复

5、
./innobackupex --user root --socket=/tmp/mysql.sock --password --defaults-file=/etc/my.cnf --apply-log --redo-only /data/xtrabackup/all-20150906-bak
-------------------------------redo-only只应用redo日志

将第一次增量备恢复到全备内
./innobackupex --user root --socket=/tmp/mysql.sock --password --defaults-file=/etc/my.cnf --apply-log --redo-only /data/xtrabackup/all-20150906-bak --incremental-dir=/data/xtrabackup/all-20150907-incr
将第二次增量备恢复到全备内
./innobackupex --user root --socket=/tmp/mysql.sock --password --defaults-file=/etc/my.cnf --apply-log --redo-only /data/xtrabackup/all-20150906-bak --incremental-dir=/data/xtrabackup/all-20150908-incr

最后一步
./innobackupex --user root --socket=/tmp/mysql.sock --password --defaults-file=/etc/my.cnf --apply-log /data/xtrabackup/all-20150906-bak


6、到备份集目录下 cp -R * /mysql/
关库mysqladmin -u root -p shutdown (底层copy-关不关都行)
将应用的mysql全备份  mv data data_bak
然后将cp过来的备份集 mv  all-20150903-bak data
之后改权限重启mysql       完成


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
7月前
|
存储 关系型数据库 MySQL
在CentOS 8.x上安装Percona Xtrabackup工具备份MySQL数据步骤。
以上就是在CentOS8.x上通过Perconaxtabbackup工具对Mysql进行高效率、高可靠性、无锁定影响地实现在线快速全量及增加式数据库资料保存与恢复流程。通过以上流程可以有效地将Mysql相关资料按需求完成定期或不定期地保存与灾难恢复需求。
554 10
|
存储 关系型数据库 MySQL
利用Xtrabackup进行mysql增量备份和全量备份
利用Xtrabackup进行mysql增量备份和全量备份
1511 0
|
SQL 存储 关系型数据库
MySQL备份:mydumper 备份恢复工具生产实战
MySQL备份:mydumper 备份恢复工具生产实战
|
关系型数据库 MySQL 机器人
【MySQL】两个脚本自动化搞定 MySQL 备份恢复--XtraBackup
【MySQL】两个脚本自动化搞定 MySQL 备份恢复--XtraBackup
|
运维 关系型数据库 MySQL
"MySQL运维精髓:深入解析数据库及表的高效创建、管理、优化与备份恢复策略"
【8月更文挑战第9天】MySQL是最流行的开源数据库之一,其运维对数据安全与性能至关重要。本文通过最佳实践介绍数据库及表的创建、管理与优化,包括示例代码。涵盖创建/删除数据库、表结构定义/调整、索引优化和查询分析,以及数据备份与恢复等关键操作,助您高效管理MySQL,确保数据完整性和系统稳定运行。
934 0
|
存储 关系型数据库 MySQL
XtraBackup 的版本大揭秘:突破迷雾,揭开其支持 MySQL 版本的震撼真相,捍卫数据安全!
【8月更文挑战第7天】XtraBackup 是 MySQL 备份领域的热门工具,适用于多个版本。它为 MySQL 8.0 提供高效备份,确保数据安全。同样支持 MySQL 5.7 和其他稳定版如 5.6,精确备份各类数据结构。
362 0
|
存储 关系型数据库 MySQL
XtraBackup支持哪些MySQL数据库版本?
【5月更文挑战第13天】XtraBackup支持哪些MySQL数据库版本?
1743 0
|
监控 关系型数据库 MySQL
Percona Xtrabackup快速备份MySQL
Percona Xtrabackup快速备份MySQL
|
6月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
464 158
|
6月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。

推荐镜像

更多