澳门新浦京娱乐场网站-www.146.net-新浦京娱乐场官网
做最好的网站

xtrabackup备份mysql数据库的采取办法,MySQL备份和复

xtrabackup是由percona提供的mysql备份工具,它是生机勃勃款物理备份工具,通过接二连三数据库把数据库的数据备份出来。对于innodb存款和储蓄引擎其扶助全量备份和增量备份。对于myisam存款和储蓄引擎只援助增量备份。因为xtrabackup对innodb的增量备份是基于表空间的LSN进行的,所谓LSN即:表空间分成四个数据块,每个数据块都有照管的队列号,当数码块数据爆发变化则更新连串号。全量备份即备份全部数据块,则增量备份则依据全量备份最终一个数据块的队列号到最新的数额块类别号实行备份。因为myisam不支持表空间,所以无法拓宽增量备份。

MariaDB/MySQL备份苏醒连串:
备份和回复(生机勃勃):mysqldump工具用法详述
备份和还原(二):导入、导出表数据
备份和恢复(三):xtrabackup用法和法规详述

接纳Xtrabackup进行mysql数据库的备份

应用Xtrabackup来完成数据库的备份

Xtrabackup是有percona集团开垦的风流倜傥款开源备份工具,它与ibbackup这一个备份工具分裂的是。ibbackup是一个收款的备份工具,并且在其备份质量上,ibbackup不比Xtrabackup。ibbackup和Xtrabackup都对Innodb存款和储蓄引擎协助在线物理完全备份和在线物理增量备份,对MyISAM存款和储蓄引擎来讲,只援助温备份而已。

使用Xtrabackup备份mysql数据库步骤如下:

一、安装

1、简介

Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟风流倜傥生龙活虎款开源的可以对innodb和xtradb存款和储蓄引擎的数据库举办热备的工具。xtradb是Innodb的加强版,在其性质上比Innodb要好,特点如下:

(1)备份进程便捷、可信赖;

(2)备份进程不会堵塞正在实施的事体;

(3)能够基于压缩等功用节约磁盘空间和流量;

(4)自动实现备份查证;

(5)还原速度快;

2、安装

其风靡版的软件可从   获得。本文基于TiguanHEL5.8的系统,因而,直接下载相应版本的rpm包安装就能够,这里不再演示其进程。

安装完结以后,会转换叁个/usr/bin/innobackupex脚本文件,这些本子文件封装了xtrabackup,能而且管理Innodb和Myisam,但在拍卖Myisam时索要加贰个读锁。

3、innobackupex简介

innobackupex

innobackupex有越来越强的效应,它构成了xtrabackup和别的的片段功能,他不只好全量备份/复苏,还足以依赖时间的增量备份与还原。

innobackupex备份原理

innobackupex首先调用xtrabackup来备份innodb数据文件,当xtrabackup达成后,innobackupex就翻开文件xtrabackup_suspended ;然后实行“FLUSH TABLES WITH READ LOCK”来备份别的的公文

innobackupex恢复生机原理

innobackupex首先读取my.cnf,查看变量(datadir,innodb_data_home_dir,innodb_data_file_path,innodb_log_group_home_dir)对应的目录是存在,显著相关目录存在后,然后先copy myisam表和目录,然后在copy innodb的表、索引和日志

二、备份的实现

1、完全备份

# innobackupex --user=DBUSER --password=DBUSERPASS  /path/to/BACKUP-DIR/

万后生可畏要使用贰个纤维护合法权益限的客商打开备份,则可根据如下命令成立此类客户:

mysql> CREATE USER  ’bkpuser’@’localhost’ IDENTIFIED BY ’s3cret’;

mysql> REVOKE ALL P昂科威IVILEGES, GRANT OPTION FROM ’bkpuser’;(如若出错,则足以不增多)

mysql> GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO ’bkpuser’@’localhost’ ;

mysql> FLUSH PRIVILEGES;

选择innobakupex备份时,其会调用xtrabackup备份全部的InnoDB表,复制全体有关表结构定义的有关文件(.frm)、以至MyISAM、ME普拉多GE、CSV和ARC腹股沟肉芽肿E表的连锁文书,同有时候还也许会备份触发器和数据库配置音信相关的文件。那么些文件会被保留至四个以时日命名的目录中

在备份的同有时间,innobackupex还也许会在备份目录中创制如下文件:(1)xtrabackup_checkpoints —— 备份类型(如完全或增量)、备份状态(如是不是已经为prepared状态)和LSN(日志类别号)范围音信;

每一种InnoDB页(平常为16k高低)都会含有叁个日志类别号,即LSN。LSN是整整数据库系统的种类版本号,每个页面相关的LSN可以注明此页面这段时间是何许爆发改变的。

(2)xtrabackup_binlog_info —— mysql服务器当前正值选择的二进制日志文件及至备份那生龙活虎阵子达成二进制日志事件的职分。

(3)xtrabackup_binlog_pos_innodb —— 二进制日志文件及用于InnoDB或XtraDB表的二进制日志文件的一时position。

(4)xtrabackup_binary —— 备份中用到的xtrabackup的可推行文件;

(5)backup-my.cnf —— 备份命令用到的安顿选项音讯;

在利用innobackupex进行备份时,还是可以够运用--no-timestamp选项来阻止命令自动创立八个以时间命名的目录;如此一来,innobackupex命令将会创建多个BACKUP-DI福睿斯目录来储存备份数据。

2、企图(prepare)一个全然备份

貌似景况下,在备份实现后,数据尚且不能够用于复苏操作,因为备份的数额中大概会包括还未提交的事情或曾经付出但还没同步至数据文件中的事务。因而,当时数据文件仍管理不平等状态。“盘算”的第风流倜傥作用正是经过回滚未提交的工作及合营已经交给的作业至数据文件也使得数据文件处于后生可畏致性状态。

innobakupex命令的--apply-log选项可用于实现上述作用。如下边包车型大巴命令:# innobackupex --apply-log  /path/to/BACKUP-DIR

只要实践科学,其最后输出的几行音讯平时如下:

xtrabackup: starting shutdown with innodb_fast_shutdown = 1

InnoDB: FTS optimize thread exiting.

InnoDB: Starting shutdown...

InnoDB: Shutdown completed; log sequence number 1640470

020124 06:22:05  innobackupex: completed OK!

在促成“希图”的长河中,innobackupex常常还是能使用--use-memory选项来钦点其得以应用的内部存款和储蓄器的尺寸,默许平时为100M。要是有丰盛的内存可用,能够多分割一些内部存款和储蓄器给prepare的历程,以增进其姣好速度。

3、从贰个通通备份中苏醒数据,恢复数据时,mysql服务器能够不在线(离线复苏数据)

innobackupex命令的--copy-back选项用于执行苏醒操作,其通过复制全部数占有关的公文至mysql服务器DATADISportage目录中来施行恢复生机进度。innobackupex通过backup-my.cnf来收获DATADI本田UR-V目录的有关新闻。

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

借使进行不利,其出口新闻的最终几行平时如下:

innobackupex: Starting to copy InnoDB log files

innobackupex: in '/tmp/backup/2002-01-24_06-09-50'

innobackupex: back to original InnoDB log directory '/mydata/data'

innobackupex: Copying '/tmp/backup/2002-01-24_06-09-50/ib_logfile0' to '/mydata/data/ib_logfile0'

innobackupex: Copying '/tmp/backup/2002-01-24_06-09-50/ib_logfile1' to '/mydata/data/ib_logfile1'

innobackupex: Finished copying back files.

020124 06:29:22  innobackupex: completed OK!

请保管如上音信的最行大器晚成行现身“innobackupex: completed OK!”。

当数据复苏至DATADI奥迪Q5目录以往,还亟需确定保障全体数据文件的属主和属组均为正确的客商,如mysql,不然,在起步mysqld以前还亟需事先校正数据文件的属主和属组。如:

# chown -R  mysql:mysql  /mydata/data/

假设不订正数据目录及其该目录下全体文件的属主和属组,那么将会促成mysqld运行不了。会现身如下错误提醒消息:

Starting MySQL...The server quit without updating PID file [FAILED]/data/localhost.pid).

4、使用innobackupex举办增量备份

各样InnoDB的页面都会含有叁个LSN新闻,每当相关的数目发生转移,相关的页面包车型地铁LSN就能够自动增进。那便是InnoDB表能够开展增量备份的底子,即innobackupex通过备份上次统统备份之后产生转移的页面来兑现。

要促成率先次增量备份,可以选取下边包车型大巴通令举行:

# innobackupex --incremental /backup --incremental-basedir=BASEDIR

当中,BASEDISportage指的是全然备份所在的目录,此命令实践完成后,innobackupex命令会在/backup目录中创建四个新的以时日命名的目录以存放全数的增量备份数据。其它,在实行过增量备份之后再贰回进行增量备份时,其--incremental-basedir应该针对上叁遍的增量备份所在的目录。

急需注意的是,增量备份仅能动用于InnoDB或XtraDB表,对于MyISAM表来讲,试行增量备份时其实实行的是一心备份。

“打算”(prepare)增量备份与“筹算“完全备份有着一些莫衷一是,尤其要专心的是:

(1)须要在每一个备份(包含完全和各类增量备份)上,将已经付出的工作举办“重播”。“重放”之后,全体的备份数据将统生机勃勃到完全备份上。

(2)基于全数的备份将未提交的事务进行“回滚”。

于是,操作就产生了:# innobackupex --apply-log --redo-only BASE-DIR

跟着施行:# innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-1

以往是第1个增量:# innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-2

当中BASE-DILX570指的是一心备份所在的目录,而INCREMENTAL-DI牧马人-1指的是第4回增量备份的目录,INCREMENTAL-DILacrosse-2指的是第二遍增量备份的目录,别的依次类推,即只要有一再增量备份,每三遍都要实行如上操作;

最后,全体(完全备份和增量备份)恢复生机进度施行如下命令:

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

/path/to/BACKUP-DIQashqai为完全备份所在目录

5、Xtrabackup的“流”及“备份压缩”功效

Xtrabackup对备份的数据文件扶助“流”功效,即能够将备份的数量通过STDOUT传输给tar程序进行归档,并不是暗许的直白保存至某备份目录中。要使用此效率,仅需求利用--stream选项就可以。如:

# innobackupex --stream=tar  /backup | gzip > /backup/`date %F_%H-%M-%S`.tar.gz

居然也足以应用相符如下命令将数据备份至别的服务器:

# innobackupex --stream=tar  /backup | ssh  [email protected] "cat -  > /backups/`date %F_%H-%M-%S`.tar"

别的,在实行本地备份时,还足以接纳--parallel选项对七个公文举行并行复制。此选项用于内定在复制时运转的线程数目。当然,在实际张开备份时要接受此效能的便利性,也须要启用innodb_file_per_table选项或共享的表空间通过innodb_data_file_path选项存款和储蓄在七个ibdata文件中。对某大器晚成数据库的多少个文本的复制不可能选取到此意义。其大致利用方法如下:# innobackupex --parallel  /path/to/backup

还要,innobackupex备份的数据文件也得以储存至远程主机,这足以应用--remote-host选项来兑现:

# innobackupex  [email protected]/path/IN/REMOTE/HOST/to/backup

6、导入或导出单张表

默许情况下,InnoDB表不能够由此一向复制表文件的章程在mysql服务器之间进行移植,纵然使用了innodb_file_per_table选项。而使用Xtrabackup工具得以兑现此种成效,但是,当时亟待“导出”表的mysql服务器启用了innodb_file_per_table选项(严谨来讲,是要“导出”的表在其创设在此之前,mysql服务器就启用了innodb_file_per_table选项),何况“导入”表的服务器相同的时间启用了innodb_file_per_table和innodb_expand_import选项。

(1)“导出”表

导出表是在备份的prepare阶段举办的,因而,一旦完全备份完毕,就足以在prepare进程中经过--export选项将某表导出了:

# innobackupex --apply-log --export /path/to/backup

此命令会为各种innodb表的表空间创立几个以.exp结尾的文书,那一个以.exp结尾的文书则足以用来导入至其余服务器。

(2)“导入”表

要在mysql服务器上导入来自于别的服务器的某innodb表,须求先在现阶段服务器上开创贰个跟原表表结构相似的表,而后能力达成将表导入:

mysql> CREATE TABLE mytable (...)  ENGINE=InnoDB;

下一场将此表的表空间删除:mysql> ALTE中华V TABLE mydatabase.mytable  DISCACR-VD TABLESPACE;

接下去,以后自于“导出”表的服务器的mytable表的mytable.ibd和mytable.exp文件复制到当前服务器的数额目录,然后利用如下命令将其“导入”:mysql> ALTEWrangler TABLE mydatabase.mytable  IMPORT TABLESPACE;

7、使用Xtrabackup对数据库进行一些备份

Xtrabackup也足以兑现部分备份,即只备份有个别或一些内定的数据库或某数据库中的某些或一些表。但要使用此作用,必须启用innodb_file_per_table选项,即每张表保存为多个单独的文本。同一时候,其也不帮忙--stream选项,即不协助将数据通过管道传输给其余程序开展处理。

别的,还原部分备份跟过来全部数码的备份也区别,即你无法经过轻便地将prepared的风姿浪漫部分备份使用--copy-back选项直接复制回数据目录,而是要由此导入表的自由化来促成复苏。当然,有些景况下,部分备份也能够平昔通过--copy-back实行还原,但这种措施还原而来的数量相当多会发出多少相当的小器晚成致的主题材料,因而,无论怎么样不推荐使用这种情势。

(1)创设部分备份

创设部分备份的办法有二种:正则表明式(--include), 枚举表文件(--tables-file)和列出要备份的数据库(--databases)。

(a)使用--include

应用--include时,必要为其钦命要备份的表的完好名称,即形如databasename.tablename,如:

# innobackupex --include='^mageedu[.]tb1'  /path/to/backup

(b)使用--tables-file

此选项的参数需借使二个文本名,此文件中每行饱含三个要备份的表的完好名称;如:

# echo -e 'mageedu.tb1nmageedu.tb2' > /tmp/tables.txt

# innobackupex --tables-file=/tmp/tables.txt  /path/to/backup

(c)使用--databases

此选项选拔的参数为数量名,如若要钦命多少个数据库,相互间必要以空格隔开分离;同不常候,在内定某数据库时,也足以只钦命当中的某张表。别的,此选项也能够采纳贰个文书为参数,文件中每一表现贰个要备份的靶子。如:

# innobackupex --databases="mageedu testdb"  /path/to/backup

(2)希图(preparing)部分备份

prepare部分备份的经过看似于导出表的经过,要利用--export选项进行:

# innobackupex --apply-log --export  /pat/to/partial/backup

此命令实施进程中,innobackupex会调用xtrabackup命令从数量字典中移除缺点和失误的表,由此,会显得出无数关于“表一纸空文”类的警报新闻。同期,也博览会示出为备份文件中留存的表成立.exp文件的有关音讯。

(3)还原部分备份还原部分备份的历程跟导入表的历程相仿。当然,也足以由此一向复制prepared状态的备份直接至数据目录中完毕恢复生机,可是那时必要数据目录处于相通状态。

利用Xtrabackup来完毕数据库的备份 Xtrabackup是有percona公司付出的风华正茂款开源备份工具,它与ibbackup那个备份工...

                                                                            Xtrabackup

xtrabackup备份出来的多寡富含:


法定原理

  • 表空间
  • 数据文件
  • 二进制日志
  • 专门的工作日志
    ...

xtrabackup是percona团队研究开发的备份工具,比MySQL官方的ibbackup的效果与利益还要多。扶助myisam温全备、innodb热全备和温增备,还足以兑现innodb的准期点苏醒,何况备份和回复的进度都超快。在现阶段MySQL的备份实现上,思要价格、速度、安全、风流罗曼蒂克致性等角度,xtrabackup是可怜适宜的工具。

在InnoDB内部会维护多少个redo日志文件,我们也可以称为事务日志文件。事务日志会蕴藏每一个InnoDB表数据的记录纠正。当InnoDB运行时,InnoDB会检查数据文件和事情日志,并实施多个步骤:它使用(前滚)已经付出的专业日志到数据文件,并将改良过但从不交给的数码举办回滚操作。

xtrabackup在进展数据复苏在此以前需求小心如下要点:

MariaDB也足以接纳percona xtrabackup举行备份,然而MariaDB基于percona xtrabackup开荒了它和睦的备份工具:MariaDB Backup。它依据xtrabackup开垦,所以所用方法基本和xtrabackup相通,只是稍稍自个儿的特征。详细内容见MariaDB Backup官方手册:https://mariadb.com/kb/en/library/mariadb-backup/

Xtrabackup在运行时会记住log sequencenumber(LSN),而且复制全部的数据文件。复制进度需求部分光阴,所以那个时候期只要数据文件有改造,那么将会使数据库处于二个众口难调的时间点。这个时候,xtrabackup会运维三个后台进度,用于监视事务日志,并从事情日志复制最新的修正。Xtrabackup必得不断的做那个操作,是因为作业日志是会轮转重复的写入,並且作业日志能够被圈定。所以xtrabackup自运维上马,就不停的将专业日志中各样数据文件的退换都记录下来。

  1. 借使有增量备份则须求在回复从前先举行增量备份和全备份的统反复回复;
  2. 生龙活虎经是支撑职业的表的备份,则回复在此以前须要先实行职业日志的回滚和提交操作;
  3. 设纵然八个三番五次的备份操作,则只供给付出业务日志,无需回滚,独有在总体备份操作合成之后再拓宽作业的回滚;

xtrabackup官方手册:https://www.percona.com/doc/percona-xtrabackup/LATEST/index.html

上边便是xtrabackup的备份进度。接下来是筹算(prepare)进程。在此个进程中,xtrabackup使用早前复制的事情日志,对种种数据文件实施灾殃苏醒(就像是mysql刚运转时要做的等同)。当那一个进度停止后,数据库就足以做苏醒还原了。

此文通过详细的实施步骤来演示xtrabackup的使用方法。
尝试步骤

1.安装xtrabackup

下载地址:https://www.percona.com/downloads/XtraBackup/LATEST/

rpm酒店(实际上是percona的酒店):http://repo.percona.com/release/

清华percona源:https://mirrors.tuna.tsinghua.edu.cn/percona/

因为只是一个备份工具,所以没须要编写翻译安装,直接下载它的rpm包就可以。不过该rpm包信任于libev.so.4,该信任包能够在epel源中找到。

这里安装的是当前流行版的xtrabackup-24-2.4.11。

cat <<eof>>/etc/yum.repos.d/percona.repo
[percona]
name = Percona
baseurl = https://mirrors.tuna.tsinghua.edu.cn/percona/release/$releasever/RPMS/$basearch
enabled = 1
gpgcheck = 0

[epel]
name=epelrepo
baseurl=https://mirrors.aliyun.com/epel/$releasever/$basearch
gpgcheck=0
enable=1
eof

[root@node1 ~]# yum list all| grep xtraback -i
Repository epel is listed more than once in the configuration
holland-xtrabackup.noarch                      1.0.14-3.el6                 epel
percona-xtrabackup.x86_64                      2.3.10-1.el6                 percona
percona-xtrabackup-20.x86_64                   2.0.8-587.rhel6              percona
percona-xtrabackup-20-debuginfo.x86_64         2.0.8-587.rhel6              percona
percona-xtrabackup-20-test.x86_64              2.0.8-587.rhel6              percona
percona-xtrabackup-21.x86_64                   2.1.9-746.rhel6              percona
percona-xtrabackup-21-debuginfo.x86_64         2.1.9-746.rhel6              percona
percona-xtrabackup-22.x86_64                   2.2.13-1.el6                 percona
percona-xtrabackup-22-debuginfo.x86_64         2.2.13-1.el6                 percona
percona-xtrabackup-24.x86_64                   2.4.11-1.el6                 percona
percona-xtrabackup-24-debuginfo.x86_64         2.4.11-1.el6                 percona
percona-xtrabackup-debuginfo.x86_64            2.3.10-1.el6                 percona
percona-xtrabackup-test.x86_64                 2.3.10-1.el6                 percona
percona-xtrabackup-test-21.x86_64              2.1.9-746.rhel6              percona
percona-xtrabackup-test-22.x86_64              2.2.13-1.el6                 percona
percona-xtrabackup-test-24.x86_64              2.4.11-1.el6                 percona

[root@node1 ~]# yum -y install percona-xtrabackup-24

装完xtrabackup后,生成以下几个工具。

[root@node1 ~]# rpm -ql percona-xtrabackup-24 | grep bin | xargs ls -hl
lrwxrwxrwx 1 root root   10 May  8 19:19 /usr/bin/innobackupex -> xtrabackup
-rwxr-xr-x 1 root root 3.5M Apr 19 01:11 /usr/bin/xbcloud
-rwxr-xr-x 1 root root 3.0K Apr 19 01:04 /usr/bin/xbcloud_osenv
-rwxr-xr-x 1 root root 3.5M Apr 19 01:11 /usr/bin/xbcrypt
-rwxr-xr-x 1 root root 3.5M Apr 19 01:11 /usr/bin/xbstream
-rwxr-xr-x 1 root root  21M Apr 19 01:11 /usr/bin/xtrabackup
  • xbcloud和xbcloud_osenv是xtrabackup新的高端特性:云备份;
  • xbcrypt也是新的特色,加密备份集;
  • xbstream是xtrabackup的流数据功效,通过流数据功用,可将备份内容打包并传给管道后的压缩工具进行压缩;
  • xtrabackup是主程序;
  • innobackupex在这里前是二个perl脚本,会调用xtrabackup这么些二进制工具,从xtrabackup 2.3始发,该工具使用C语言进行了重写,当前它是xtabackup二进制工具的叁个软连接,可是实际的应用情势却不一致,並且在现在的版本中会删除该工具。

在本文中,会分别对三个主程序innobackupex和xtrabackup的备份苏醒措施开展详尽的验证,还有可能会在验证经过中尽量的疏解它们是怎么着职业的,别的还或者会介绍它们的片段新鲜成效的选项,如流备份选项。

如上的进程在xtrabackup的编写翻译二进制造进程序中落实。程序innobackupex能够允许我们备份MyISAM表和frm文件进而增添了方便和功用。Innobackupex会运转xtrabackup,直到xtrabackup复制数据文件后,然后执行FLUSH TABLES WITH READ LOCK来堵住新的写入进来并把MyISAM表数据刷到硬盘上,之后复制MyISAM数据文件,最终获释锁。

  1. 生龙活虎台centos7虚构机,安装mariadb-5.5.52版本的数据库,首先通过sql脚本导入hellodb测验库,其富含多个students数据表,此试验在students表中进行操作,命令如下:
    mysql -uroot < hellodb.sql
  2. 安装xtrabackup,能够从官方网站下载安装包,然后经过yum实行设置,下载站点为:https://www.percona.com/downloads/XtraBackup/LATEST/,此处不再演示安装进度;
  3. xtrabackup的第一命令为innobackupex,通过innobackupex --help可能man手册可以获取到帮扶音信;
  4. 数据库已经导入,那时能够开展数据库的备份操作,先举行数据库的全量备份和回复:
    1. 首先保障数据库已经张开二进制日志,通过show global variables like 'log_bin';一声令下能够看出是不是已经伸开,通过show binary logs;能够见见眼下正值使用的二进制日志是哪四个;
    2. 因而xtrabackup进行备份,数据备份到/data/backup目录下,备份完毕会在内定目录下生成二个以近期光阴命名的文书夹:
      innobackupex -u root /data/backup
    3. 文本夹内容如下:
      澳门新浦京娱乐场网站 1
      • xtrabackup_binlog_info:记录二进制日志的从头到尾的经过;
      • xtrabackup_checkpoints:记录备份类型,初步和得了的lsn编号等备份新闻;
      • xtrabackup_info:记录更详细的备份音讯,如是还是不是为持有库备份,是或不是裁减,备份实践的吩咐等音信;
      • xtrabackup_logfile:记录的是事情日志,为二进制文件,不可查看;
    4. 那会儿就备份成功了,然后演示数据库的东山再起操作。注意:恢复以前必要首先截至数据库服务:
      innobackupex --apply-log 2017-07-13_21-02-07/ #首先进行事务日志的提交和回滚 innobackupex --copy-back 2017-07-13_21-02-07/ #进行数据恢复,会自动把数据恢复到mysql的数据目录下
    5. 回复成功之后有所曾经复苏数据的属主和属组都以root顾客,须求修正成mysql顾客工夫登录数据库;
    6. 那儿登录数据库就能够看出全数数据都曾经苏醒了。
  5. 这一次演示增量备份和还原操作:

    1. 往数据库中插入几条新的新闻,然后实行数据库的增量备份;
    2. 通过如下命令实行数据库的增量备份,备份成功之后照旧会在/data/backup目录下生成三个新的以时间命名的文本夹:
      innobackupex -u root -p 1234567a --incremental --incremental-basedir=/data/backup/2017-07-13_21-07-23/ /data/backup/
    3. 下一场停掉数据库服务,删除数据库目录下的装有数据,实行数据恢复生机操作,步骤如下:
      innobackupex --apply-log --redo-only 2017-07-13_22-16-19/ #进行全量备份的事务提交,但是不回滚未提交事务,因为未提交事务可能在下次的增量备份中提交 innobackupex --apply-log --redo-only 2017-07-13_22-16-19/ --incremental-dir=2017-07-13_22-18-34/ #进行增量备份和全备份的合成已经事务提交工作 innobackupex --apply-log 2017-07-13_22-16-19/ #对于全备份也没有完成的事务进行回滚操作 innobackupex --copy-back 2017-07-13_22-16-19/ #此时采用全备份即可恢复数据,不再需要增量备份,因为已经进行了备份的合成操作
    4. 如出意气风发辙需求改良回复完结多少的属主和属组,然后登入数据库就能够见到完好是数据,那时候实验演示完结。

      注意:

      • 生产意况建议二进制日志和数据文件分开放在差别磁盘,因为二进制文件能够用来进展时间点恢复生机,能够不择花招确认保障错过更加少的数据,假如二进制文件也遗落,则可能会舍弃多量数额;
      • 在数据恢复生机操作完成之后自然要再拓宽二遍数据的全备份,有限扶植数据安全;

2.备份锁

大器晚成篇不错的牵线xtrabackup锁的稿子:https://www.percona.com/blog/2014/03/11/introducing-backup-locks-percona-server-2/。

percona Server 5.6 支撑黄金年代种新锁——backup lock(备份锁),这种锁是percona对MySQL的增加补充,专门为备份而安插。这种锁在percona Server 5.6 有,MariaDB中也许有,不过Oracle的MySQL中尚无,最少MySQL 5.7中尚无。

这种锁用在备份的时候替代 flush tables with read lock 获取全局锁,是生机勃勃种轻量级的全局锁。它有三种档案的次序的锁:备份表锁和二进制日志锁。为此新扩充了3种语法:

lock tables for backup   # 申请备份表锁
lock binlog for backup   # 申请二进制日志锁
unlock binlog            # 释放二进制日志锁

备份表锁在全局范围内只对非innodb表加锁,所以具备该锁后不只怕修改非innodb表,但却不影响innodb表的DML。当然,因为是大局锁,所以也会卡住DDL操作。

二进制日志锁在全局范围内锁定二进制日志,所以会卡住其余会话校订二进制日志。这样能够保障能够收获到二进制日志中豆蔻梢头致性的职责坐标。 

备份MyISAM和InnoDB表最后会处于相仿,在备选(prepare)进程停止后,InnoDB表数据现已前滚到全方位备份结束的点,并不是回滚到xtrabackup刚领头时的点。那几个时刻点与实行FLUSH TABLES WITH READ LOCK的年华点同样,所以myisam表数据与InnoDB表数据是同步的。近似oracle的,InnoDB的prepare进度称得上recover(恢复生机),myisam的数据复制进度能够称之为restore(还原)。

3.xtrabackup备份原理表达

不论是使用innobackupex依然xtrabackup工具实行备份和还原,都有3个步骤:备份(backup)、准备(prepare)、恢复(copy back)。

瞩目,xtrabackup备份进度中,先备份innodb表,再备份非innodb表。

Xtrabackup和innobackupex那七个工具都提供了比很多前文未有关联的职能特色。手册上有对大器晚成一职能都有详实的牵线。简要介绍下,这几个工具提供了如流(streaming)备份,增量(incremental)备份等,通过复制数据文件,复制日志文件和提交日志到数据文件(前滚)达成了种种复合备份方式。

3.1 备份进度(backup阶段)

(1).在起步xtrabackup时记下LSN并将redo log拷贝到备份指标目录下的xtrabackup_logfile文件中。由于拷贝须要肯准时期,假如在拷贝时间段内有日记写入,将变成拷贝的日记和MySQL的redo log不相像,所以xtrabackup还应该有三个后台进度监察和控制着mysql的redo log,每秒监察和控制二回,当MySQL的redo log有变动,该监督进程会即刻将调换的内容写入到xtrabackup_logfile文件,那样就能够确认保证拷贝走的redo log中记录了整套变化。不过那也会有高风险的,因为redo是轮流培训式循环写入的,假若某一时刻有足够大气的日记写到redo log中,使得尚未开首复制的日志就被新日志覆盖了,那样会日志错过,并报错。

(2).拷贝完开头版的redo log后,xtrabackup先河拷贝innodb表的数据文件(即表空间文件.ibd文件和ibdata1)。注意,那时不拷贝innodb的frm文件。

(3).当innodb相关表的数据文件拷贝完结后,xtrabackup起首计划拷贝非innodb的公文。但在拷贝它们早先,要先对非innodb表举行加锁幸免拷贝时有语句修正这个品种的表数据。

对于不帮助backup lock的版本,只好通过flush tables with read lock来赢得全局读锁,但与此相类似也同等会锁住innodb表,杀伤力太大。所以利用xtrabackup备份Oracle的MySQL,实质上一定要促成innodb表的生机勃勃对时间热备、部分小时温备。

对此支撑backup lock的本子,xtrabackup通过lock tables for backup获取轻量级的backup locks来代表flush tables with read lock,因为它只锁定非innodb表,所以经过实现了innodb表的真正热备。

(4).当获取到非innodb表的锁以往,最早拷贝非innodb表的多寡和.frm文件。当这个拷贝完结以往,继续拷贝别的存款和储蓄引擎类型的文书。(实际上,拷贝非innodb表的数目是在获得backup locks(要是扶植)后活动进行的,它们属于同贰个历程)

(5).当拷贝阶段实现后,就到了备份的告竣阶段。满含获取二进制日志中大器晚成致性地点的坐标点、截止redo log的监察和拷贝、释放锁等。

对于不扶植backup lock的本子,收尾阶段的长河是那样的:获取二进制日志的风流洒脱致性坐标点、甘休redo log的督查和拷贝、释放锁。

对于支撑backup lock的本子,收尾阶段的经过是那样的:先通过lock binlog for bakcup来获取二进制日志锁,然后截至redo log的监控和拷贝,再unlock tables释放表锁,随后获得二进制日志的生龙活虎致性地点坐标点,最终unlock binlog释放二进制日志锁。

(6).假诺全勤都OK,xtrabackup将以状态码0退出。

因而,对是还是不是协助backup lock的本子,xtrabackup备份的时的一颦一笑是不雷同的。

澳门新浦京娱乐场网站 2

backup阶段的历程具体如下图所示:

澳门新浦京娱乐场网站 3

FTWRL:flush table with read lock;

澳门新浦京娱乐场网站 4

Xtrabackup有多个关键的工具:xtrabackup、innobackupex

3.2 希图进度(prepare阶段)

鉴于备份的时候拷贝走的数据文件大概是不平等的,比方监察和控制着MySQL的redo log中在拷贝进度一挥而就后又新的业务提交了,而拷贝走的数码是未提交状态的,那么就必要对该事务前滚;如果监察和控制到的日志中有事情未提交,那么该职业就要求回滚。

可是只要只备份了myisam表或任何非事务表数据,因为备份阶段直接锁定了那一个表,所以不会有不相似的景观。

xtrabackup有二个"筹算"的阶段。这些阶段的精气神儿正是对备份的innodb数据应用redo log,该回滚的回滚,该前滚的前滚,最后确定保障xtrabackup_logfile中著录的redo log已经全副运用到备份数据页上,而且完毕了后生可畏致性。当使用截止后,会重写"xtrabackup_logfile"再一次保证该redo log和备份的数量是对应的。

未雨筹划有备无患进度无需接二连三数据库,该进度可以在放肆装了xtrabackup软件的机器上海展览中心开,之所能完结是因为xtrabackup软件的中间嵌入了二个简化的innodb存款和储蓄引擎,能够由此它做到日志的选取。

1、xtrabackup只可以备份InnoDB和XtraDB二种数据表,而无法备份MyISAM数据表

3.3 苏醒过程(copy back阶段)

xtrabackup的过来进程实质是将备份的数据文件和结构定义等公事拷贝回MySQL的datadir。同样能够拷贝到任性机器上。

务求复苏早先MySQL必需是停止运营情况,且datadir是空目录,除非苏醒的操作是导入表的操作。具体见后文对应的源委。

2、innobackupex-1.5.1则封装了xtrabackup,是三个剧本封装,所以能况两全份管理innodb和myisam,但在管理myisam时索要加四个读锁

4.预备实验情状

创制测量试验数据库backuptest,并创制myisam表和innodb表,此处轻易的利用数值协助表并分别插入1亿条数据。

DROP DATABASE IF EXISTS backuptest;
CREATE DATABASE backuptest;
USE backuptest;

# 创建myisam类型的数值辅助表和对应插入数据的存储过程
CREATE TABLE num_isam(n INT NOT NULL PRIMARY KEY)ENGINE=MYISAM;
DELIMITER $$
DROP PROCEDURE IF EXISTS proc_num1$$
CREATE PROCEDURE proc_num1(num INT) 
BEGIN
    DECLARE rn INT DEFAULT 1;
    TRUNCATE TABLE backuptest.num_isam;
    INSERT INTO backuptest.num_isam VALUES(1);
    dd: WHILE rn*2 < num DO
        BEGIN
            INSERT INTO backuptest.num_isam SELECT rn n FROM backuptest.num_isam;
            SET rn = rn*2;
        END;
    END WHILE dd;
    INSERT INTO backuptest.num_isam SELECT n rn FROM num_isam WHERE n rn <=num;
END;$$
DELIMITER ;

# 创建innodb类型的数值辅助表和对应插入数据的存储过程
CREATE TABLE num_innodb(n INT NOT NULL PRIMARY KEY)ENGINE=INNODB;
DELIMITER $$
DROP PROCEDURE IF EXISTS proc_num2$$
CREATE PROCEDURE proc_num2(num INT) 
BEGIN
    DECLARE rn INT DEFAULT 1;
    TRUNCATE TABLE backuptest.num_innodb;
    INSERT INTO backuptest.num_innodb VALUES(1);
    dd: WHILE rn*2 < num DO
        BEGIN
            INSERT INTO backuptest.num_innodb SELECT rn n FROM backuptest.num_innodb;
            SET rn = rn*2;
        END;
    END WHILE dd;
    INSERT INTO backuptest.num_innodb SELECT n rn FROM backuptest.num_innodb WHERE n rn <=num;
END;$$
DELIMITER ;

# 分别向两个数值辅助表中插入1亿条数据,
CALL proc_num1(100000000);
CALL proc_num2(100000000);

安装

5.innobackupex工具

官方网址下载

5.1 innobackupex达成全备份和借尸还魂的历程

(1). 全备

除去给定连接MySQL服务器的再而三参数,只需再给定贰个索引就可以,该目录是备份的靶子地方。暗许xtrabackup连接数据库的时候从计划文件中去读取和备份相关的配备,能够使用选用--defaluts-file钦赐连接时的参数配置文件,但如果钦定该选择,该选取只可以放在第三个选用地方。

innobackupex --user=root --password=123456 /bakdir/

默许备份的门路是点名路线/bakdir下的二个以时间为时间戳的目录。

[root@xuexi bakdir]# du -sh /bakdir/2017-04-02_07-09-47/*
4.0K    /bakdir/2017-04-02_07-09-47/backup-my.cnf
4.0G    /bakdir/2017-04-02_07-09-47/backuptest
589M    /bakdir/2017-04-02_07-09-47/ibdata1
1.8M    /bakdir/2017-04-02_07-09-47/mysql
8.0K    /bakdir/2017-04-02_07-09-47/Performance
636K    /bakdir/2017-04-02_07-09-47/performance_schema
1008K   /bakdir/2017-04-02_07-09-47/world
4.0K    /bakdir/2017-04-02_07-09-47/xtrabackup_binlog_info
4.0K    /bakdir/2017-04-02_07-09-47/xtrabackup_checkpoints
4.0K    /bakdir/2017-04-02_07-09-47/xtrabackup_info
4.0K    /bakdir/2017-04-02_07-09-47/xtrabackup_logfile

查阅该文件目录普通话件和尺寸,能够看来xtrabackup的一言一动就是复制了对象数据库的相关文件,并新建了多少个文本。

其中:

  • backup-my.cnf是拷贝过来的配备文件。里面只包涵[mysqld]布局地分和备份有关的选项。
  • xtrabackup_binlog_info中记录的是近期应用的二进制日志文件。

    [root@xuexi bakdir]# cat 2017-04-02_07-09-47/xtrabackup_binlog_info 
    mysql-bin.000001        120
    
  • xtrabackup_checkpoints中记录了备份的品类是全备依旧增备,还恐怕有备份的最早、终止LSN号。

    [root@xuexi bakdir]# cat 2017-04-02_07-09-47/xtrabackup_checkpoints 
    backup_type = full-backuped
    from_lsn = 0
    to_lsn = 7533359841
    last_lsn = 7533359841
    compact = 0
    recover_binlog_info = 0
    
  • xtrabackup_info中记录的是备份过程中的一些音讯。

    [root@xuexi bakdir]# cat 2017-04-02_07-09-47/xtrabackup_info 
    uuid = 66f34974-1730-11e7-9d09-000c299af3f3
    name = 
    tool_name = innobackupex
    tool_command = --user=root --password=...  /bakdir/
    tool_version = 2.4.6
    ibbackup_version = 2.4.6
    server_version = 5.6.35-log
    start_time = 2017-04-02 07:09:47
    end_time = 2017-04-02 07:10:31
    lock_time = 0
    binlog_pos = filename 'mysql-bin.000001', position '120'
    innodb_from_lsn = 0
    innodb_to_lsn = 7533359841
    partial = N          # N表示未启用该方面的功能,如此处表示不是备份部分数据库或表
    incremental = N
    format = file
    compact = N
    compressed = N
    encrypted = N
    
  • xtrabackup_logfile是复制和监理后写的redo日志。该日志是备份后下多少个操作"准备"的尤为重要。只有通过它技能贯彻数量大器晚成致性。

(2). 全备的准备进度

在全备份达成以后,备份的多少中只要有innodb数据,则还无法用来还原。因为从xtrabackup此前备份的时候就监察和控制着MySQL的redo log,在拷贝的innodb数据文件中很恐怕还应该有未提交的业务,并且拷贝完innodb数据以往还或者付出了职业或许开启了新的事情等等。由此可以见到,全备之后的景观不必然是相仿的。然则假设只备份了myisam表或其余非事务表数据,因为备份阶段间接锁定了那些表,所以不会有不生机勃勃致的意况。

xtrabackup有一个"打算"的等第。那一个阶段的本质就是对备份的innodb数据运用redo log,该回滚的回滚,该前滚的前滚,最终确认保证xtrabackup_logfile中著录的redo log已经全体应用到备份数据页上,何况达成了风华正茂致性。当使用截止后,会重写"xtrabackup_logfile"再度保障该redo log和备份的多寡是相应的。

比方,备份的innodb数据文件中设有未提交的事务,但是在监察和控制到的日记中进行了交给,那么就必要对该专门的工作前滚;若是监察和控制到的日记中有作业未提交,那么该事务就必要回滚。

预备阶段选拔的形式选拔是"--apply-log"。希图阶段不会三番两次MySQL,所以不用钦命连接选项如--user等。

[root@xuexi bakdir]# innobackupex --apply-log /bakdir/2017-04-02_07-09-47/

在预备成功时,会在频幕上输出如下提醒内容:

InnoDB: FTS optimize thread exiting.
InnoDB: Starting shutdown...
InnoDB: Shutdown completed; log sequence number 7533367063
170402 12:11:23 completed OK!

在备选阶段,有一个内部存款和储蓄器使用量选项"--use-memory",该选项默许值为100M,值越大希图的历程越快。当然,将该值加大的前提是服务器内部存储器够用。

(3). 全备份的回复进程

出山小草的级差就是向MySQL的datadir拷贝。全备份的苏醒供给MySQL必得处于stop状态,而且datadir必得为空哪怕是和MySQL非亲非故的文本也不可能存在,它不会去隐讳datadir中已存在的从头到尾的经过。不然会唤醒如下错误:

innobackupex version 2.4.6 based on MySQL server 5.7.13 Linux (x86_64) (revision id: 8ec05b7)
Original data directory /mydata/data is not empty!

停止mysql并清空datadir。

service mysqld stop
rm -rf /mydata/data/*

还原时接收的格局是"--copy-back",选项后钦命要过来的源备份目录。恢复时因为无需一而再数据库,所以不要钦命连接选项,如--user等。

[root@xuexi bakdir]# innobackupex --copy-back /bakdir/2017-04-02_07-09-47/
170402 12:36:09 completed OK!

拷贝达成后,MySQL的datadir的文件的主人和属组是innobackupex的调用者,所以需求改回mysql.mysql。

[root@xuexi bakdir]# ll /mydata/data/
total 712736
drwxr-x--- 2 root root      4096 Apr  2 12:36 backuptest
-rw-r----- 1 root root 616562688 Apr  2 12:35 ibdata1
-rw-r----- 1 root root  50331648 Apr  2 12:35 ib_logfile0
-rw-r----- 1 root root  50331648 Apr  2 12:35 ib_logfile1
-rw-r----- 1 root root  12582912 Apr  2 12:36 ibtmp1
drwxr-x--- 2 root root      4096 Apr  2 12:36 mysql
drwxr-x--- 2 root root      4096 Apr  2 12:35 Performance
drwxr-x--- 2 root root      4096 Apr  2 12:36 performance_schema
drwxr-x--- 2 root root      4096 Apr  2 12:35 world
-rw-r----- 1 root root        23 Apr  2 12:35 xtrabackup_binlog_pos_innodb
-rw-r----- 1 root root       494 Apr  2 12:35 xtrabackup_info

[root@xuexi bakdir]# chown -R mysql.mysql /mydata/data/*

变成这几个之后,就足以运转MySQL服务器了。能够步入mysql测量检验backuptest数据库中的数据是不是完整。

#xtrabackup备份mysql数据库的采取办法,MySQL备份和复苏。wget

5.2 innobackupex实现增量备份和还原的长河

增量备份正视于全备份。xtrabackup实现增量备份的规律是因而比较全备份的顶点LSN和方今的LSN,增备时将从终端LSN最初从来备份到日前的LSN。在备份时也可以有redo log的监督线程,对于增备进度中变成LSN增加的操作也会写入到日志中。

增备的实现依赖于LSN,所以只对innodb有效,对myisam表使用增备时,背后举行的是全备。

(1). 要开展增备,首先要有全备文件。这里再度实行二回全备。

innobackupex --user=root --password=123456 /bakdir/

全备完毕后,在/bakdir目录下转移的全备目录是2017-04-02_13-26-35。

[root@xuexi ~]# ls /bakdir/2017-04-02_13-26-35/
backup-my.cnf  ibdata1  Performance         secure_dir  xtrabackup_binlog_info  xtrabackup_info
backuptest     mysql    performance_schema  world       xtrabackup_checkpoints  xtrabackup_logfile

查看xtrabackup_checkpoints可以得悉有关的LSN。

[root@xuexi ~]# cat /bakdir/2017-04-02_13-26-35/xtrabackup_checkpoints
backup_type = full-backuped
from_lsn = 0
to_lsn = 7533367093
last_lsn = 7533367093
compact = 0
recover_binlog_info = 0

只顾:要贯彻增备,那三遍的全备绝对无法进行"筹划"操作,原因稍后给出。

(2). 实行第一次增备。

只要对示范数据可backuptest中的num_innodb表举行了truncate操作。

mysql> truncate backuptest.num_innodb;

下一场再增备。增备时使用"--incremental"选项表示增量备份,增量备份时索要经过"--incremental-basedir=fullback_PATH"钦赐基于哪个备份集备份,因为是首先次增备,所以要依据完全备份增量集。

[root@xuexi ~]# innobackupex --user=root --password=123456 --incremental /bakdir/ --incremental-basedir=/bakdir/2017-04-02_13-26-35/

增备完毕后,生成的增备集为/bakdir/2017-04-02_13-39-05/,查看里面包车型大巴xtrabackup_checkpoints,能够看见备份的开始LSN是上次全备完毕后的LSN。

[root@xuexi ~]# cat /bakdir/2017-04-02_13-39-05/xtrabackup_checkpoints
backup_type = incremental
from_lsn = 7533367093
to_lsn = 7533372535
last_lsn = 7533372535
compact = 0
recover_binlog_info = 0

默许景况下,增备的起先LSN是全自动获得的,不过在少数意况下没办法获得,还应该有个别意况下不能够获得到就要增备的basedir。xtrabackup提供的选项"--incremental-lsn=N"能够显式钦命增备的起先LSN,显式钦命LSN时,能够不必提供增备的basedir。

比如,借使获得到了上次全备的告生龙活虎段落LSN为7533367093,能够如下格局增备:

innobackupex --user=root --password=123456 --incremental /bakdir/ --incremental-lsn=7533367093

这么增备后也在/bakdir中生成一个小时戳目录/bakdir/2017-04-02_13-50-33。查看LSN信息:

[root@xuexi ~]# cat /bakdir/2017-04-02_13-50-33/xtrabackup_checkpoints
backup_type = incremental
from_lsn = 7533367093
to_lsn = 7533372535
last_lsn = 7533372535
compact = 0
recover_binlog_info = 0

推断和钦定--incremental-basedir举办增备是平等的。

(3). 举行第二遍增备。

假诺在首先次增备后,向上次truncate的表backuptest.num_innodb表中插入的100W条记下。

mysql> call backuptest.proc_num2(1000000);      
mysql> select count(*) from backuptest.num_innodb;
 ---------- 
| count(*) |
 ---------- 
|  1000000 |
 ---------- 

接下来开展增备。此次增备是依靠第一遍增备的(当然也足以依照全备实行备份,那样达成的是异样备份)。

[root@xuexi ~]# innobackupex --user=root --password=123456 --incremental /bakdir/ --incremental-basedir=/bakdir/2017-04-02_13-39-05/

本次增备完成后更动的备份集为/bakdir/2017-04-02_14-03-51/。查看LSN信息:

[root@xuexi ~]# cat /bakdir/2017-04-02_14-03-51/xtrabackup_checkpoints
backup_type = incremental
from_lsn = 7533372535
to_lsn = 7585150275
last_lsn = 7585150275
compact = 0
recover_binlog_info = 0

(4). 增备的筹划进程

增备的准备进度和全备的预备进度有一点点不生机勃勃致,不到结尾苏醒的时候无法实行其余"绸缪"进程。

增备进度中的每叁遍备份行为都会督查MySQL的redo log,写入到xtrabackup_logfile的日记中大概会有未提交的专门的职业,可是到背后增备的时候举办了交给,也便是说提交进度记录到了增备时监察和控制的日志xtrabackup_logfile中。假诺在增备前开展了"图谋",那么该业务就能够被回滚,前边增备中的提交就吐弃了,由此会产生数据错失。

要确定保证将有所的备份集举办整合,要求采纳在每种备份集的"计划"进程中使用"--redo-only"选项,那样应用日志时会"直线向前"直到最后一个备份集。它的实质是向全备聚焦不断的充实应用增备中的日志。可是,最终二个增备集必要作为备份集整合的终极,所以它不能够利用"--redo-only"选项。整合达成今后,原本的全备就已经全体了,那时候再对扩展完结的全备集举行贰次"准备"就能够用于末端的还原。

故此,要是全备为A,3次增备分别为B/C/D,假使只想恢复生机到C,那么从A起头整合到C甘休就可以。

因为在每二个增备的"策动"进程中都须求向整合的发端备份集中扩大应用日志,所以每叁回增备的"策动"都急需内定整合的起来备份集目录作为basedir。比方内定全备份作为整合的上马备份集。

从上述实验进度中,获得的全备集是2017-04-02_13-26-35,第三次和第一次增备集分别是2017-04-02_13-26-35、2017-04-02_14-03-51。下边是它们的"希图"过程。

# 对整合的开始备份集——全备集应用日志,并指定"--redo-only"表示开始进入日志追加
innobackupex --apply-log --redo-only /bakdir/2017-04-02_13-26-35

# 对第一个增备集进行"准备",将其追加到全备集中
innobackupex --apply-log --redo-only /bakdir/2017-04-02_13-26-35 --incremental-dir=/bakdir/2017-04-02_13-39-05

# 对第二个增备集进行"准备",将其追加到全备集中,但是不再应用"--redo-only",表示整合的结束点
innobackupex --apply-log /bakdir/2017-04-02_13-26-35 --incremental-dir=/bakdir/2017-04-02_14-03-51

# 对整合完成的全备集进行一次整体的"准备"
innobackupex --apply-log /bakdir/2017-04-02_13-26-35

当全数的备份集整合完结后,如同七个完全的全备集,全备中的LSN会更新到组合的结束点。如下:

[root@xuexi data]# cat /bakdir/2017-04-02_13-26-35/xtrabackup_checkpoints
backup_type = full-prepared
from_lsn = 0
to_lsn = 7585150275  #整合完成后全备中的LSN
last_lsn = 7585150275
compact = 0
recover_binlog_info = 0

[root@xuexi data]# cat /bakdir/2017-04-02_14-03-51/xtrabackup_checkpoints
backup_type = incremental
from_lsn = 7533372535
to_lsn = 7585150275       #整合的结束备份集中的LSN
last_lsn = 7585150275
compact = 0
recover_binlog_info = 0

要是异常的大心整合的依次错误了,那么结合的备份集将是无效的,须求重新构成。

(5). 增备的回涨进度

因为组成停止后就等价于一个全备集,所以能够直接举办苏醒。

回复进程同样须要保险MySQL的datadir是空的,且MySQL服务器是stop的。

service mysqld stop
rm -rf /mydata/data/*
innobackupex --copy-back /bakdir/2017-04-02_13-26-35
chown -R mysql.mysql /mydata/data/*

下一场重启MySQL,步入查看可见num_innodb的数量为100W行记录,即复苏成功。

mysql> select count(*) from backuptest.num_innodb;
 ---------- 
| count(*) |
 ---------- 
|  1000000 |
 ---------- 

下载安装所需信任包,从MySQL 5.7.5发端Boost库是必不可缺的

5.3 innobackupex落成导出和导入单张表的进程

暗许情形下,InnoDB表不可能经过从来复制表文件的不二秘籍在mysql服务器之间举办移植,就算使用了innodb_file_per_table选项。而采纳Xtrabackup工具得以落成此种效率,然而只可以"导出"具有.ibd文件的表,也正是说导出表的mysql服务器启用了innodb_file_per_table选项,並且要导出的表依然在启用该采取之后才制造的。

导入表的是,必要导入表的服务器版本是MySQL 5.6 ,且启用了innodb_file_per_table选项。

(1). 导出表

导出表是在"打算"的长河中开展的,不是在备份的时候导出。对于一个业已备份好的备份集,使用"--apply-log"和"--export"选项就可以导出备份集中的表。

万一以全备份集/bakdir/2017-04-02_17-41-38为例,要导出个中的表。

innobackupex --apply-log --export /bakdir/2017-04-02_17-41-38

在导出进度中,会见到如下新闻:

xtrabackup: export metadata of table 'backuptest/num_innodb' to file `./backuptest/num_innodb.exp` (1 indexes)
xtrabackup:     name=PRIMARY, id.low=144, page=3

它表明了创造了一个.exp文件。

翻开备份集目录下的backuptest目录,会开采多出了2个公文:.cfg和.exp,再加上.ibd文件,那3个文件是持续导入表时所需的公文。

-rw-r--r-- 1 root root  349 Apr  2 18:15 num_innodb.cfg
-rw-r----- 1 root root  16K Apr  2 18:15 num_innodb.exp
-rw-r----- 1 root root 8.4K Apr  2 17:41 num_innodb.frm
-rw-r----- 1 root root  31M Apr  2 17:41 num_innodb.ibd

里面.cfg文件是生龙活虎种新鲜的innodb数据字典文件,它和exp文件的成效是大半的,只然而前面一个还扶植在xtradb中程导弹入,严峻地讲,要将导出的表导入到MySQL5.6照旧percona server 5.6中,".cfg"文件完全能够没有要求,可是倘诺有该文件的话,会实行架构验证。

(2). 导入表

要在mysql服务器上导入来自于此外服务器的某innodb表,供给先在脚下服务器上创办一个跟原表表结构相近的表,而后才干兑现将表导入:

mysql> CREATE TABLE tabletest (...)  ENGINE=InnoDB;

下一场将此表的表空间:

mysql> ALTER TABLE mydatabase.tabletest  DISCARD TABLESPACE;

接下去,今后自于"导出"表的的.ibd和.exp文件复制到当前服务器的数据目录,如果导入目的服务器是MySQL 5.6 ,也得以复制.cfg文件。然后利用如下命令将其“导入”:

mysql> ALTER TABLE mydatabase.tabletest IMPORT TABLESPACE;

#wget 

5.4 innobackupex完毕部分备份和余烬复起的历程

xtrabackup扶助部分备份,意味着能够钦赐备份哪个数据库可能哪些表。

有的备份唯有少数内需专一:在苏醒的时候绝不通过"--copy-back"的办法拷贝回datadir,而是应当利用导入表的点子。固然接纳拷贝的点子临时候是一蹴而就的,然而不少情景下会现出数据库不相同等的场地。

(1). 备份

创设部分备份有三种办法:

  1.  通过"--include"选项能够钦点正则来合作要备份的表,这种情势要利用完全对象援引格式,即db_name.tab_name的方式。
  2. 将要备份的表分行枚举到贰个文本中,通过"--tables-file"钦定该文件。
  3. 抑或利用"--databases"钦点要备份的数据库或表,钦点备份的表时要选择完全对象援引格式,四个因素采取空格分开。

运用前二种部分备份格局,只好备份innodb表,不会备份任何myisam,纵然内定了也不会备份。何况要备份的表必需有独立的表空间文件,也正是说必需开启了innodb_澳门新浦京娱乐场网站,file_per_table,更规范的说,要备份的表是在开启了innodb_file_per_table选项之后才成立的。第三种备份方式得以备份myisam表。

例如 --include='^back.*[.]num_*' ,将备份back字母最初的数据库中num早先的表,个中"[.]"的中括号不可能少,因为正则中"."有异乎日常含义,所以接收中括号来枚举以完结指标的全体援引。

innobackupex --user=root --password=123456 --include='^back*[.]num_*' /bakdir/

运用"--include"和"--tables-file"备份后,会生成一个时辰戳目录,目录中唯有和要备份的表有关的文本。

[root@xuexi data]# ls /bakdir/2017-04-02_17-35-46/
backup-my.cnf  ibdata1  xtrabackup_binlog_info  xtrabackup_checkpoints  xtrabackup_info  xtrabackup_logfile

假如运用的是--databases选项,则会生成四个时光戳目录,里面有备份的数据库代表的目录,假设只备份了有个别表,则该数据库目录中唯有该表相关的文本。

innobackupex --user=root --password=123456 --databases='mysql.user backuptest' /bakdir/

地方只备份mysql.user表和backuptest数据库,在变化的时刻戳目录中将有三个mysql目录和backuptest目录。

[root@xuexi data]# ls /bakdir/2017-04-02_17-41-38/
backup-my.cnf  backuptest  ibdata1  mysql  xtrabackup_binlog_info  xtrabackup_checkpoints  xtrabackup_info  xtrabackup_logfile

[root@xuexi data]# ls /bakdir/2017-04-02_17-41-38/backuptest/
db.opt  num_innodb.frm  num_innodb.ibd  num_isam.frm  num_isam.MYD  num_isam.MYI

[root@xuexi data]# ls /bakdir/2017-04-02_17-41-38/mysql/
user.frm  user.MYD  user.MYI

(2). 部分备份的预备和回复进度

xtrabackup备份mysql数据库的采取办法,MySQL备份和复苏。部分备份的预备和还原进程分别是导出表和导入表的进程。见上文。 

#yum install cmake gcc gcc-c libaiolibaio-devel automake autoconf bzr bison libtool ncurses-devel libgcrypt-devellibcurl-devel libev-devel python-sphinx perl-Digest-MD5 perl-DBD-MySQL -y

5.5 innobackupex达成准期点恢复生机

xtrabackup本人不大概落到实处定时点复苏,只好通过恢复备份后通过二进制日志实现。实现形式和通常定期点复苏是均等的。见:二进制日志确定地点还原数据库。

#cp percona-xtrabackup-2.4.4.tar.gz/usr/local/src/

5.6 流备份和长间隔备份

xtrabackup帮助备份流,当前可用的流类型只有tar和xtrabackup自带的xbstream,通过流能够将它们传递给任何程序进行相关的操作,如压缩。然而不建议在备份的还要开展减削,因为压缩会占用不小的cpu财富,使得备份时间延长非常多,温备的进度也就延伸了。

除此以外,MySQL的数据文件压缩比相当大,所以建议备份后在清闲的时候进行压缩。

xtrabackup还支持远程备份,只需选取"--remote-host"钦赐远程的主机名就可以,钦定方式和ssh钦命的主意雷同。如--remote-host=root@192.168.100.18。

动用流备份的情势如下:

# 使用tar流
innobackupex --user=root --password=123456 --stream=tar /bakdir/ >/tmp/a.tar
# 使用tar流的同时交给gzip压缩
innobackupex --user=root --password=123456 --stream=tar /bakdir/ | gzip >/tmp/a.tar.gz
# 使用tar流备份到远程主机中并归档
innobackupex --user=root --password=123456 --stream=tar /bakdir/ | ssh root@192.168.100.10  "cat -  > /tmp/`date  %F_%H-%M-%S`.tar"
# 使用tar流备份到原远程主机中并解包
innobackupex --user=root --password=123456 --stream=tar /bakdir/ | ssh root@192.168.100.10  "cat -  | tar -x -C /tmp/"

# 使用xtrabackup自带的xbstream流
innobackupex --user=root --password=123456 --stream=xbstream /bakdir/ >/tmp/b.xbs
# 解压xbstream流
innobackupex --user=root --password=123456 --stream=xbstream /bakdir/ | ssh root@192.168.100.10  "cat -  | xbstream -x -C /tmp/"
# 使用xbstream流的同时进行压缩,使用"--compress"选项
innobackupex --user=root --password=123456 --stream=xbstream --compress /bakdir/ > /bakdir/backup.xbs

留心,尽管在解压备份的.tar.gz时出错,只怕在解压的时候需求利用-i选项。如tar -xif /tmp/b.tar/gz。

#cp boost_1_59_0.tar.gz /usr/local/src/

5.7 加速备份

当备份到地头的时候,能够选取"--rsync"选项,该采用用于在flush tables with read lock后调用rsync取代cp进度复制非Innodb数据和.frm文件,加快复制速度。

但要注意,因为帮忙备份锁的本子在获得到backup locks的时候会自行复制非Innodb数据和.frm文件,所以"--rsync"选项是不行的。

其它,该选项不可能和"--stream"选项和"--remote-host"选项同临时候接受。 

#cd /usr/local/src/

6.xtrabackup工具

xtrabackup工具是C语言编写的工具,在innobackupex使用C重写之后,innobackupex是该工具的三个软链接。但是它不能够贯彻innobackupex的持有机能,比方xtrabackup工具未有复苏成效,而innobackupex有"--copy-back"选项来恢复生机。

xtrabackup工具备二种常用运维形式:"--backup"和"--prepare"。还会有四个少之甚少用的情势:"--stats"和"--print-param"。

由于前文对innobackupex的牵线极度详尽,xtrabackup在效果与利益实现上和它是平等的。所以下边将简要介绍。

#tar zxf boost_1_59_0.tar.gz

6.1 xtrabackup达成全备 

(1).备份进度

和innobackupex备份进度不一致的是,xtrabackup的备份路线是由"--target-dir"选项严苛钦点的,即使钦赐的目录空头支票,它备份的时候不会在target-dir目录中再成立时间戳子目录。

[root@xuexi data]# xtrabackup --backup --user=root --password=123456 --datadir=/mydata/data --target-dir=/bakdir/fullback

[root@xuexi data]# ls /bakdir/fullback
backup-my.cnf  ibdata1  Performance         secure_dir  xtrabackup_binlog_info  xtrabackup_info
backuptest     mysql    performance_schema  world       xtrabackup_checkpoints  xtrabackup_logfile

(2).筹划过程

xtrabackup --prepare --target-dir=/bakdir/fullback

(3).复苏进度

xtrabackup本人无法上升,只可以通过拷贝备份集的艺术来苏醒。比如使用rsync或许cp等。

别的,苏醒时也如出生龙活虎辙需求MySQL是stop状态,datadir是空目录。何况拷贝完成后要改善datadir汉语件的持有者和属组为mysql顾客和组。

service mysqld stop
rm -rf /mydata/data/*
rsync -azP /bakdir/fullback/* /mydata/data
chown -R mysql.mysql /mydata/data/*

安装xtrabackup

6.2 xtrabackup兑现增备

(1).首先举行全备

xtrabackup --backup --user=root --password=123456 --datadir=/mydata/data --target-dir=/bakdir/base_full

(2).实行第三次增备

xtrabackup --backup --user=root --password=123456 --target-dir=/bakdir/incr_bak1 --incremental-basedir=/bakdir/base_full --datadir=/mydata/data/

风流罗曼蒂克律也可以在增备时接收"--incremental-lsn"来内定从哪个lsn最初增量备份,那和innobackupex是意气风发致的。

(3).进行第三次增备

xtrabackup --backup --user=root --password=123456 --target-dir=/bakdir/incr_bak2 --incremental-basedir=/bakdir/incr_bak1 --datadir=/mydata/data/

(4).策动进度

有备无患进程和innobackupex是同生机勃勃的,使用"--apply-log-only"来直线向前地选用redo log,相似,在结尾三个增备集的预备进程中不可能动用"--apply-log-only"选项。

xtrabackup --prepare --apply-log-only --target-dir=/bakdir/base_full
xtrabackup --prepare --apply-log-only --target-dir=/bakdir/base_full --incremental-dir=/bakdir/incr_bak1
xtrabackup --prepare --target-dir=/bakdir/base_full --incremental-dir=/bakdir/incr_bak2

(5).复苏阶段

大张旗鼓阶段即拷贝阶段,和前面全备的还原阶段是同样的,供给MySQL甘休运作,datadir是空目录,拷贝全备目录到datadir,修正datadir的主人和属组。

#tar zxf percona-xtrabackup-2.4.4.tar.gz

6.3 xtrabackup达成部分备份

xtrabackup部分备份和innobackupex不太相像,innobackupex的有的备份实质上是在早已备份好的备份集上导出导入表,而xtrabackup直接在备份进程中筛选要备份的对象,它不树立在已某个备份集上。

(1).备份进度

  • Ÿxtrabackup使用"--tables"选项对应innobackupex的"--include"选项,它们是大同小异的,都以正则相配完整对象援用名称。
  • 使用"--tables-file"选项内定枚举要备份表的列表,每行三个表,表名要求采取完整对象援引名称。和innobackupex相仿的。
  • Ÿ使用"--databases"和"--databases-file"内定要单独备份的数据库或表,前者能够枚举出要备份的列表。那八个挑选不能够选取通配符和正则相配。

例如:

xtrabackup --backup --user=root --password=123456 --target-dir=/bakdir/part_bak1 --datadir=/mydata/data/ --tables="^back*[.]num_*"

(2).筹算进度

xtrabackup的一些备份的策动要比innobackupex方便的多,直接对备份集举办"--prepare"就可以。

xtrabackup --prepare --target-dir=/bakdir/part_bak1

#cd percona-xtrabackup-2.4.4

#cmake -DBUILD_CONFIG=xtrabackup_release-DDOWNLOAD_BOOST=1 -DWITH_BOOST=../boost_1_59_0

#make -j4

#make install

#ln -s/usr/local/xtrabackup/bin/innobackupex /usr/bin/

#ln -s /usr/local/xtrabackup/bin/xtrabackup/usr/bin/

常用选项:

--defaults-file        #数据库的配置文件路线

--apply-log           #粮草先行未雨策动在三个备份上运转mysql服务。

--copy-back           #从备份目录拷贝数据,索引,日志到my.cnf文件里分明的上马地方。

--no-timestamp         #创办备份时不自动生成时间目录,能够自定义备份目录名譬如:/backups/mysql/base

--databases          #用来钦赐要备份的数据库,多少个库文件使用方法: “database1 database2″

--incremental         #在全备份的基本功上开展增量备份,后跟增量备份存贮目录路线

--incremental-basedir=DIRECTORY    #增量备份所急需的全备份路线目录或上次做增量备份的目录路线

--incremental-dir=DIRECTORY       #增量备份存贮的目录路线

--redo-only                 #用于筹划增量备份内容把多少统豆蔻梢头到全备份目录,合营incremental-dir增量备份目录使用。

--force-non-empty-directories     #如果是特定库备份还原,没有必要删掉整个mysql目录,只是特定库的及有关文件就可以,还原时累计此参数就不会报错。

备份

全然备份

#innobackupex--defaults-file=/data/mysql/data3307/my.cnf --user=root --password=123456--socket=/data/mysql/data3307/mysql.sock /back/full/

--host:钦定备份服务器IP

--defaults-file:钦定数据库配置文件

--user=root:备份顾客

--password=123456:备份客户密码

--socket=/data/mysql/data3307/mysql.sock:指定sock文件

/back/full:数据库完全备份目录

增量备份

扩充第一回增量备份,要求在有三次完整备份的根底上进展

#innobackupex--defaults-file=/data/mysql/data3307/my.cnf --user=root --password=123456--socket=/data/mysql/data3307/mysql.sock --incremental /back/incre/ --incremental-basedir=/back/full/2016-07-28_01-46-28/

--incremental /back/incre:钦赐此次增量备份存放目录

--incremental-basedir=/back/full/2016-07-28_01-46-28:钦点完整备份寄存目录

扩充第叁遍增量备份

#innobackupex --defaults-file=/data/mysql/data3307/my.cnf--user=root --password=123456 --socket=/data/mysql/data3307/mysql.sock--incremental /back/incre/  --incremental-basedir=/back/incre/2016-07-28_01-50-41/

--incremental /back/incre:内定此番增量备份贮存目录

--incremental-basedir=/back/incre/2016-07-28_01-50-41:钦赐是第一个增量备份目录为参照他事他说加以考查点举行增量备份

就那样推算。。。

数据恢复生机

全然备份复苏

#/etc/init.d/mysql3307 stop

#innobackupex --user=root --password=123456--socket=/data/mysql/data3307/mysql.sock --apply-log --use-memory=100M /back/full/2016-08-08_00-46-06/

#mv /data/mysql/data3307  /data/mysql/data3307.bak

#mkdir –p /data/mysql/data3307

#innobackupex --user=root --password=123456--socket=/data/mysql/data3307/mysql.sock --copy-back--datadir=/data/mysql/data3307 /back/full/2016-08-08_00-46-06/

#cp /data/mysql/data3307.bak/my.cnf  /data/mysql/data3307/

#chown –R mysql.mysql /data/mysql/data3307

#/etc/init.d/mysql3307 start

增量备份恢复生机

停止mysql

#/etc/init.d/mysql3307 stop

行使完全备份

#innobackupex --user=root --password=123456--socket=/data/mysql/data3307/mysql.sock --apply-log --use-memory=100M --redo-only/back/full/2016-08-08_00-46-06/

将率先次增量备份应用到完全备份上

#innobackupex --user=root --password=123456--socket=/data/mysql/data3307/mysql.sock --apply-log --use-memory=100M --redo-only/back/full/2016-08-08_00-46-06/ --incremental-dir=/back/incre/2016-07-28_01-46-28/

将第二次增量备份应用到完全备份上

#innobackupex --user=root --password=123456--socket=/data/mysql/data3307/mysql.sock --apply-log --use-memory=100M --redo-only /back/full/2016-08-08_00-46-06/ --incremental-dir=/back/incre/2016-07-28_01-50-41/

依此类推。。。最后四个增量库不加–redo-only选项

始建mysql数据目录

#mv /data/mysql/data3307/data/mysql/data3307.bak

#mkdir /data/mysql/data3307

将完全备份苏醒到数据库中

#innobackupex --user=root --password=123456--socket=/data/mysql/data3307/mysql.sock --copy-back --datadir=/data/mysql/data3307/back/full/2016-08-08_00-46-06/

启动mysql

#cp data3307.bak/my.cnf data3307/

#chown -R mysql.mysql data3307

#/etc/init.d/mysql3307 start

翻开数据是不是苏醒

备份的文书表达

(1)xtrabackup_checkpoints ――备份类型(如完全或增量)、备份状态(如是不是曾经为prepared状态)和LSN(日志类别号)范围音讯;

各种InnoDB页(经常为16k高低)都会包括四个日记系列号,即LSN。LSN是整个数据库系统的类别版本号,每一个页面相关的LSN能够评释此页面近日是怎么样发生转移的。

#cat xtrabackup_checkpoints

backup_type = full-backuped        #申明那是全备

from_lsn = 0                  #全备的lsn起始号

to_lsn = 2026561686             #全备记录到的最大种类号

last_lsn = 2026562643           #全备完毕后当前的日志类别号

compact = 0                  #声明没有实行打包

(2)xtrabackup_binlog_info ―― mysql服务器当前正在采纳的二进制日志文件及至备份这一刻完工二进制日志事件的岗位。

#cat xtrabackup_binlog_info

mysql-bin.0000011371180-1-175

(3)backup-my.cnf ――备份命令用到的安插选项音讯和备份无关的不会记录,备份配置文件的话必要单独备份。

#cat backup-my.cnf

# This MySQL options file was generated byinnobackupex.

# The MySQL server

[mysqld]

innodb_checksum_algorithm=innodb

innodb_log_checksum_algorithm=innodb

innodb_data_file_path=ibdata1:12M:autoextend

innodb_log_files_in_group=2

innodb_log_file_size=50331648

innodb_fast_checksum=false

innodb_page_size=16384

innodb_log_block_size=512

innodb_undo_directory=.

innodb_undo_tablespaces=0

server_id=1

redo_log_version=0

(4)xtrabackup_info ――记录了mariadb的版本消息和某特质量新闻,还原是检查评定版本相称度时用到。

#cat xtrabackup_info

uuid = cda678f9-4dde-11e6-9906-0050562d6ff0

name =

tool_name = innobackupex

tool_command =--defaults-file=/data/mysql/data3307/my.cnf --use-memory=4G --user=root--password=... --port=3307 --socket=/data/mysql/data3307/mysql.sock --incremental/back/dump/incre/2016-07-20_02-28-40 --incremental-basedir/back/dump/incre/2016-07-20_02-28-40/2016-07-20_02-29-12

tool_version = 2.4.4

ibbackup_version = 2.4.4

server_version = 10.1.14-MariaDB

start_time = 2016-07-20 02:29:58

end_time = 2016-07-20 02:30:00

lock_time = 0

binlog_pos = filename 'master-bin.000031',position '1532', GTID of the last change '0-1-4383'

innodb_from_lsn = 1729763

innodb_to_lsn = 1735728

partial = N

incremental = Y

format = file

compact = N

compressed = N

encrypted = N

本文由澳门新浦京娱乐场网站发布于数据库,转载请注明出处:xtrabackup备份mysql数据库的采取办法,MySQL备份和复