删库跑路?使用xtraback备份MySQL数据库的方法

一、mysqldump备份方式是采用逻辑备份。最大的缺陷就是备份和恢复的速度都慢,对于一个50G的数据库而言,这个速度还是可以接受的,但是如果数据库非常大,那在使用mysqdump备份就不是太合适了。。

这时候就需要一种很好用又高效的工具,xtraback 就是其中的一款,号称免费版的innodb hotbackup

xtraback特点如下:

  • 备份过程快速,可靠
  • 备份过程不会打断正在执行的事务
  • 能够基于压缩等功能节约磁盘空间和流量
  • 自动实现备份检验
  • 还原速度快

二、安装xtraback 1)下载xtraback

wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.4/binary/tarball/percona-xtrabackup-2.4.4-Linux-x86_64.tar.gz 

2)解压

[root@master ~]# tar zxf percona-xtrabackup-2.4.4-Linux-x86_64.tar.gz 

3)进入解压目录复制bin下的所有程序到/usr/bin下即可

[root@master ~]# cd percona-xtrabackup-2.4.4-Linux-x86_64/ [root@master percona-xtrabackup-2.4.4-Linux-x86_64]# cp bin/* /usr/bin/ 

xtraback是用于热备份innodb,xtradb表中数据的工具,支持在线热备份,可以在不加锁的情况下备份innodb数据表,不过此工具不能操作myisam引擎表

4)安装相关的插件

yum install perl-DBI perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL perl-TermReadKey.x86_64 perl-Digest-MD5 –y 

5)下载percona-toolkit并安装

wget https://www.percona.com/downloads/percona-toolkit/2.2.19/RPM/percona-toolkit-2.2.19-1.noarch.rpm
[root@master ~]# rpm -ivh percona-toolkit-2.2.19-1.noarch.rpm warning: percona-toolkit-2.2.19-1.noarch.rpm: Header V4 DSA/SHA1 Signature, key ID cd2efd2a: NOKEY Preparing... ################################# [100%] Updating / installing...
1:percona-toolkit-2.2.19-1 ################################# [100%]

三、备份

方案一:xtrabackup完全备份+binlog增量备份 (需要开启bin-log日志)

创建备份目录

[root@master ~]# mkdir -p /opt/mysqlbackup/{full,inc} 

首先我们创一个test库,在test库中创建一个tb1的表,在tb1表中插入三行数据,如下:

插入数据后我们进行完全备份 如下:

[root@master ~]#
innobackupex --user=root --password=pwd123 /opt/mysqlbackup/full/ 

以上完全备份路径为我们刚刚创建的mysqlbackup目录下。

出现以下提示证明备份成功

备份后的文件如下:

至此全备完全成功,然后向mysql某个库插入几条数据,然后进行增量备份

对完全备份的后数据库更改进行二进制日志增量备份:

查看完全备份时binlog日志位置(position):

以上就是我们完全备份完成后的位置,那么如果我们现在插入数据的话,是从这个位置开始的,从这个位置开始的我们称为增量备份,现在我们在tb1表中插入数据如下:

增量备份二进制文件:

[root@master ~]
# mysqlbinlog --start-position=1279 /usr/local/mysql/data/mysql-bin.000001 > /opt/mysqlbackup/inc/`date +%F`.sql 

备份完成后,我们模拟数据库损坏,误删操作,如下

[root@master ~]# rm -rf /usr/local/mysql/data/* 

恢复数据库

首先恢复我们的完全备份,也就是tom1/2/3的数据 如下:

[root@master ~]#innobackupex --copy-back /opt/mysqlbackup/full/2017-11-21_11-47-42/ 

出现以下提示证明还原成功

当数据恢复至DATADIR目录以后,还需要确保所有数据文件的属主和属组均为正确的用户,如mysql,否则,在启动mysqld之前还需要事先修改数据文件的属主和属组。如:

# chown -R mysql:mysql /usr/local/mysql/data/ 

重启mysql服务查看是否还原成功

以上看出完全备份已经还原成功,因为我们在完全备份的时候插入了3行数据,那么接下来我们还原增量备份如下:

为了防止还原时产生大量的二进制日志,在还原时可临时关闭二进制日志后再还原:

随后我们验证是否还原成功!

此时我们已经全部恢复成功,以上通过binlog+xtrabackup工具来实现的备份,是不是感觉有点小麻烦。如感觉到麻烦请看-以下方案二。

二、xtrabackup完全备份+xtrabacup增量备份

测试环境准备

创建一个测试数据库,并创建一张表输入几行数据

以上操作解释:

创建了一个test库,在test库中创建了xx表,在xx表中插入了tom1和tom2的数据。

接下来执行完全备份如下:

[root@master ~]# xtrabackup --defaultes-file=/etc/my.cnf --user=root --password='pwd123' --popt=3306 --backup --target-dir=/opt/mysqlbackup/full/full_incre_$(date +%Y%m%d_%H%M%S) 

以上黑色部分是存放位置。出现以下证明备份成功

这时候我们再次插入数据,进行一次增量备份

备份第一次增量如下:

[root@master ~]# xtrabackup --defaultes-file=/etc/my.cnf --user=root --password='pwd123' --popt=3306 --backup --target-dir=/opt/mysqlbackup/inc/inc_incre_$(date +%Y%m%d_%H%M%S) --incremental-basedir=/opt/mysqlbackup/full/full_incre_20171121_123051/ 

出现以下表示备份成功!

以上备份路径为:/opt/mysqlbackup/inc/我们可以查看备份的文件

接下来在xx表中再次插入数据,进行第二次增量备份

第二次增量备份如下:

[root@master ~]# xtrabackup --defaultes-file=/etc/my.cnf --user=root --password='pwd123' --popt=3306 --backup --target-dir=/opt/mysqlbackup/inc/inc_incre_$(date +%Y%m%d_%H%M%S) --incremental-basedir=/opt/mysqlbackup/inc/inc_incre_20171121_124604/ 

出现以下提示证明备份成功

xtrabacup进行增量恢复

为了实现效果我把xx表删了

开始恢复完全备份如下:

[root@master ~]# xtrabackup --defaultes-file=/etc/my.cnf --prepare --user=root --password="pwd123" --apply-log-only --target-dir=/opt/mysqlbackup/full/full_incre_20171121_123051 

二、恢复第一次增量(tom3)

[root@master ~]# xtrabackup --defaultes-file=/etc/my.cnf --prepare --user=root --password="pwd123" --apply-log-only --target-dir=/opt/mysqlbackup/full/full_incre_20171121_123051 --incremental-dir=/opt/mysqlbackup/inc/inc_incre_20171121_124604/ 

三、恢复第二次增量

[root@master ~]# xtrabackup --defaultes-file=/etc/my.cnf --prepare --user=root --password="pwd123" --apply-log-only --target-dir=/opt/mysqlbackup/full/full_incre_20171121_123051 --incremental-dir=/opt/mysqlbackup/inc/inc_incre_20171121_125202 

恢复整个库

[root@master ~]# xtrabackup --defaultes-file=/etc/my.cnf --prepare --user=root --password="pwd123" --target-dir=/opt/mysqlbackup/full/full_incre_20171121_123051 

停止mysql数据库-开始rsync数据文件

[root@master ~]# systemctl stop mysqld [root@master ~]# cd /opt/mysqlbackup/full/full_incre_20171121_123051/ [root@master full_incre_20171121_123051]# rsync -rvt --exclude 'xtrabackup_checkpoints' --exclude 'xtrabackup_logfile' ./ /usr/local/mysql/data/ 

授予mysql访问权限

[root@master ~]# chown -R mysql:mysql /usr/local/mysql/data/ 

启动mysql服务查看还原是否成功

总结

以上所述是小编给大家介绍的删库跑路?使用xtraback备份MySQL数据库的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • 利用Xtrabackup工具备份及恢复(MySQL DBA的必备工具)

    Xtrabackup------MySQL DBA的必备工具 注意: 1)文档参照http://www.percona.com/docs/wiki/percona-xtrabackup:start 2)mysql要使用5.1.50版本或以上. 一.Xtrabackup简介及安装 1.Xtrabackup  是percona的一个开源项目,可以热备份innodb ,XtraDB,和MyISAM(会锁表),可以看做是InnoDB Hotbackup的免费替代品. Percona Support fo

  • 编写脚本令Xtrabackup对MySQL数据进行备份的教程

    Xtrabackup备份恢复原理 备份innodb表时,xtrabackup若干个线程拷贝独立表空间的.ibd文件,并不停监视此过程中redo log的变化,添加到自己的事务日志文件(xtrabackup_logfile)中.在此过程中,发生的物理写操作越多,xtrabackup_logfile越大.在拷贝完成后的第一个prepare阶段,xtrabackup采用类似于innodb崩溃恢复的方法,把数据文件恢复到与日志文件一致的状态,并把未提交的事务回滚.如果同时需要备份myisam表以及inn

  • MySQL使用xtrabackup进行备份还原操作

    本文实例为大家分享了xtrabackup备份还原的具体代码,供大家参考,具体内容如下 使用rpm包安装xtrabackup ## 安装依赖包 yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL rsync ## 安装libev4包 rpm -ivh libev4-4.15-7.1.x86_64.rpm ## 安装percona-xtrabackup rpm -ivh percona-x

  • Xtrabackup使用指南 InnoDB数据备份工具

    一.Xtrabackup介绍 A.Xtrabackup是什么 Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品. Xtrabackup有两个主要的工具:xtrabackup.innobackupex 1.xtrabackup只能备份InnoDB和XtraDB两种数据表,而不能备份MyISAM数据表 2.innobackupex是参考了InnoDB Hotbackup的innoback

  • xtrabackup备份还原MySQL数据库

    mysqldump 备份鉴于其自身的某些特性(锁表,本质上备份出来insert脚本或者文本,不支持差异备份),不太适合对实时性要求比较高的情况 Xtrabackup可以解决mysqldump存在的上述的一些问题,生产环境应用的也会更多一些. 本文简单测试一下Xtrabackup对MySQL数据库的备份还原操作. 本着先把功能先撸起来再深入细节的原则,粗略地实现了一个备份还原,并未深入细节. 网上有不少xtrabackup的文章,因为环境不一样,有些需要配置xtrabackup的配置文件, 但是我

  • mysql xtrabackup 备份恢复实现分享

    简介 Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具.特点: (1)备份过程快速.可靠: (2)备份过程不会打断正在执行的事务: (3)能够基于压缩等功能节约磁盘空间和流量: (4)自动实现备份检验: (5)还原速度快: Xtrabackup中包含两个工具: * xtrabackup - 用于热备份innodb, xtradb表的工具,不能备份其他表. * innobackupex

  • MySQL中使用innobackupex、xtrabackup进行大数据的备份和还原教程

    大数据量备份与还原,始终是个难点.当MYSQL超10G,用mysqldump来导出就比较慢了.在这里推荐xtrabackup,这个工具比mysqldump要快很多. 一.Xtrabackup介绍 1.Xtrabackup是什么 Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品. Xtrabackup有两个主要的工具:xtrabackup.innobackupex 1.xtraback

  • 删库跑路?使用xtraback备份MySQL数据库的方法

    一.mysqldump备份方式是采用逻辑备份.最大的缺陷就是备份和恢复的速度都慢,对于一个50G的数据库而言,这个速度还是可以接受的,但是如果数据库非常大,那在使用mysqdump备份就不是太合适了.. 这时候就需要一种很好用又高效的工具,xtraback 就是其中的一款,号称免费版的innodb hotbackup xtraback特点如下: 备份过程快速,可靠 备份过程不会打断正在执行的事务 能够基于压缩等功能节约磁盘空间和流量 自动实现备份检验 还原速度快 二.安装xtraback 1)下

  • mysql常用sql与命令之从入门到删库跑路

    启动与停止 启动mysql服务 sudo /usr/local/mysql/support-files/mysql.server start 停止mysql服务 sudo /usr/local/mysql/support-files/mysql.server stop 重启mysql服务 sudo /usr/local/mysql/support-files/mysql.server restart 进入mysql目录文件 cd /usr/local/mysql/support-files 进入

  • mysql如何能有效防止删库跑路

    目录 安全模式设置 测试 1.无where的update和delete 2.非索引键的delete 3.索引键的delete 总结 大家肯定听说过,有些开发者由于个人失误,在delete或者update语句的时候没有添加where语句,导致整个表数据错乱. mysql安全模式:mysql发现delete.update语句没有添加where或者limit条件时会报错.整个sql将无法执行,有效防止了误删表的情况. 安全模式设置 在mysql中通过如下命令查看状态: show variables l

  • 你也许连删库跑路都不会(delete、drop和truncate删除数据)

    前言 这两年 IT 界隔三岔五的出现一次程序员删库的新闻,这种删库跑路的行为往往会给受害公司造成很大的损失,甚至会导致一个公司的破产.我们程序员看到这类新闻的时候很大一部分会把它当作一个闲聊的摊子,但是各位读者你是否想过这么一个问题:我知道怎么正确删库吗?看到这里估计有读者会感觉删库谁不会啊 Delete 以下呗.如果你这么想的话那就接着看这篇文章吧,在后面的内容中我将讲解数据库删除数据的方式以及原理. 在 MySQL 中有三种删除数据的方式,分别是 delete.drop 和 truncate

  • 防止删库跑路及高级代码投毒技巧

    目录 引言 删库跑路 可操作性 1. 权限控制 2. 数据备份 易发现性 影响后果 代码投毒 最近的案例 可操作性 预防策略 最后 引言 事情是这样的,最近在做开源软件供应链安全相关的项目,之前没了解这方面知识的时候感觉服务器被黑,数据库被删,网站被攻,这些东西都离我们太遥远了,因为感觉好像都轮不到我们,直到我开始做这个项目,才发现网络安全,软件安全问题真的是无处不在. 今天我们来聊聊删库跑路和代码投毒. 我们从可操作性及易发现性还有后果及预防策略上来探讨一下. 删库跑路 在软件行业,“删库跑路

  • 关于Spring的@Transaction导致数据库回滚全部生效问题(又删库跑路)

    1 前言 很多需要使用事务的场景,都只是在方法上直接添加个@Transactional注解 但是,你以为这真的够了吗? 事务如果未达到完美效果,在开发和测试阶段都难以被发现,因为你难以考虑到太多意外场景.但当业务数据量发展,就可能导致大量数据不一致的问题,就会造成前人栽树后人踩坑,需要大量人力排查解决问题和修复数据. 2 如何确认Spring事务生效了? 使用@Transactional一键开启声明式事务, 这就真的事务生效了?过于信任框架总有"意外惊喜".来看如下案例 领域层 实体

  • thinkPHP使用pclzip打包备份mysql数据库的方法

    本文实例讲述了thinkPHP使用pclzip打包备份mysql数据库的方法.分享给大家供大家参考,具体如下: PclZip介绍 PclZip library能够压缩与解压缩Zip格式的压缩档(WinZip.PKZIP);且能对此类类档案进行处理,包括产生压缩档.列出压缩档的内容以及解压缩档案等等 数据库备份是一件非常重要的事情,备份的方式也很多有的通过vps直接进行备份.有的通过phpmyadmin进行数据进行备份.小编觉得这些该麻烦了并且备份好的.sql文件过于太大占用了一定的空间.所以用p

  • Python实现备份MySQL数据库的方法示例

    本文实例讲述了Python实现备份MySQL数据库的方法.分享给大家供大家参考,具体如下: #!/usr/bin/env python # -*- coding:utf-8 -*- #导入模块 import MySQLdb import time import datetime import os """ Purpose: 备份数据库 Created: 2015/5/12 Modified:2015/5/12 @author: guoyJoe ""&quo

  • 8种手动和自动备份MySQL数据库的方法

    作为流行的开源数据库管理系统,MySQL的使用者众多,为了维护数据安全性,数据备份是必不可少的.本文就为大家介绍几种适用于企业的数据备份方法. 使用MySQLDump进行MySQL备份 mysqldump是MySQL内置的工具,允许用户将数据库指定不同的选项备份到文件.服务器,甚至是压缩gzip文件中.mysqldump实用程序灵活,快速,可执行高级备份,并接受各种命令行参数,用户可通过这些参数来更改备份数据库的方式. Windows操作系统中的c:mysqlbin和Unix / Linux系统

  • linux下备份MYSQL数据库的方法

    只需按照下面3步做,一切都在你的掌控之下: 第一步:在服务器上配置备份目录代码: -------------------------------------------------------------------------------- mkdir /var/lib/mysqlbackup cd /var/lib/mysqlbackup -----------------------------------------------------------------------------

随机推荐