Innobackupex 全备数据库

    对于MySQL数据库的热备,xtrabackup是除了MySQL enterprise backup之外的不二之选。该工具提供了基于innodb存储引擎的热备,支持全量,增量备份,部分备份,时点恢复以及使用xtrabackup备份来重做slave等。xtrabackup工具包包含一个innobackupex命令行工具,同时支持InnoDB引擎以及MyISAM引擎。本文主要描述的是trabackup的备份原理并给出了相关演示。

1、安装部署Xtrabackup   下载地址:http://www.percona.com/software/percona-xtrabackup   # 本次安装的版本为2.2.5,下载后解压为rpm文件,直接安装即可   # tar -xvf Percona-XtraBackup-2.2.5-r5027-el5-x86_64-bundle.tar   # rpm -Uvh percona-xtrabackup-2.2.5-5027.el5.x86_64.rpm   # rpm -Uvh percona-xtrabackup-debuginfo-2.2.5-5027.el5.x86_64.rpm   # rpm -Uvh percona-xtrabackup-test-2.2.5-5027.el5.x86_64.rpm   [root@app ~]# ls /usr/bin/xtraba* /usr/bin/inno*     /usr/bin/innobackupex  /usr/bin/innochecksum  /usr/bin/xtrabackup     Xtrabackup有两个主要的工具:xtrabackup、innobackupex   a、xtrabackup只能备份InnoDB和XtraDB两种数据表,而不能备份MyISAM数据表   b、innobackupex是一个perl脚本封装了xtrabackup。支持同时备份InnoDB和MyISAM引擎的表。     注:本文描述的xtrabackup与innobackupex可以看做是同一概念。

2、xtrabackup工作原理     InnoDB引擎很大程度上与Oracle类似,使用redo,undo机制,因此在热备期间需要考虑对于日志缓冲区在线事物日志及时写出到文件的问题。如果log buffer没有及时写出将被日志的循环写特性覆盖。xtrabackup在启动时会记住log sequence number(LSN),然后一页一页地复制InnoDB的数据。与此同时,监控log buffer中的日志情况,一旦log buffer发生变化,即数据发生了不一致,该过程会立即被捕获并把变化的页面复制到xtrabckup log,直到全部innoDB数据文件复制完成之后,停止监控log buffer及日志复制。     xtrabackup在恢复期间对提交的事务前滚,未提交或失败的事务进行回滚,从而保证数据的一致性。因此对于InnoDB表在备份期间不会锁表。由于XtraBackup其内置的InnoDB库打开文件的时候是rw的,所以运行XtraBackup的用户,必须对InnoDB的数据文件具有读写权限。

3、extrabackup的备份步骤

4、演示全备

#当前环境
robin@localhost[(none)]> show variables like 'version';
+---------------+------------+
| Variable_name | Value      |
+---------------+------------+
| version       | 5.6.12-log |
+---------------+------------+

robin@localhost[(none)]> show variables like '%default_storage%';
+------------------------+--------+
| Variable_name          | Value  |
+------------------------+--------+
| default_storage_engine | InnoDB |
+------------------------+--------+

#全备数据库
[mysql@app ~]$ innobackupex --user=robin -password=xxx --port=3606 --socket=/tmp/mysql3606.sock \
> --defaults-file=/data/inst3606/data3606/my3606.cnf /data/bak/hotbak

InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy
               ............
141105 15:41:59  innobackupex: Connecting to MySQL server with DSN 'dbi:mysql:;
                                  .............
innobackupex: Using mysql server version 5.6.12-log

innobackupex: Created backup directory /data/bak/hotbak/2014-11-05_15-42-02 #在指定备份目录下创建一个基于时间戳的文件夹

141105 15:42:02  innobackupex: Starting ibbackup with command: xtrabackup  --defaults-file="/data/inst3606/data3606/my3606.cnf" 
--defaults-group="mysqld" --backup --suspend-at-end --target-dir=/data/bak/hotbak/2014-11-05_15-42-02 
--tmpdir=/tmp --extra-lsndir='/tmp'
innobackupex: Waiting for ibbackup (pid=27441) to suspend
innobackupex: Suspend file '/data/bak/hotbak/2014-11-05_15-42-02/xtrabackup_suspended_2'

#下面从配置文件获取有关innodb的配置信息
xtrabackup version 2.2.5 based on MySQL server 5.6.21 Linux (x86_64) (revision id: )
xtrabackup: uses posix_fadvise().
xtrabackup: cd to /data/inst3606/data3606
xtrabackup: open files limit requested 0, set to 1024      # Author : Leshami
xtrabackup: using the following InnoDB configuration:      # Blog   : http://blog.csdn.net/leshami
xtrabackup:   innodb_data_home_dir = ./
xtrabackup:   innodb_data_file_path = ibdata1:10M:autoextend
xtrabackup:   innodb_log_group_home_dir = ./
xtrabackup:   innodb_log_files_in_group = 2
xtrabackup:   innodb_log_file_size = 50331648
>> log scanned up to (380655683)   #扫描innodb日志lsn并复制inndodb系统表空间
[01] Copying ./ibdata1 to /data/bak/hotbak/2014-11-05_15-42-02/ibdata1
>> log scanned up to (380655683)
>> log scanned up to (380655683)
[01]        ...done
[01] Copying ./mysql/slave_relay_log_info.ibd to /data/bak/hotbak/2014-11-05_15-42-02/mysql/slave_relay_log_info.ibd
            #类似部分省略,全部是基于innodb引擎的ibd文件...
[01] Copying ./tempdb/tb_user.ibd to /data/bak/hotbak/2014-11-05_15-42-02/tempdb/tb_user.ibd
[01]        ...done
>> log scanned up to (380655683)
xtrabackup: Creating suspend file '/data/bak/hotbak/2014-11-05_15-42-02/xtrabackup_suspended_2' with pid '27441'

141105 15:42:30  innobackupex: Continuing after ibbackup has suspended
141105 15:42:30  innobackupex: Executing FLUSH TABLES WITH READ LOCK... #缓冲写出到数据文件并锁表
141105 15:42:30  innobackupex: All tables locked and flushed to disk

141105 15:42:30  innobackupex: Starting to backup non-InnoDB tables and files #复制非innodb表及相关文件
innobackupex: in subdirectories of '/data/inst3606/data3606'
innobackupex: Backing up files '/data/inst3606/data3606/mysql/*.{frm,isl,MYD,MYI,MAD,MAI,MRG,TRG,TRN,ARM,ARZ,CSM,CSV,opt,par}' (74 files)
>> log scanned up to (380655683)
innobackupex: Backing up files '/data/inst3606/data3606/salary/*.{frm,isl,MYD,MYI,MAD,MAI,MRG,TRG,TRN,ARM,ARZ,CSM,CSV,opt,par}' (99 files)
innobackupex: Backing up files '/data/inst3606/data3606/performance_schema/*.{frm,isl,MYD,MYI,MAD,MAI,MRG,TRG,TRN,ARM,ARZ,CSM,CSV,opt,par}' (53 files)
innobackupex: Backing up file '/data/inst3606/data3606/tempdb/tb_user.frm'
innobackupex: Backing up file '/data/inst3606/data3606/tempdb/db.opt'
141105 15:42:31  innobackupex: Finished backing up non-InnoDB tables and files

141105 15:42:31  innobackupex: Executing FLUSH ENGINE LOGS...    #innodb logfile写出到磁盘
141105 15:42:31  innobackupex: Waiting for log copying to finish

xtrabackup: The latest check point (for incremental): '380655683' #获取最新的lsn
xtrabackup: Stopping log copying thread.
.>> log scanned up to (380655683)

xtrabackup: Creating suspend file '/data/bak/hotbak/2014-11-05_15-42-02/xtrabackup_log_copied' with pid '27441'
xtrabackup: Transaction log of lsn (380655683) to (380655683) was copied.
141105 15:42:32  innobackupex: All tables unlocked                #unlock table

innobackupex: Backup created in directory '/data/bak/hotbak/2014-11-05_15-42-02'  #列出binlog的位置
innobackupex: MySQL binlog position: filename 'inst3606bin.000001', position 352, GTID of the last change ''
141105 15:42:32  innobackupex: Connection to database server closed
141105 15:42:32  innobackupex: completed OK! 

5、备份的相关信息

除了从输入的日志可以看到备份的相关信息之外,也可以从备份位置获取备份期间产生的相关信息
#查看备份期间生成的文件
[mysql@app ~]$ ls /data/bak/hotbak/2014-11-05_15-42-02/
backup-my.cnf  mysql               salary  xtrabackup_binlog_info  xtrabackup_info
ibdata1        performance_schema  tempdb  xtrabackup_checkpoints  xtrabackup_logfile

#查看备份有关的总体信息
[mysql@app ~]$ more /data/bak/hotbak/2014-11-05_15-42-02/xtrabackup_info
uuid = 4d49753a-64bf-11e4-8850-8c89a5d108ae
name = 
tool_name = innobackupex
tool_command = --user=robin -password=xxx --port=3606 --socket=/tmp/mysql3606.sock 
  --defaults-file=/data/inst3606/data3606/my3606.cnf  /data/bak/hotbak
tool_version = 1.5.1-xtrabackup
ibbackup_version = xtrabackup version 2.2.5 based on MySQL server 5.6.21 Linux (x86_64) (revision id: )
server_version = 5.6.12-log
start_time = 2014-11-05 15:41:59
end_time = 2014-11-05 15:42:32
lock_time = 2
binlog_pos = filename 'inst3606bin.000001', position 352, GTID of the last change ''
innodb_from_lsn = 0
innodb_to_lsn = 380655683
partial = N
incremental = N
format = file
compact = N
compressed = N
encrypted = N

#查看备份binlog有关的信息
[mysql@app ~]$ more /data/bak/hotbak/2014-11-05_15-42-02/xtrabackup_binlog_info
inst3606bin.000001      352

#检查点的相关信息
[mysql@app ~]$ more /data/bak/hotbak/2014-11-05_15-42-02/xtrabackup_checkpoints
backup_type = full-backuped
from_lsn = 0
to_lsn = 380655683
last_lsn = 380655683
compact = 0 

6、innobackupexe备份产生的相关文件   backup-my.cnf   MySQL files +   xtrabackup_binlog_info   xtrabackup_binlog_pos_innodb   xtrabackup_slave_info(When –slave-info is used)   xtrabackup_checkpoints   Only after –apply-log   xtrabackup_logfile   xtrabackup_binary

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序猿DD

Spring Cloud Config采用数据库存储配置内容

在之前的《Spring Cloud构建微服务架构:分布式配置中心》一文中,我们介绍的Spring Cloud Server配置中心采用了Git的方式进行配置信息...

2233
来自专栏张善友的专栏

用sp_change_users_login消除Sql Server的孤立用户

孤立帐户,就是某个数据库的帐户只有用户名而没有登录名,这样的用户在用户库的sysusers系统表中存在,而在master数据库的syslogins中却没有对应的...

1986
来自专栏云计算

如何在Debian 7上安装MySQL

MySQL是一种流行的数据库管理系统,用于Web和服务器应用程序。本指南将介绍如何在Debian 7(Wheezy)的Linode上安装,配置和管理MySQL。

1293
来自专栏芋道源码1024

数据库中间件 MyCAT源码分析 —— XA分布式事务

---- 1. 概述 2. XA 概念 3. MyCAT 代码实现 3.1 JDBC Demo 代码 3.2 MyCAT 开启 XA 事务 3.3 MyCAT...

4479
来自专栏LhWorld哥陪你聊算法

Hive篇--相关概念和使用二

分桶表是对列值取哈希值的方式,将不同数据放到不同文件中存储。 对于hive中每一个表、分区都可以进一步进行分桶。(可以对列,也可以对表进行分桶) 由列的哈希值除...

2632
来自专栏杨建荣的学习笔记

关于修改分区表的准备和操作细则(r3笔记26天)

在之前的博文中,讨论过一个根据分区键值发现性能问题的案例。90%以上的数据都分布在了一个分区上,其它的分区要么没有数据要么数据很少,这是很明显的分区问题。当然这...

3086
来自专栏FreeBuf

收集各类安全设备、Nginx日志实现日志统一管理及告警

近来安全测试项目较少,想着把安全设备、nginx日志收集起来并告警, 话不多说,直接说重点,搭建背景:

2917
来自专栏不想当开发的产品不是好测试

centos6.6 下安装mysql

背景 没啥好说的,就是需要搭建自己的测试数据库跟研发的数据隔离开来,需要怼mysql 步骤 1. 确认线上mysql的版本 SELECT VERSION(); ...

2315
来自专栏java系列博客

pl/sql导入excel到oracle表

2287
来自专栏运维技术迷

MySQL数据库(一):安装MySQL数据库

安装环境: 操作系统版本:RHEL 6.5 安装版本:MYSQL 5.1 升级版本:MYSQL 5.6 一、简述MYSQL 1.什么是数据库? DB ...

4508

扫码关注云+社区

领取腾讯云代金券