简介:以前备份都是通过mysqldump备份数据库的,由于是逻辑备份,所以采用这种备份方式数据是很安全的,跨平台、版本都很容易。
凡事有利必有弊,逻辑备份在你数据库比较大时,备份、恢复数据所耗费的时间也是蛮长的,所以要不断改进,可以使用物理备份。
Xtrabackup是由percona开发的一个开源软件,它是innodb热备工具ibbackup(收费的商业软件)的一个开源替代品。Xtrabackup由个部分组成:xtrabackup和innobackupex,其中xtrabackup工具用于备份innodb和 xtraDB引擎的表;而innobackupex工具用于备份myisam和innodb引擎的表。

一.工具安装

[root@danny ~]# yum -y list |grep xtrabackup
percona-xtrabackup.x86_64 2.3.-.el7 @epel
holland-xtrabackup.noarch 1.1.-.el7 epel
percona-xtrabackup-test.x86_64 2.3.-.el7 epel
[root@danny ~]# yum -y install percona-xtrabackup

二.全量备份

#全备
innobackupex --defaults-file=/etc/my.cnf --user=root --password= /data/
#该语句将拷贝数据文件(由my.cnf里的变量datadir指定)至备份目录下(/data),注意:如果不指定--defaults-file,默认值为/etc/my.cnf。
备份成功后,将在备份目录下创建一个时间戳目录(本例创建的目录为/data/--18_13--/),在该目录下存放备份文件。 #在/data目录下可看到备份目录如下
[root@danny data]# ls
--18_13-- #查看原mysql库目录和当前备份目录区别
[root@izm5edykqg8tzid352ga0iz data]# ls /var/lib/mysql.bak/
auto.cnf ibdata1 lfc_oasys mysql-bin. mysql-bin.index relay-log.info sshmall
binlog_rollback.py ib_logfile0 lfc_wm mysql-bin. mysqld-relay-bin. rollback T1
diymall ib_logfile1 master.info mysqld-relay-bin.index rollback.sql wordpress
electronicproductssh_db lfcmall mysql mysql-bin. performance_schema sdbp2 [root@izm5edykqg8tzid352ga0iz data]# ls /data/--18_13--/
backup-my.cnf ibdata1 lfcmall mysql sdbp2 wordpress xtrabackup_checkpoints
diymall ib_logfile0 lfc_oasys performance_schema sshmall xtrabackup_binlog_info xtrabackup_info
electronicproductssh_db ib_logfile1 lfc_wm rollback T1 xtrabackup_binlog_pos_innodb xtrabackup_logfile

三.备份恢复

注:恢复之前,要先关闭数据库,并且删除数据文件和日志文件(本次我直接删除mysql目录下所有文件--有备份),否则恢复时会报错。

/etc/init.d/mysqld stop
rm -rf /var/lib/mysql/*
innobackupex --defaults-files=/etc/my.cnf --user=root --password=123456 --apply-log /data/2019-02-18_13-15-45/
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --copy-back /data/2019-02-18_13-15-45/

从上面可以看出,恢复分为两个步骤

第1步是apply-log,为了加快速度,一般建议设置--use-memory,如:--use-memory=6G,这个步骤完成之后,目录/data/2019-02-18_13-15-45/下的备份文件已经准备就绪。

注意:准备全备文件的操作只是对备份集(/data/2019-02-18_13-15-45)本身做相关处理,所以在准备恢复前最好对备份集再次备份

第2步是copy-back,即把备份文件拷贝至原数据目录下。

注意:恢复完成后一定要检查并修改权限,如下:
chown -R mysql.mysql /var/lib/mysql
/etc/init.d/mysqld start

恢复并重启mysql后目录如下:

[root@danny data]# ls /var/lib/mysql
auto.cnf ibdata1 lfcmall mysql mysql.sock sp2p wordpress
diymall ib_logfile0 lfc_oasys mysql-bin. performance_schema sshmall xtrabackup_binlog_pos_innodb
electronicproductssh_db ib_logfile1 lfc_wm mysql-bin.index rollback T1 xtrabackup_info

四.增量备份还原

备份

1.先全量备份

innobackupex --defaults-file=/etc/my.cnf --user=root --password=5113041wsdg /data/

2.第一次增量

innobackupex --defaults-file=/etc/my.cnf --user=root --password=5113041wsdg --incremental --incremental-basedir=/data/2019-02-19_09-48-41/ /data/

3.第二次增量

innobackupex --defaults-file=/etc/my.cnf --user=root --password=5113041wsdg --incremental --incremental-basedir=/data/2019-02-19_09-53-55/ /data/

备份目录如下

[root@danny data]# ls
--19_09-- //全量备份
--19_09-- //第一次增量
--19_09-- //第二次增量

还原

1.停止mysql服务器并清空数据目录

/etc/init.d/mysqld stop
mv /var/lib/mysql /tmp/

2.prepare全备

innobackupex --incremental --apply-log --redo-only /data/2019-02-19_09-48-41

3.prepare第一个增量

innobackupex --incremental --apply-log --redo-only /data/2019-02-19_09-48-41 --incremental-dir=/data/--19_09--

4.prepare第二个增量

innobackupex --incremental --apply-log /data/2019-02-19_09-48-41 --incremental-dir=/data/--19_09--    //注意最后一个增量没有--redo-only参数

此时两次增量备份其实都合并到全备上了,恢复是只需要使用全备进行恢复就可以了

5.所有整合数据还原

innobackupex --defaults-file=/etc/my.cnf --copy-back /data/--19_09--

6.修改mysql数据目录权限启动服务

chown -R mysql.mysql /var/lib/mysql
/etc/init.d/mysqld start

7.数据验证

注意:

1.通过上面三个备份目录里的xtrabackup_checkpoints文件(2019-02-19_09-53-55/xtrabackup_checkpoints),可以看出是哪种备份类型,全量(full-backuped)还是增量(incremental) 并且全量到增量的from_lsn和last_lsn是一一对应的。

2.--incremental指明是增量备份,--incremental-basedir指定上次完整备份或者增量备份文件的位置。这里的增量备份其实只针对的是InnoDB,对于MyISAM来说,还是完整备份。

记一次innobackupex备份恢复数据库过程的更多相关文章

  1. Jira 的 数据库备份恢复 简单过程

    1 发现jira的备份恢复很简单, 只需要导入导出一个zip包即可 导出 选择系统 管理员入口登录 选择导入导出 进行备份系统数据 选择一个文件名就能备份 备份结果 将文件copy到上一一级目录的 i ...

  2. 使用innobackupex备份mysql数据库

    1  因为使用perl脚本编写,安装前应先安装 yum install perl-Time-HiRes -y yum -y install perl-DBD-MySQL.x86_64 一起安装     ...

  3. Xtrabackup之innobackupex备份恢复详解(转)

    add by zhj:对于Xtrabackup2.2来说,已经解决了本文结尾提到的那个bug,当使用--copy-back时,同时加--force-non-empty-directories 即可.这 ...

  4. Mysql启停以及恢复备份恢复数据库

    1.mysql启停 进入cmd 输入如下命令 net stop mysql(自己起的mysql名称) -------停 net strat mysql   ---------------------- ...

  5. mysql备份恢复数据库据/表

    备份单个数据库,只备份表,如要恢复,必须先创建一个数据库[root@s]# mysqldump -u root -p dbname1 > dbname1.sql[root@s]# mysql - ...

  6. Oracle备份恢复简单过程以及中间的坑.

    Oracle 冷备: 貌似需要dbca创建一致的oracle instance 服务器配置版本尽量相同,安装路径相同. 关闭Oracle服务 将oracle app 目录下的oradata以及有快速闪 ...

  7. 利用exp/imp备份恢复数据库实例

    用exp/imp备份数据库: Oracle数据导入导出imp/exp功能:Oracle数据导入导出imp/exp就相当与oracle数据还原与备份. 大多情况都可以用Oracle数据导入导出完成数据的 ...

  8. Oracle之RMAN备份恢复1-基础篇

    1,rman的作用与体系架构 1.1 什么是rman rman(recovery manager)是oracle8i以后dba的一重要工具一般位于$oracle_home/bin目录下,主要用来备份, ...

  9. controlfile与备份恢复

    controlfile与备份恢复     数据库正常关闭,trace controlfile信息.   ************************************************ ...

随机推荐

  1. C# /VB.NET操作Word批注(一)—— 插入、修改、删除Word批注

    批注内容可以是对某段文字或内容的注释,也可以是对文段中心思想的概括提要,或者是对文章内容的评判.疑问,以及在阅读时给自己或他人起到提示作用.本篇文章中将介绍如何在C#中操作Word批注,主要包含以下要 ...

  2. Java开发笔记(十四)几种运算符的优先级顺序

    到目前为止,我们已经学习了Java语言的好几种运算符,包括算术运算符.赋值运算符.逻辑运算符.关系运算符等基础运算符,并且在书写赋值语句时都没添加圆括号,显然是默认了先完成算术.逻辑.关系等运算,最后 ...

  3. Qt Creator的下载和安装

    原文:https://blog.csdn.net/weixin_38090427/article/details/83827678 一,Qt和Qt Creator的区别 Qt是C++的一个库,或者说是 ...

  4. 小tips:JS之for in、Object.keys()和Object.getOwnPropertyNames()的区别

    for..in循环 使用for..in循环时,返回的是所有能够通过对象访问的.可枚举的属性,既包括存在于实例中的属性,也包括存在于原型中的实例.这里需要注意的是使用for-in返回的属性因各个浏览器厂 ...

  5. loj#6073. 「2017 山东一轮集训 Day5」距离(费用流)

    题意 题目链接 Sol 我们可以把图行列拆开,同时对于行/列拆成很多个联通块,然后考虑每个点所在的行联通块/列联通块的贡献. 可以这样建边 从S向每个行联通块连联通块大小条边,每条边的容量为1,费用为 ...

  6. Android WebView的HTML中的select标签不起作用

    Android WebView的HTML中的select标签不起作用 经过查询资料,了解到android对html里的select标签是弹出一个原生的选择器. 问题: Webview中的select没 ...

  7. Python进阶之函数式编程

    函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计 ...

  8. 使用OCLint和Sonar对iOS代码分析和质量管理

    OCLint 是一个强大的静态代码分析工具,可以用来提高代码质量,查找潜在的bug,主要针对c,c++和Objective-c的静态分析. Sonar 是一个用于代码质量管理的开放平台.通过插件机制, ...

  9. .NET下对Web.config与App.Config的增删改操作的代码

    把代码过程常用的内容做个收藏,下边代码段是关于 .NET下对Web.config与App.Config的增删改操作的代码. <?xml version="1.0" encod ...

  10. Android 图片Bitmap,drawable,res资源图片之间转换

    一.知识介绍 ①res资源图片是放在项目res文件下的资源图片 ②BitMap位图,一般文件后缀为BMP,需要编码器编码,如RGB565,RGB8888等.一种逐像素的显示对象,其执行效率高,但缺点也 ...