使用xtrabackup对Mysql备份恢复

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 使用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       完成


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
4月前
|
SQL 存储 关系型数据库
MySQL备份:mydumper 备份恢复工具生产实战
MySQL备份:mydumper 备份恢复工具生产实战
|
4月前
|
关系型数据库 MySQL 机器人
【MySQL】两个脚本自动化搞定 MySQL 备份恢复--XtraBackup
【MySQL】两个脚本自动化搞定 MySQL 备份恢复--XtraBackup
|
4月前
|
运维 关系型数据库 MySQL
"MySQL运维精髓:深入解析数据库及表的高效创建、管理、优化与备份恢复策略"
【8月更文挑战第9天】MySQL是最流行的开源数据库之一,其运维对数据安全与性能至关重要。本文通过最佳实践介绍数据库及表的创建、管理与优化,包括示例代码。涵盖创建/删除数据库、表结构定义/调整、索引优化和查询分析,以及数据备份与恢复等关键操作,助您高效管理MySQL,确保数据完整性和系统稳定运行。
438 0
|
4月前
|
存储 关系型数据库 MySQL
XtraBackup 的版本大揭秘:突破迷雾,揭开其支持 MySQL 版本的震撼真相,捍卫数据安全!
【8月更文挑战第7天】XtraBackup 是 MySQL 备份领域的热门工具,适用于多个版本。它为 MySQL 8.0 提供高效备份,确保数据安全。同样支持 MySQL 5.7 和其他稳定版如 5.6,精确备份各类数据结构。
125 0
|
7月前
|
存储 关系型数据库 MySQL
利用Xtrabackup进行mysql增量备份和全量备份
利用Xtrabackup进行mysql增量备份和全量备份
716 0
|
7月前
|
存储 关系型数据库 MySQL
XtraBackup支持哪些MySQL数据库版本?
【5月更文挑战第13天】XtraBackup支持哪些MySQL数据库版本?
679 0
|
7月前
|
监控 关系型数据库 MySQL
Percona Xtrabackup快速备份MySQL
Percona Xtrabackup快速备份MySQL
|
关系型数据库 MySQL 数据库
xtrabackup 备份还原mysql
通过使用xtrabackup 备份还原mysql数据库
78 3
|
3天前
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
45 15
|
3天前
|
关系型数据库 MySQL 数据库
数据库数据恢复—MYSQL数据库文件损坏的数据恢复案例
mysql数据库文件ibdata1、MYI、MYD损坏。 故障表现:1、数据库无法进行查询等操作;2、使用mysqlcheck和myisamchk无法修复数据库。