第五课——备份恢复

#学习目标

一、备份概述

二、mysqldump xtrabakup工具原理

三、xtrabackup工具使用

****

##一、备份概述

#####1、MySQL备份类型:

(1)冷备和热备:数据库需要停机才能备份的是冷备;备份是online进行的不需要停止业务的是热备。热备又分为逻辑备份、物理备份;

(2)逻辑备份的特点:

——基于数据库表中的行,直接抽取库中表的内容到磁盘中的文件

——备份体积小

——备份灵活

(3)物理备份的特点:

——基于数据库page级拷贝,不会操作数据库的逻辑库和表等

——一般是全库级备份,比较笨重

——备份效率高

——备份体积几乎是源库的大小

#####2、MySQL的备份方式:

全量备份、增量备份

##二、mysqldump xtrabakup工具原理

#####1、mysqldump备份原理

(1)是官方提供的一种逻辑备份工具,单进程备份,效率不高;逻辑备份灵活;产生一系列SQL语句,之后重新执行以产生备份的库、表及数据,也可产生CSV/XML等格式的数据;适用于各种引擎的表;

(2)使用mysqldump命令的最小权限:select,show view,trigger,lock tables

(3)mysqldump工作原理:

(3.1)默认不加--single-transaction参数,备份的开始到结束都是lock table状态(保证数据一致性)

(3.2)加上--single-transaction参数,会临时获取一个全局read锁,用于获取一致性快照,然后通过事务中savepoint将数据进行抽取(只针对事务表innodb)

(4)mysqump命令里的重要参数:

#####2、xtrabackup备份原理

(1)xtrabackup是社区版唯一一个基于page级拷贝的online备份工具,主要基于innodb存储引擎灾难恢复的。复制innodb的数据文件,尽管数据文件在内部是非一致性的,但是执行灾难恢复时可以保证这些数据文件是一致且可用的

(2)xtrabackup备份原理的流程图:

Xtrabackup有两个主要的工具:xtrabackup、innobackupex

(1)xtrabackup只能备份InnoDB和XtraDB两种数据表,而不能备份MyISAM数据表;

(2)innobackupex-1.5.1则封装了xtrabackup,是一个脚本封装,所以能同时备份处理innodb和myisam,但在处理myisam时需要加一个读锁

xtrabackup备份原理的文字描述如下:

1、在物理级别热备份主要的一大挑战就是在文件级别数据块不一致。innodb的单个page大小由innodb_page_size 来决定,一般为16K,由4个文件系统4K的块组成。

2、由于是热备份,当备份工具在拷贝innodb page的时候,数据库本身的进程也有可能在写这个page

那么备份工具拷贝出来的page,就有可能是坏的,也称为page 头尾不一致或是page断裂。这也就是普通的os复制工具(例如cp命令)不能用来做为数据库物理热备份的工具原因。

3、xtrbackup工具备份过程如下:

(1)在备份开始的时候,xtrabackup会像普通的拷贝工具一样去复制所有的innodb page,所以也会有page断裂的问题存在。

(2)xtrabackup在备份开始的时候,生成另一个线程去拷贝当前的innodb的事务日志, 并同时监控innodb的事务日志文件,一旦有生成新的innodb的事务日志,也会同时写到xtrabckup自己的日志中去。

(3)在备份结束后,xtrabacup得到的结果是一份有page断裂的数据文件和备份期间所有的innodb的事务日志。    这个时候的情况和mysql实例崩溃的结果是一样的(实例崩溃后数据文件不完整,事务日志完整),xtrabackup还需要一个过程,称为prepare,这个过程所做的事情和mysql实例崩溃后所做的操作基本一致。利用坏的数据文件和事务日志进行rollback和forward操作。

4、xtrabckup本身链接了innodb相关的库,所在我们在prepare阶段看到innodb的启动和关闭信息,很类似于标准的mysql实例启动和关闭过程,实质是我们在prepare的时候,xtrabackup在调用innodb相关的代码进行实例恢复。prepare过后,xtrabackup备份文件就是一个一致性的数据拷贝,可以直接用来启动mysql。可以看到xtrabackup通过innodb的事务日志来和数据page,,进行实例恢复,然后得到一致性的备份。而对于那些非innodb的表则无能为力了,因为没有事务日志.所以我们可以看到在xtrackup备份Myisam的表,还是需要只读表锁来进行锁定,然后再备份数据文件,和普通的拷贝工具无异。

##三、xtrabackup工具使用

xtrabackup作为innodb的hotbackup工具,因开源,热备份和物理备份而在mysql中部署广泛。

####1、xtrabackup的安装部署

(1)先安装依赖包:

yum install perl-DBI

yum install perl-DBD-MySQL

yum install perl-Time-HiRes

yum install perl-IO-Socket-SSL

(2)下载并解压xtrabackup安装包:

cd /usr/local/

tar zxvf percona-xtrabackup-2.1.9-744-Linux-i686.tar.gz

(3)解压缩后的包内有两个子目录,bin目录下的命令可以直接使用,也可以复制到/usr/bin目录下再使用:

(4)试运行其中一个命令,如下:

说明命令使用没问题,为了方便直接使用,可以将bin下所有命令复制到/usr/bin目录下:

####2、innobakupex的完全备份

(1)创建一个最小权限的用户专门用于innobakupex备份:

mysql> create user ‘bkpuser‘@‘localhost‘ identified by ‘bkpuser‘;

Query OK, 0 rows affected (0.00 sec)

mysql> grant reload,lock tables,replication client on *.* to ‘bkpuser‘@‘localhost‘;

或者

mysql> grant reload,lock tables,replication client on *.* to ‘bkpuser‘@‘localhost‘ identified by ‘bkpuser‘;

(2)innobackupex的备份详解

[[email protected] bin]# innobackupex --socket=/httx/run/mysql/data/mysql.sock --defaults-file=/etc/my.cnf --user=bkpuser --password=bkpuser /opt/bkpdata/

XtraBackup对Innodb的备份之所以是热备,无需锁表,是基于Innodb自身的崩溃恢复机制,它首先复制所有的Innodb数据文件,这样复制出来的文件肯定是不一致的,然后对每个文件进行崩溃恢复处理,最终达到一致。就和MySQL在启动Innodb的时候一样,会通过比较数据文件头和redo log文件头信息来检查数据是否是一致的,如果不一致就尝试通过前滚(把redo log中所有提交的事务写入数据文件)和回滚(从数据文件中撤销所有redo log中未提交的事务引起的修改)来使数据达到最终一致。

XtraBackup在启动的时候会记录一个LSN(log sequence number),然后就把所有的Innodb数据文件复制出来,这样复制出来的数据文件是不一致的,   但是XtraBackup会在后台运行一个进程把所有对redo log file的修改记录下来,只要有了这个数据,就能进行崩溃恢复。只所以要额外记录下来,是因为MySQL自身的redo log file是可重用的。  

以上的操作是由xtrabackup二进制程序(比如xtrabackup_55)完成的,如果使用innobackupex 脚本,刚才的步骤完成以后,innobackupex就会去备份MyISAM表和.frm文件,这时要保证数据的一致性就会先锁表了,通过FLUSH TABLES WITH READ LOCK命令锁表然后把文件复制出来,再释放掉这个锁。

在恢复数据的时候,要经过prepare(recovery)和restore两个步骤。在prepare结束以后,Innodb的表恢复到了复制Innodb文件结束的时间点,这个时间    点也就是锁表复制MyISAM表的起点,所以最终数据是一致的。一般我们在恢复的时候执行两次prepare,是因为第二次prepare会帮助我们生成redo log文件,从而加快MySQL数据库启动的速度。

(3)innobackupex备份生成的文件详解:

[[email protected] 2016-08-30_08-33-02]# ll

total 12308

-rw-r--r-- 1 root root      238 Aug 30 08:33 backup-my.cnf

-rw-r----- 1 root root 12582912 Aug 30 08:33 ibdata1

drwx------ 2 root root      151 Aug 30 08:33 mysql

drwx------ 2 root root       90 Aug 30 08:33 test

-rw-r--r-- 1 root root       13 Aug 30 08:33 xtrabackup_binary

-rw-r--r-- 1 root root       24 Aug 30 08:33 xtrabackup_binlog_info

-rw-r----- 1 root root       77 Aug 30 08:33 xtrabackup_checkpoints

-rw-r----- 1 root root     2560 Aug 30 08:33 xtrabackup_logfile

默认情况下,不加--no-timestamp参数,备份数据会放在在指定的备份根目录下一个以时间戳命名的子目录下。备份目录下除了数据目录和文件以外,还有如下文件:

backup-my.cnf文件记录了源数据库的innodb表空间信息,便于恢复;

[[email protected] 2016-08-30_08-33-02]# cat backup-my.cnf

# This MySQL options file was generated by innobackupex.

# The MySQL server

[mysqld]

innodb_data_file_path=ibdata1:10M:autoextend

innodb_log_files_in_group=2

innodb_log_file_size=50331648

innodb_page_size=16384

innodb_undo_tablespaces=0

xtrabackup_binary文件是记录了调用的xtrabackup的二进制版本,可以通过--ibbackup=IBBACKUP-BINARY参数来重新指定,一般和mysql版本对应:

[[email protected] 2016-08-30_08-33-02]# cat xtrabackup_binary

xtrabackup_56

xtrabackup_binlog_info文件:记录了备份时的binlog位点,也就是show master status可以查看到的;

[[email protected] 2016-08-30_08-33-02]# cat xtrabackup_binlog_info

mysql-bin.000001        2671

xtrabackup_checkpoints文件:记录了备份的类型(全量还是增量等),以及lsn的信息。

[[email protected] 2016-08-30_08-33-02]# cat xtrabackup_checkpoints

backup_type = full-backuped

from_lsn = 0

to_lsn = 1744979

last_lsn = 1744979

xtrabackup_logfile文件:是个日志文件,XtraBackup会在后台运行一个进程把所有对redo log file的修改记录下来

[[email protected] 2016-08-30_08-33-02]# mysqlbinlog xtrabackup_logfile

/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;

/*!40019 SET @@session.max_insert_delayed_threads=0*/;

/*!50003 SET @[email protected]@COMPLETION_TYPE,COMPLETION_TYPE=0*/;

DELIMITER /*!*/;

ERROR: File is not a binary log file.

DELIMITER ;

# End of log file

ROLLBACK /* added by mysqlbinlog */;

/*!50003 SET [email protected]_COMPLETION_TYPE*/;

/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

####3、innobakupex的prepare

(1)执行prepare操作,回滚未提交事务,以及同步已提交事务至数据文件,使数据文件处于一致性状态:

innobackupex --apply-log /opt/bkpdata/2016-08-30_08-33-02/

其中,--apply-log参数是同xtrabackup的--prepare参数,一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据 文件仍处理不一致状态。--apply-log的作用是通过回滚未提交的事务及同步已经提交的事务至数据文件使数据文件处于一致性状态。

子目录/opt/bkpdata/2016-08-30_08-33-02/是备份时没有带--no-timestamp参数,因此备份数据放入指定备份根目录的以时间戳命名的子目录里。

####4、innobakupex的数据恢复

innobackupex --copy-back /path/to/BACKUP-DIR

从my.cnf读取datadir/innodb_data_home_dir/innodb_data_file_path等变量;

先复制MyISAM表,然后是innodb表,最后为logfile;--data-dir目录必须为空

来自为知笔记(Wiz)

时间: 2024-10-17 22:41:54

第五课——备份恢复的相关文章

centos mysql 实战 第十二节课 备份恢复 备份方案 备份可以分为几种形式 mysqldump 在不同版本里对性能会不会有影响? mysqldump 的用户需要什么权限 mysqldump 支持Where条件 备份评估

centos mysql 实战 第十二节课  备份恢复  备份方案  备份可以分为几种形式  mysqldump 在不同版本里对性能会不会有影响?   mysqldump 的用户需要什么权限   mysqldump 支持Where条件  备份评估 阿里云Percona-live 2016-4 基于Innodb物理复制 mysql5.7没有线程池,需要用percona版本mysql才有,percona的定位是做免费的企业版mysql mysql5.6的memcached插件只是提供memcache

BeagleBone Black板第五课:Shell脚本编程实验

BBB板第五课:Shell脚本编程实验 在一上课我们通过简单的echo命令测试并控制GPIO端口的高低电平输出,实现对一个LED指示灯的点亮和关闭控制,本节将通过Shell脚本编程,来完成两个LED指示灯的交替闪亮的实验. 实验器材:准备两个二极管指示灯,面包板等 使用GPIO端口P8.12和P8.11两个引脚 我们暂时不借助其他工具软件,直接远程登陆到BBB板的图形桌面,使用内置的Ledfpad编辑器来完成Shell脚本的编程. 远程登陆BBB板图形桌面还记得吧,不记得话参考前面的课程,这里就

mysql之备份恢复

一.为什么要备份? 灾难恢复 需求改变 测试 二.事先考虑的问题 可以容忍丢失多长时间的数据? 恢复要在多长时间内完成? 是否需要持续提供服务? 需要恢复什么,整个数据库服务器?单个数据库?一个或多个表?某个语句? 三.备份类型 根据是否需要数据库离线分为: 冷备:cold backup,关闭mysql服务,或不允许读写请求 温备:warm backup,备份的同时仅支持读请求 热备:hot backup,备份的同时,业务功能不受影响,需要工具和数据库引擎支持 根据要备份的数据范围可分为: 完全

SYSTEM 表空间管理及备份恢复

标签: systemoraclesqldatabasefile数据库 2010-11-28 18:14 12689人阅读 评论(0) 收藏 举报 分类: -----Oracle备份恢复(16) 版权声明:本文为博主原创文章,欢迎扩散,扩散请务必注明出处. --============================= -- SYSTEM 表空间管理及备份恢复 --============================= SYSTEM表空间是Oracle数据库最重要的一个表空间,存放了一些DDL

Mysql备份恢复

五.Mysql备份恢复 1.备份方式: ■直接phpmyadmin导出备份.我们用root管理权限进入phpmyadmin,然后把需要备份网站的mysql数据库导出备份,建议用gzip压缩格式 ■ mysqldump命令.我们用登陆SSH,然后用命令备份 ■ LVS快照备份  2.备份策略: ■ 完整备份 ■ 增量备份 ■ 差异备份 3.备份类型: ■ 冷备(cold backup):需要关mysql服务,读写请求均不允许状态下进行: ■ 温备(warm backup): 服务在线,但仅支持读请

MySQL集群安装、负载均衡及备份恢复

MYSQL集群安装学习笔记 [一]服务器准备(操作系统linux皆可,我用的是RHEL6.4):一个管理节点 10.101.4.32两个数据节点 10.101.4.33 10.101.4.34两个查询节点 10.101.4.36 10.101.4.37 下载最新版本的mysql(我用的是 mysql-cluster-gpl-7.3.7-linux-glibc2.5-x86_64.tar) [二]所有节点配置:1.hosts配置,增加所有节点IP与主机名对应 2.增加mysql用户和组, 并将my

Jenkins部署与备份恢复实战

一.关于Jenkins Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能!先了解下相关概念:CI: continuous integration持续集成 (code -- bulid -- integrate --test)CD: continuous Delivery 持续交付 ( test -- release)continuous Deployment 持续部署 简单来说就是通过Jenk

全备份恢复mysqlbump和mraiabackup

逻辑备份恢复数据量较小 一个库第一步备份 mysqldump -uroot -p123 --databases xiao > /root/xiao.sql第二步恢复MariaDB [xiao]> source xiao.sql 所有库mysqldump -uroot -p123 -x --all-databases > all.sql 一个表多个# mysqldump -uroot -p123 zxw students > students.sql备份工具mariabackupmy

MongoDB迁移方案-冷备份+增量备份恢复

QQ群:465614686 1.  环境构建步骤 (1)线上环境 都是副本集模式 3个业务访问节点+1个隐藏节点 (隐藏节点做hadoop.spark数据同步使用以及数据报表查询等) (2)主机以及配置说明 10.21.18.21  primary节点    优先级为100 10.21.18.22  secondary节点  优先级为90 10.21.18.23  secondary节点  优先级为80 10.21.18.24  隐藏节点       优先级为0 系统配置:128G内存,64Co