Xtrabackup对mysql全备以及增量备份实施
Xtrabackup对mysql全备以及增量备份实施
1.完全备份与恢复
本文使用的是centos5.8 64位系统,mysql 使用5.5.35.
如果要使用一个最小权限的用户进行备份,可基于以下:
mysql> createuser 'bkuser'@'localhost' identified by 'redhat';
mysql> grant reload,lock tables,replication client on *.* to 'bkuser'@'localhost';
mysql> flushprivileges;
[root@client1 py]#mkdir/innobackup
[root@client1 py]#yum install perl-DBD-MySQL -y
[root@client1 py]# wget http://www.percona.com/downloads/XtraBackup/XtraBackup-2.1.7/RPM/rhel6/x86_64/percona-xtrabackup-2.1.7-721.rhel6.x86_64.rpm
[root@client1 py]# rpm -ivh percona-xtrabackup-2.1.7-721.rhel5.x86_64.rpm
[root@client1 py]#innobackupex --user=root --password='wisdom' /innobackup/
最后提示:
14021902:17:17 innobackupex: Connection todatabase server closed
14021902:17:17 innobackupex: completed OK!
说明备份成功了。
在/inobackup 目录里会发现有2014-02-19_02-17-10 (这是在做备份时的时间点)目录。在这个目录里会多出几个文件:
(1) xtrabackup_checkpoints:备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN(日志序列号)范围信息。每个InnoDB页(通常为16k大小)都会包含一个日志序列号,即LSN。LSN是整个数据库系统的系统版本号,每个页面相关的LSN能够表明此页面最近是如何发生改变的。
[root@client12014-02-19_02-17-10]# cat xtrabackup_checkpoints
backup_type =full-backuped #备份类型为全备
from_lsn = 0 #lsn起始点为0
to_lsn = 1685925 #lsn结束点为1685925
last_lsn = 1685925
compact = 0 #没有压缩
(2)xtrabackup_binlog_info :mysql服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置。
[root@client12014-02-19_02-17-10]# cat xtrabackup_binlog_info
mysql-bin.000003 548717
mysql> showmaster status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB |Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003| 548717 | | |
+------------------+----------+--------------+------------------+
可以看到position 和file 都是符合的。
(3)xtrabackup_logfile:xtrabackup备份时的日志
[root@client12014-02-19_02-17-10]# file xtrabackup_logfile
xtrabackup_logfile:data
所以不能用cat 命令来读取,只能是xtrabackup程序来读取。
(4) )xtrabackup_binary:备份中用到的xtrabackup的可执行文件;
cat xtrabackup_binary
xtrabackup_55
[root@client12014-02-19_02-44-34]# rpm -ql percona-xtrabackup
/usr/bin/innobackupex
/usr/bin/innobackupex-1.5.1
/usr/bin/xbcrypt
/usr/bin/xbstream
/usr/bin/xtrabackup
/usr/bin/xtrabackup_55
/usr/bin/xtrabackup_56
/usr/share/doc/percona-xtrabackup-2.1.7
/usr/share/doc/percona-xtrabackup-2.1.7/COPYING
我们的mysql是5.5版本的,所以使用的xtrabackup_55可执行文件
(5)backup-my.cnf:备份命令用到的配置选项信息;
[root@client12014-02-19_02-17-10]# cat backup-my.cnf
[mysqld]
innodb_data_file_path=ibdata1:10M:autoextend
innodb_log_files_in_group=2
innodb_log_file_size=5242880
innodb_fast_checksum=0
innodb_page_size=16384
innodb_log_block_size=512
这是my.cnf 中 mysqld里面的选项。
模拟故障,进行恢复。
[root@client1innobackup]# /etc/init.d/mysqld stop
Shutting downMySQL..[确定]
[root@client1innobackup]# cd /data/mydata/
首先进行准备(prepare)一个完全备份,也就是预处理
[root@client1innobackup]#innobackupex --apply-log /innobackup/2014-02-19_02-17-10/
140219 2:40:24 InnoDB: Shutdown completed; log sequence number 1687564
14021902:40:24 innobackupex: completed OK!
出现类似上面的情况准备完成。
接着,从完全备份中进行恢复
[root@client1innobackup]#innobackupex --copy-back /innobackup/2014-02-19_02-17-10/
innobackupex:Finished copying back files.
14021902:40:58 innobackupex: completed OK!
说明成功。
[root@client1mydata]# ll
总计 28812
drwxr-xr-x 2 root root 4096 02-19 02:40 hellodb
-rw-r--r-- 1 root root 18874368 02-19 02:40 ibdata1
-rw-r--r-- 1 root root 5242880 02-19 02:40 ib_logfile0
-rw-r--r-- 1 root root 5242880 02-19 02:40 ib_logfile1
drwxr-xr-x 2 root root 4096 02-19 02:40 mydb
drwxr-xr-x 2 root root 4096 02-19 02:40 mysql
drwxr-xr-x 2 root root 4096 02-19 02:40performance_schema
drwxr-xr-x 2 root root 4096 02-19 02:40 rm_dbxt
drwxr-xr-x 2 root root 4096 02-19 02:40 rm_db1
drwxr-xr-x 2 root root 4096 02-19 02:40 rm_db2
drwxr-xr-x 2 root root 4096 02-19 02:40 test
drwxr-xr-x 2 root root 4096 02-19 02:40 test1
-rw-r--r-- 1 root root 37 02-19 02:40xtrabackup_binlog_pos_innodb
这都是root的属性的。需要修改成mysql的。
[root@client1 mydata]# chown mysql.mysql -R *
启动mysql
[root@client1 mydata]# /etc/init.d/mysqld start
StartingMySQL....[确定]
[root@client1mydata]# mysql -uroot –p
mysql> showdatabases;
+--------------------+
| Database |
+--------------------+
| information_schema|
| hellodb |
| mydb |
| mysql |
|performance_schema |
| rm_db |
| rm_db1 |
| rm_db2 |
| test |
| test1 |
+--------------------+
都已经恢复成功了。
2.增量备份与恢复
增量备份,是依据上一次备份的,也就是备份上一次备份后,所有发生变化的数据。
首先进行一次完全备份:
[root@client1 mydata]# innobackupex--user=root --password='wisdom’ /innobackup/
备份成功后,进行数据修改,与上一次备份发生变化。
[root@client1innobackup]# mysql -uroot –p
mysql> usermdb;
mysql> createtable test(id tinyint unsigned auto_increment primary key,name varchar(10));
mysql>insertinto test values (1,’zhang san’);
mysql>insertinto test values(2,’li si’);
mysql> select *from test;
+----+-----------+
| id | name |
+----+-----------+
| 1 | zhang san |
| 2 | li si |
+----+-----------+
[root@client1 mydata]#innobackupex --user=root --password=’wisdom’--incremental/innobackup/ --incremental-basedir=/innobackup/2014-02-19_02-44-34/
其中,BASEDIR指的是完全备份所在的目录,此命令执行结束后,innobackupex命令会在/innobackup目录中创建一个新的以时间命名的目录以存放所有的增量备份数据。
继续对mysql进行操作,修改数据。
[root@client12014-02-19_02-54-24]# mysql -uroot –p
mysql> select *from test;
+----+-----------+
| id | name |
+----+-----------+
| 1 | zhang san |
| 2 | li si |
+----+-----------+
mysql> deletefrom test where id=2;
mysql> insertinto test values(3,'wang wu');
[root@client1 mydata]#innobackupex --user=root --password='wisdom' --incremental /innobackup/ --incremental-basedir=/innobackup/2014-02-19_02-54-24/
[root@client1innobackup]# ls
2014-02-19_02-17-10 2014-02-19_02-44-34 2014-02-19_02-54-24 2014-02-19_02-57-09
连接数据库,继续修改数据
[root@client12014-02-19_02-57-09]# mysql -uroot -p
mysql> userm_db;
mysql> select *from test;
+----+-----------+
| id | name |
+----+-----------+
| 1 | zhang san |
| 3 | wang wu |
mysql> deletefrom test where id=3;
Query OK, 1 rowaffected (0.00 sec)
mysql> select *from test;
+----+-----------+
| id | name |
+----+-----------+
| 1 | zhang san |
+----+-----------+
这时模拟发生故障,然后进行恢复,这时需要备份binlog文件,(如果你的binlog和数据文件在一起的话,需要备份出来),我的没有在同意目录下。现在对mysql数据文件进行删除。
[root@client1mydata]# cd /data/mydata
[root@client1mydata]# /etc/init.d/mysqld stop
Shutting downMySQL.[确定]
[root@client1mydata]# rm -rf *
同样先进行准备:
(1)需要在每个备份(包括完全和各个增量备份)上,将已经提交的事务进行“重放”。“重放”之后,所有的备份数据将合并到完全备份上。
(2)基于所有的备份将未提交的事务进行“回滚”。
只进行redo操作。
[root@client1 mydata]# innobackupex--apply-log --redo-only /innobackup/2014-02-19_02-44-34/
[root@client1 mydata]# innobackupex--apply-log --redo-only /innobackup/2014-02-19_02-44-34/ --incremental-dir=/innobackup/2014-02-19_02-54-24/
[root@client1 mydata]# innobackupex--apply-log --redo-only /innobackup/2014-02-19_02-44-34/--incremental-dir=/innobackup/2014-02-19_02-57-09/
进行数据恢复:
#innobackupex--copy-back /innobackup/2014-02-19_02-44-34/
#cd /data/mydata
#chown mysql.mysql–R *
启动mysql
[root@client1mydata]# /etc/init.d/mysqld start
Starting MySQL...[确定]
[root@client1mydata]# mysql -uroot –p
mysql> userm_db;
Database changed
mysql> select *from test;
+----+-----------+
| id | name |
+----+-----------+
| 1 | zhang san |
| 3 | wang wu |
+----+-----------+
这时看到了我们的数据中还有 id为3的数据,而我们在数据崩溃的时候,这条数据已经被删除了,所以我们还得应用binlog文件。
[root@client12014-02-19_02-57-09]# cat xtrabackup_binlog_info
mysql-bin.000004 979
[root@client1 mydata]# mysqlbinlog--start-position=979 /data/binlogs/mysql-bin.000004 > /tmp/all.sql
[root@client12014-02-19_02-44-34]# mysql -uroot –p
mysql> set sql_log_bin=0;
#这次恢复的过程中,不要往binlog中进行记录
mysql> source /tmp/all.sql
mysql> userm_db;
Database changed
mysql> select *from test;
+----+-----------+
| id | name |
+----+-----------+
| 1 | zhang san |
+----+-----------+
1 row in set (0.00sec)
mysql> set sql_log_bin=1;
这时,我们的数据已经完全进行了恢复。
总结:
总结:1.上面的操作,首先进行全备,然后修改数据,在rm_db中,创建了一个test表,并网表中插入2条数据1,’zhang san’;2,’li si’。接着进行增量备份,然后又操作数据库并删除一条数据 2,‘li si’;插入一条数据3,’wang wu’, 然后接着进行增量备份。最后连接数据库,删除一条数据 3,‘wang wu’,这时模拟数据库崩溃,数据文件损坏。
2.进行数据恢复,先进行准备工作,完成就是数据恢复,这时恢复到了做完增量备份后的时间点,然后是通过binlog来恢复到数据库崩溃时的时间点。
3.Xtrabackup的知识点
在innodb内部会维护redo日志文件,也就是事务日志文件。事务日志文件会存储每个innodb表数据的记录修改。
Xtrabackup在启动时会记住 log sequence number(LSN),并且复制所有的数据文件。复制过程中需要时间,所以这段时间内数据文件有改动,那么将会使数据库处于一个不同的时间点,这时,xtrabackup会运行一个后台进程,用于监视事务日志,并从事务日志复制最新的修改。Xtrabackup自启动开始,就不停的将事务日志中每个数据文件的修改都记录下来。
而在恢复准备(prepare)过程中,xtrabackup使用之前复制的事务日志,对各个数据文件执行灾难恢复(应用已经提交的事务日志到数据文件,并将修改过但没有提交的数据进行回滚操作)。当这个过程结束后,数据库就可以进行恢复还原了。
对于myisam表来说,在准备过程结束后,innodb表数据已经前滚到整个备份结束的点,这个时间点与执行flush tables with readlock的时间点是一致的,所以myisam表数据与innodb的表数据是同步的。对于增量备份而已,myisam表是没有增量备份的,每次xtrabackup的增量备份都是对myisam表的全备份,增量备份仅能应用于InnoDB或XtraDB表。
本人第一次写博客,如有错误欢迎指正。
转载于:https://blog.51cto.com/xiaoyuer3/1362861
相关文章:

js浅拷贝和深拷贝
浅度拷贝:复制一层对象的属性,并不包括对象里面的为引用类型的数据,当改变拷贝的对象里面的引用类型时,源对象也会改变。 深度拷贝:重新开辟一个内存空间,需要递归拷贝对象里的引用,直到子属性都…

关于 fallocate 文件系统预分配 的一些细粒度测试
文章目录Rocksdb 中的预分配Fallocate in rocksdb 性能测试Fallocate 使用 以及 对应配置的行为API 使用不同 Mode 的行为分配磁盘空间释放磁盘空间折叠/裁剪 文件内容清零文件 扩容文件Rocksdb 中的预分配 预分配文件存储空间 在存储引擎中用的还是比较频繁的,尤…

mac 使用nvm安装node
1.curl https://raw.github.com/creationix/nvm/master/install.sh | sh2。vi ~/.bash_profile 添加:source /Users/dujie/.nvm/nvm.sh nvm install 0.10.24 nvm use 0.10.24 # 默認使用 0.10.24 版本,否則每次關掉 Terminal 就得重新 nvm use 一次 $…

Java项目:人事管理系统(java+javaweb+jdbc)
源码获取:博客首页 "资源" 里下载! 功能介绍: 登录、新增、修改、离职 员工管理控制层: Controller RequestMapping("/employee") public class EmployeeController {Autowiredprivate IEmployeeService em…

转:async await 的前世今生 ; 异步 线程 多线程
写的非常好,改天搬过来
ubuntu14.04初体会
2014年4月17日ubuntu新的长期支持版14.04公布了,中国时间18日一早就能够下载到。18日晚。在我的X200上安装上了14.04,算是比較早一批体会到14.04正式版的人吧。对照12.04,14.04提升的执行速度非常明显,界面改善也是令人眼前一亮&a…

Linux 下获取本机所有网卡 以及 网卡对应ip 列表
简单record 一下 #include <arpa/inet.h> // struct sockaddr_in #include <errno.h> #include <net/if.h> // struct ifreq and struct if_nameindex #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/i…

Java项目:植物大战僵尸(java+swing)
源码获取:博客首页 "资源" 里下载! 功能简介: 植物大战僵尸、冒险模式、生存模式、解谜模式 小车服务类: public class CarThread extends Thread{private boolean flagtrue;private int x;private int y;private JL…

秋实大哥の恋爱物语
//裸kmp,劳资居然不会写!!!!!! 题意:中文题面自己看 解:差分裸kmp 因为可以上下移动,所以只要变化趋势相符就行,于是我们先做一个差分,…

《马哥出品高薪linux运维教程》wingkeung学习笔记-linux基础入门课程5
命令:内部命令:由shell程序自带的命令叫做内部命令;外部命令:在系统的某个路径下,有一个与命令同名的可执行程序叫做外部命令。查看内外部命令的命令:type 命令命令选项:用于调整命令执行行为的…

八、LaTex中的表格
转载于:https://www.cnblogs.com/invisible2/p/10813964.html

基于持久内存的 单机上亿(128B)QPS -- 持久化 k/v 存储引擎
文章目录性能数据设计背景设计架构Hash 索引结构 及 PMEM空间管理形态基本API 及 实现API初始化流程写流程读流程删除流程PMEM Allocator设计主要组件空间分配流程空间释放图数据库 on KVDK 性能性能数据 这个kv 存储引擎是持久化的存储引擎,存储介质是PMEM&#x…

SCALA当的trait
不是特别懂,但感觉和RUBY当中的MIX-IN功能有几分相似,这又扯到了多重继承及JAVA当中的接口虚拟类了。。 package com.hengheng.scalaclass UseTrait {} trait Logger {def log(msg : String) {println("log : " msg)} } trait ConsoleLogger …

Java项目:贪吃蛇游戏(java+swing)
源码获取:博客首页 "资源" 里下载! 功能简介: 贪吃蛇游戏 大嘴鱼洁面类。完成大嘴鱼的界面的绘制: /*** 大嘴鱼洁面类。完成大嘴鱼的界面的绘制。*/ public class BigMouthFishFrame extends JFrame{private FishPool pool null;…

使用Ext Form自动绑定Html中的Form元素
2019独角兽企业重金招聘Python工程师标准>>> Java代码 //把ext 对象绑定在Html Form元素时的ext属性中 Ext.override(Ext.Component, { initComponent :function(){ this.on(render, function(){ if(this.el) Ext.getDom(this.el).ext this; …

Directx11 教程(2) 基本的windows应用程序框架(2)
Directx11 教程(2) 基本的windows应用程序框架(2) 原文:Directx11 教程(2) 基本的windows应用程序框架(2)在本教程中,我们把前面一个教程的代码,进行封装。把初始化函数,Run函数,窗口回调函数,ShutdownWindows函数等封…

Rocksdb的事务(二):完整事务体系的 详细实现
文章目录1. 基本事务操作1.1 TransactionDB -- Pessimistic1.2 OptimisticTransactionDB1.3 Read Uncommitted1.4 SavePoint 回滚部分事务操作1.5 SetSnapshot1.6 GetForUpdate1.7 RepeatableRead2. 实现2.1 WBWI(write batch with index) & WB(write batch)2.2 Pessimisti…

关于学习编程的一些看法
1、看书,书上的代码一串一串的对吧?是不是很不好记?是不是觉得如果自己把这些代码都敲一遍很浪费时间?其实对于一些完全没有任何基础的人来说,全部敲一遍不失为一种简单的入门方法。对于有一点基础的人来说,…

Java项目:日历万年历(java+swing)
源码获取:博客首页 "资源" 里下载! 功能简介: 万年历 启动类: public class CalendarMainClass { public static void main(String args[]) { try { UIManager.setLookAndFeel("com.sun.java.swing.pl…

求大神给解释一下H3C ospf 双塔奇兵
转载于:https://blog.51cto.com/2807200/1364566

活着是为了什么?
活着是为了死亡,死亡才是完美,才是永恒。 死亡时将一无所有,所以活着不是为了能带走什么,而应该是能留下什么,这才是人活着的意义,多少人能想明白呢? 胡建龙转载于:https://www.cnblogs.com/hjl…

XFS 文件系统 (一) :设计概览
文章目录0 前言1 设计背景2. 需要解决的问题2.1 异常恢复太慢2.2 不支持大文件系统2.3 不支持大型稀疏文件2.4 不支持大型连续文件2.5 不支持大目录2.6 不支持过多文件个数3 XFS 架构4 痛点解决4.1 Allocation Groups4.2 Manging Free Space4.3 大文件的支持5 总结0 前言 虽然…

WebApi2官网学习记录---异常处理
HttpResponseException 当WebAPI的控制器抛出一个未捕获的异常时,默认情况下,大多数异常被转为status code为500的http response即服务端错误。 HttpResonseException是一个特别的情况,这个异常可以返回任意指定的http status code࿰…

Java项目:资源下载工具(java+swing)
源码获取:博客首页 "资源" 里下载! 功能简介: 下载地址、保存位置、下载设置、下载进度 文件仓库控制器: /*** ClassName: FileStoreController* Description: 文件仓库控制器**/ Controller public class FileStoreC…

江南Style之---西湖
西湖古称“钱塘湖”,又名“西子湖”,古代诗人苏轼就对它评价道:“欲把西湖比西子,淡妆浓抹总相宜。西湖,是一首诗,一幅天然图画,一个美丽动人的故事,不论是多年居住在这里的人还是匆…

mimikatz
下载后,在目标机直接运行 常用命令: 提升权限:privilege::debug 获取用户登录明文账号密码:sekurlsa::logonPasswords 获取用户密码hash值:lsadump::sam 转载于:https://www.cnblogs.com/xiaoqiyue/p/10824169.html

通过 RDTSC 指令从 CPU 寄存器中直接获取系统时钟
很多时候我们使用函数 gettimeofday 以及 clock_gettime 作为我们获取 wall lock的时钟函数。 因为这两种函数是 glibc 提供的用户封装,简单易用,而且能够精确到 ns,对于大多数的时钟需求场景都已经够用了。 但是如果 我们的应用 调用时钟频…

Java项目:星际争霸游戏(java+swing+awt界面编程+IO输入输出流+socket+udp网络通信)
源码获取:博客首页 "资源" 里下载! 功能简介: 星际争霸游戏项目,该项目实现了单人模式和多人合作模式,可记录游戏进度,新建游戏,载入历史记录等功能,多人模式下可以创建一…

GTONE清理维护建议方案
1、日志清理/home/gtone/AppGov/analyzer/log//home/gtone/AppGov/analyzer/SRC/temp//home/gtone/AppGov/WAS/logs/ 2、扩容现有磁盘空间至200GB转载于:https://www.cnblogs.com/arcer/p/4461018.html

[C#]委托和事件(讲解的非常不错)
引言 委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易。它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件就觉…