使用xtrabackup对Mysql备份恢复

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 使用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       完成


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
9月前
|
存储 关系型数据库 MySQL
利用Xtrabackup进行mysql增量备份和全量备份
利用Xtrabackup进行mysql增量备份和全量备份
114 0
|
3月前
|
存储 关系型数据库 MySQL
利用Xtrabackup进行mysql增量备份和全量备份
利用Xtrabackup进行mysql增量备份和全量备份
191 0
|
4月前
|
关系型数据库 MySQL 数据库
零基础带你学习MySQL—备份恢复数据库(三)
零基础带你学习MySQL—备份恢复数据库(三)
|
5月前
|
关系型数据库 MySQL 数据库
HBR混合云备份的MySQL云备份底层使用的是xtrabackup吗?
HBR混合云备份的MySQL云备份底层使用的是xtrabackup吗?
36 1
|
4月前
|
关系型数据库 MySQL 数据库
xtrabackup 备份还原mysql
通过使用xtrabackup 备份还原mysql数据库
45 3
|
8月前
|
关系型数据库 MySQL 测试技术
MySQL备份恢复-2
MySQL备份恢复-2
66 0
|
8月前
|
存储 安全 关系型数据库
MySQL备份恢复
MySQL备份恢复
65 0
|
10月前
|
SQL 关系型数据库 MySQL
xtrabackup备份MySQL超时的解决办法
xtrabackup备份MySQL时,可能会出现拿不到锁而超时失败的现象,这里说明解决办法。
131 0
|
11月前
|
SQL 监控 关系型数据库
MySQL 备份恢复
MySQL 备份恢复
|
SQL 安全 关系型数据库
RDS SQL Server 备份恢复到本地报错:Cannot find server certificate with thumbprint
RDS SQL Server 备份恢复到本地报错:Cannot find server certificate with thumbprint