资讯专栏INFORMATION COLUMN

基于Mysql数据库零数据丢失恢复探索(下)

IT那活儿 / 875人阅读
基于Mysql数据库零数据丢失恢复探索(下)

点击上方“IT那活儿”,关注后了解更多精彩内容!!!

上篇文章跟大家介绍了MYSQLDUMP每天全备+binlog备份的方案,今天再跟大家分享一款强悍企业级的MYSQL数据库备份工具,是什么呢?我们一起往下看!

PXB简介

XtraBackup是percona 公司贡献给开源社区的一款操作简单功能强悍企业级的MYSQL数据库备份工具。它的实现是基于innodb对事务的支持,利用其崩溃恢复的功能来实现的。MySQL所有的更新操作都是在内存中完成的,然后异步的刷入磁盘进行持久化。支持事务的存储引擎,为了保证MySQL宕机后内存中还未刷出的更新不会丢失,设计了事务引擎日志(redo log)。通过将该部分的更新记录到日志中,然后记录日志序号(LSN),异步线程在将脏页刷新到磁盘的同时,维护一个检查点LSN,两个LSN之间的差异就是数据宕机后丢失的更新。在数据库启动时,只要事务日志保存完好,就可以根据redo log和undo log将数据库恢复到崩溃前的一致性状态。
1. 功能和特性
  • 具有在线non-locking热备功能;
  • 提供全备、增备功能;
  • 提供压缩、加密功能;
  • 提供流备份功能;
  • 提供库、单表维度备份功能;
  • 提供基于时间点恢复功能;

2. 版本兼容说明

  • Xtrabackup 2.4 支持mysql 5.6 5.7
  • Xtranbackup 8.0 支持mysql 8.0.*

PXB介质下载


PXB安装的三种方式

1. 二进制安装

  • 下载安二进制包
Wgethttps://www.percona.com/downloads/XtraBackup/Percona-
XtraBackup-2.4.7/binary/tarball/percona-xtrabackup-2.4.7-
Linux-x86_64.tar.gz


  • 解压并创建软连接:


# tar zxvf percona-xtrabackup-2.4.7-Linux-x86_64.tar.gz
# mv percona-xtrabackup-2.4.7-Linux-x86_64
/usr/local/xtrabackup
# ln -s /usr/local/xtrabackup/bin/* /usr/bin/


  • 查看版本:


# xtrabackup --version
xtrabackup version 2.4.7 based on MySQL server 5.7.13 Linux 
(x86_64) (revision id: 6f7a799)

2. 源码安装:

  • 安装依赖包


yum install cmake gcc gcc-c++ libaio libaio-devel automake autoconf bison libtool ncurses-devel    libgcrypt-devel libev-devel libcurl-devel vim-common
libev-devel 包yum安装不上时,可手动RPM包安装
rpm -ivh glibc-2.12-1.166.el6.x86_64.rpm
rpm -ivh libev-4.03-3.el6.x86_64.rpm libev-devel-4.03-3.el6.x86_64.rpm


  • 解压源码包:


tar -zxvf percona-xtrabackup-2.3.3.tar.gz
cd percona-xtrabackup-2.3.3


  • 编译安装:

cmake -DBUILD_CONFIG=xtrabackup_release -DWITH_MAN_PAGES=OFF 
&& make -j4
make install


  • 添加到基本命令:


cp /usr/local/xtrabackup/bin/innobackupex /usr/bin
cp /usr/local/xtrabackup/bin/xtrabackup /usr/bin

3. yum源安装

  • 安装Percona的库:


yum install http://www.percona.com/downloads/percona-
release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm


  • 测试Percona库:


yum list|grep percona


  • 安装包:


yum install percona-xtrabackup


实验环境

1. Os环境:CentOS Linux release 7.2.1511 (Core)
2. 数据库版本: 5.7.20
3. Xtrabackup版本:5.7.13
4. 账号:bkpuser

备份与恢复

1. 全量备份与恢复示例

  • 数据库全量备份


xtrabackup --defaults-file=/etc/my.cnf --host=localhost --
user=bkpuser --password=Ora#01555 -
s/var/lib/mysql/mysql.sock --backup --target-dir=/app/pxb
  • 新建库,并更新数据


mysql -uroot -pOra#01555 -e create database db1;
mysql -uroot -pOra#01555 -e create table db1.t1(id int,name varchar(20));
mysql -uroot -pOra#01555 -e insert into db1.t1 values(1,"a"),(2,"b"),(3,"c");
mysql -uroot -pOra#01555 -e select * from db1.t1;


  • binlog备份正常


sh binlog.sh


  • 模拟删除所有数据文件,删库跑路


cd /var/lib/mysql && rm -rf *
  • 使用xtrabackup全量恢复


 停止掉运行的数据库实例:


service mysqld stop
准备:
xtrabackup --host=localhost --user=bkpuser --
password=Ora#01555  -S/var/lib/mysql/mysql.sock --prepare --
target-dir=/app/pxb
拷回数据:
xtrabackup --host=localhost --user=bkpuser --
password=Ora#01555  -S/var/lib/mysql/mysql.sock --
datadir=/var/lib/mysql --copy-back --target-dir=/app/pxb
修改目录属性启动数据库:
chown -R mysql.mysql /var/lib/mysql
chmod -R 755 /var/lib/mysql
启动服务:
service mysqld start


  • 使用mysqlbinlog增量恢复

查看备份的位置:
cat xtrabackup_info
binlog_pos = filename on.000009, position 4226787
使用mysqlbinlog恢复后面的位置:
mysqlbinlog on.000009 on.000010 --start-position=4226787 | mysql -uroot -pOra#01555
mysql -uroot -pOra#01555 -e select * from db1.t1;


  • 核查数据是否恢复正常

2. 增量备份与恢复示例

  • 增量备份全备
xtrabackup --user=root --password=Ora#01555 --backup --
target-dir=/app/pxb/full
  • 模拟数据增加1

  • 增量备份1
xtrabackup --user=root --password=Ora#01555 --backup --
target-dir=/app/pxb/incr1 --incremental-
basedir=/app/pxb/full
  • 模拟数据2

  • 增量备份2


xtrabackup --user=root --password=Ora#01555 --backup --
target-dir=/app/pxb/incr2 --incremental-
basedir=/app/pxb/incr1
  • 模拟数据3

  • 删库跑路

  • 进行数据恢复操作

 准备全备份的日志:
xtrabackup --user=root --password=Ora#01555 --prepare --
apply-log-only --target-dir=/app/pxb/full
准备增量备份的日志:
xtrabackup --user=root --password=Ora#01555 --prepare --
apply-log-only --target-dir=/app/pxb/full --incremental-
dir=/app/pxb/incr1
xtrabackup --user=root --password=Ora#01555 --prepare --
apply-log-only --target-dir=/app/pxb/full --incremental-
dir=/app/pxb/incr2
全备份准备:
# xtrabackup --user=root --password=Ora#01555 --prepare 
--target-dir=/app/pxb/full
拷回数据:
xtrabackup --user=root --password=Ora#01555 --
datadir=/var/lib/mysql --copy-back --target-
dir=/app/pxb/full
mysqlbinlog进行数据恢复:
mysqlbinlog on.000006 on.000007 --start-position=154 | mysql 
-uroot -pOra#01555

数据是否恢复检查:

总结

在MYSQL企业运维中,务必保证多从库,并且在数据冗余的同时,要切记不能缺少备份,备份重于一切,这是数据丢失后,数据恢复的最后一根稻草,在MYSQL里,物理备份+BINLOG实时备份,可保证我们数据尽可能零丢失,特别是在一些人为或极端不可抗的情况下,备份显得尤其重要.


本文来源:IT那活儿微信公众号(上海新炬王翦团队)

更多精彩干货分享

点击下方名片关注

IT那活儿

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129723.html

相关文章

  • TiDB at 丰巢:尝鲜分布式数据

    摘要:为此,一款高性能的分布式数据库,日渐成为刚需。基于如上的原因,我们选择了,作为丰巢的核心系统的分布式数据库,来取代和。 作者:丰巢技术团队 随着丰巢业务系统快速增长,其核心系统的数据量,早就跨越了亿级别,而且每年增量仍然在飞速发展。整个核心系统随着数据量的压力增长,不但系统架构复杂度急剧增长,数据架构更加复杂,传统的单节点数据库,已经日渐不能满足丰巢的需求,当单表数量上亿的时候,Ora...

    sixgo 评论0 收藏0
  • 单排学Redis【白银】

    摘要:对于数据结构哈希表我们在上一篇也已经详细说了。键空间示意图的数据库就是使用字典哈希表来作为底层实现的,对数据库的增删改查都是构建在字典哈希表的操作之上的。 前言 只有光头才能变强 今天继续来学习Redis,上一篇从零单排学Redis【青铜】已经将Redis常用的数据结构过了一遍了。如果还没看的同学可以先去看一遍再回来~ 这篇主要讲的内容有: Redis服务器的数据库 Redis对过期...

    denson 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<