9159金沙官网(2)备份过程不会打断正在执行的事务

作者: 操作系统  发布:2019-11-22

备份阶段

1、完全备份数据库

xtrabackup -pcentos --backup --target-dir=/backups/full/
# --backup表示备份
# --target-dir=填写备份到哪里

2、往表中增加数据

mysql -pcentos hellodb -e "insert students (name,age) values('gaodao01',20)"

9159金沙官网 1
3、第一次增量备份

xtrabackup –pcentos --backup --target-dir=/backups/inc1/ --incremental-basedir=/backups/full
# --incremental-basedir表示基于谁的增量备份,写上上一次的备份路径
#

9159金沙官网 2

4、再次修改数据表

mysql -pcentos hellodb -e "insert students (name,age) values('gaodao02',21)"

9159金沙官网 3

5、第二次增量备份

xtrabackup -pcentos --backup --target-dir=/backups/inc2/ --incremental-basedir=/backups/inc1/

9159金沙官网 4

# This MySQL options file was generated byinnobackupex.

120407 09:36:10  innobackupex: completed OK!

利用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、安装

其最新版的软件可从   获得。本文基于RHEL5.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 PRIVILEGES, GRANT OPTION FROM ’bkpuser’;(如果出错,则可以不加上)

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

mysql> FLUSH PRIVILEGES;

使用innobakupex备份时,其会调用xtrabackup备份所有的InnoDB表,复制所有关于表结构定义的相关文件(.frm)、以及MyISAM、MERGE、CSV和ARCHIVE表的相关文件,同时还会备份触发器和数据库配置信息相关的文件。这些文件会被保存至一个以时间命名的目录中

在备份的同时,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-DIR目录来存储备份数据。

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服务器DATADIR目录中来执行恢复过程。innobackupex通过backup-my.cnf来获取DATADIR目录的相关信息。

# 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!”。

当数据恢复至DATADIR目录以后,还需要确保所有数据文件的属主和属组均为正确的用户,如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

其中,BASEDIR指的是完全备份所在的目录,此命令执行结束后,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

而后是第二个增量:# innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-2

其中BASE-DIR指的是完全备份所在的目录,而INCREMENTAL-DIR-1指的是第一次增量备份的目录,INCREMENTAL-DIR-2指的是第二次增量备份的目录,其它依次类推,即如果有多次增量备份,每一次都要执行如上操作;

最后,全部(完全备份和增量备份)恢复过程执行如下命令:

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

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

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> ALTER TABLE mydatabase.mytable  DISCARD TABLESPACE;

接下来,将来自于“导出”表的服务器的mytable表的mytable.ibd和mytable.exp文件复制到当前服务器的数据目录,然后使用如下命令将其“导入”:mysql> ALTER 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这个备份工...

规划

1、两台主机17和37,其中17当主mysql服务器,37用来还原的主机,

2、目录,1个存放完整备份的目录,N个存放增量备份的目录

9159金沙官网 5

说明:

full目录:  存放完全备份

inc1目录:存放第一次的增量备份

inc2目录:存放第二次的增量备份

Xtrabackup和innobackupex这两个工具都提供了许多前文没有提到的功能特点。手册上有对各个功能都有详细的介绍。简单介绍下,这些工具提供了如流(streaming)备份,增量(incremental)备份等,通过复制数据文件,复制日志文件和提交日志到数据文件(前滚)实现了各种复合备份方式。

还原部分备份的过程跟导入表的过程相同。当然,也可以通过直接复制prepared状态的备份直接至数据目录中实现还原,不要此时要求数据目录处于一致状态。

还原注意事项

1.datadir目录必须为空。除非指定innobackupex --force-non-emptydirectorires选项指定,否则--copy-backup选项不会覆盖

2.restore还原之前,必须shutdown停止 MySQL服务,不能将一个运行中的实例restore到datadir目录中

3.修改恢复文件的权限为mysql

4.最后一次增量备份还原要回滚事务

5.二进制安装的mysql要是出现停止不了服务就用killall –9 mysqld 杀掉进程进而实现停止服务

--incremental         #在全备份的基础上进行增量备份,后跟增量备份存贮目录路径

(1)“导出”表

备份时选项

xtrabackup --backup

--user:该选项表示备份账号

--password:该选项表示备份的密码

--host:该选项表示备份数据库的地址

--databases:该选项接受的参数为数据名,如果要指定多个数据库,彼此间需要以空格隔开;如:"xtra_test dba_test",同时,在指定某数据库时,也可以只指定其中的某张表。如:"mydatabase.mytable"。该选项对innodb引擎表无效,还是会备份所有innodb表

--defaults-file:该选项指定从哪个文件读取MySQL配置,必须放在命令行第一个选项位置

--incremental:该选项表示创建一个增量备份,需要指定--incremental-basedir

--incremental-basedir:该选项指定为前一次全备份或增量备份的目录,与--incremental同时使用

--incremental-dir:该选项表示还原时增量备份的目录

--include=name:指定表名,格式:databasename.tablename

tool_name = innobackupex

 

Prepare于准备选项

prepare

--apply-log:此选项作用是通过回滚未提交的事务及同步已经提交的事务至数据文件使数据文件处于一致性状态

--use-memory:该选项表示和--apply-log选项一起使用,prepare 备份的时候,xtrabackup做crash recovery分配的内存大小,单位字节。也可(1MB,1M,1G,1GB),推荐1G

--export:表示开启可导出单独的表之后再导入其他Mysql中

--redo-only:此选项在prepare base full backup,往其中merge增量备份时候使用

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

 

#make -j4

其最新版的软件可从  获得。本文基于RHEL5.8的系统,因此,直接下载相应版本的rpm包安装即可,这里不再演示其过程。

Xtrabackup

percona提供的mysql数据库备份工具,惟一开源的能够对innodb和xtradb数据库,它的增量备份不是基于二进制日志文件来还原数据的,是基于mysql数据块。

特点:

  • 备份还原过程快速、可靠
  • 备份过程不会打断正在执行的事务
  • 能够基于压缩等功能节约磁盘空间和流量
  • 自动实现备份检验
  • 开源,免费

from_lsn = 0                  #全备的lsn起始号

 

备份生产的相关文件

1)xtrabackup_info:innobackupex工具执行时的相关信息,包括版本,备份选项,备份时长,备份LSN,BINLOG的位置

2)xtrabackup_checkpoints:备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN(日志序列号)范围信息,每个InnoDB页(通常为16k大小)都会包含一个日志序列号,即LSN。LSN是整个数据库系统的系统版本号,每个页面相关的LSN能够表明此页面最近是如何发生改变的

3)xtrabackup_binlog_info:MySQL服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置,可利用实现基于binlog的恢复

4)backup-my.cnf:备份命令用到的配置选项信息

5)xtrabackup_logfile:备份生成的日志文件

#make install

 

实战

上面就是xtrabackup的备份过程。接下来是准备(prepare)过程。在这个过程中,xtrabackup使用之前复制的事务日志,对各个数据文件执行灾难恢复(就像mysql刚启动时要做的一样)。当这个过程结束后,数据库就可以做恢复还原了。

 

前言

通常我们都是使用xtrabackup工具来备份数据库,它是一个专业的备份工具,先来简单介绍下它。

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

1、完全备份

还原阶段

说明:还原的时候我们要考虑到前几次不要回滚,最后一次还原要回滚,还原主机要安装xtrabackup工具

1、把备份的目录传送到要还原的主机上

scp -r /backups/ 192.168.43.37:/

2、停服务并清空mysql数据

systemctl stop mysqld
rm -rf /app/mysql/*

3、完全备份的预处理

xtrabackup  --prepare --apply-log-only --target-dir=/backups/full

# --prepare 表示还原
# --apply-log-only 表示不回滚

4、第一次增量备份预处理

xtrabackup --prepare --apply-log-only --target-dir=/backups/full --incremental-dir=/backups/inc1

# 同样不回滚

5、第二次增量备份预处理

xtrabackup --prepare  --target-dir=/backups/full --incremental-dir=/backups/inc2
# 这是最后一次,所以要回滚不完整的事务

6、复制处理好的数据到真正的存放数据库目录下

xtrabackup --copy-back --target-dir=/backups/full
# 它会根据你的配置文件my.cnf来读取存放位置

7、修改数据库文件权限

chown -R mysql.mysql /app/mysql/

以上还原到了备份时的状态,我们备份完二次增量后又加了条记录,还没来得急三次增量备份就宕机了,所以再次利用二进制日志文件还原到最新状态

8、通过二进制文件还原到最新状态

1)以下图中文件记录了还原到的位置

9159金沙官网 6

2)从原主机导出二进制文件日志

mysqlbinlog --start-position=1039 /app/logs/mysql-bin.000003 >/app/binlog.sql

3)scp传送到目标主机来还原

  • 首先在配置文件中加入禁止所有人访问选项
skip-networking
  • 启动服务
systemctl start mysqld
  • 导入二进制日志
mysql -pcentos <binlog.sql

4)进入数据库验证

9159金沙官网 7

5)OK 恢复完成,删除配置文件中的skip-networking并重启服务

systemctl restart mysqld

更多精彩内容请移步

以上的过程在xtrabackup的编译二进制程序中实现。程序innobackupex可以允许我们备份MyISAM表和frm文件从而增加了便捷和功能。Innobackupex会启动xtrabackup,直到xtrabackup复制数据文件后,然后执行FLUSH TABLES WITH READ LOCK来阻止新的写入进来并把MyISAM表数据刷到硬盘上,之后复制MyISAM数据文件,最后释放锁。

 

还原时选项

--copy-back:复制

--move-back:移动

innodb_log_files_in_group=2

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

Xtrabackup用法

#tar zxf boost_1_59_0.tar.gz

其中BASE-DIR指的是完全备份所在的目录,而INCREMENTAL-DIR-1指的是第一次增量备份的目录,INCREMENTAL-DIR-2指的是第二次增量备份的目录,其它依次类推,即如果有多次增量备份,每一次都要执行如上操作;

# The MySQL server

 

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

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

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

 

innodb_undo_tablespaces=0

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

partial = N

 

安装xtrabackup

 

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

接下来,将来自于“导出”表的服务器的mytable表的mytable.ibd和mytable.exp文件复制到当前服务器的数据目录,然后使用如下命令将其“导入”:

(4)xtrabackup_info ――记录了mariadb的版本信息和一些属性信息,还原是检测版本匹配度时用到。

 

#cat xtrabackup_checkpoints

(2)备份过程不会打断正在执行的事务;

创建mysql数据目录

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

#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进行备份时,还可以使用--no-timestamp选项来阻止命令自动创建一个以时间命名的目录;如此一来,innobackupex命令将会创建一个BACKUP-DIR目录来存储备份数据。

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

 

进行第一次增量备份,需要在有一次完整备份的基础上进行

 

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

在备份的同时,innobackupex还会在备份目录中创建如下文件:

innodb_data_file_path=ibdata1:12M:autoextend

 

server_version = 10.1.14-MariaDB

 

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

 

#/etc/init.d/mysql3307 start

Xtrabackup也可以实现部分备份,即只备份某个或某些指定的数据库或某数据库中的某个或某些表。但要使用此功能,必须启用innodb_file_per_table选项,即每张表保存为一个独立的文件。同时,其也不支持--stream选项,即不支持将数据通过管道传输给其它程序进行处理。

#cd percona-xtrabackup-2.4.4

创建部分备份的方式有三种:正则表达式(--include), 枚举表文件(--tables-file)和列出要备份的数据库(--databases)。

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

如果执行正确,其最后输出的几行信息通常如下:

#mkdir –p /data/mysql/data3307

 

进行第二次增量备份

 

compact = N

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

#/etc/init.d/mysql3307 stop

(c)使用--databases

停止mysql

三、使用innobackupex进行增量备份

innodb_log_checksum_algorithm=innodb

同时,innobackupex备份的数据文件也可以存储至远程主机,这可以使用--remote-host选项来实现:

lock_time = 0

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

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

# innobackupex --apply-log  /path/to/BACKUP-DIR

#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/

四、Xtrabackup的“流”及“备份压缩”功能

innodb_from_lsn = 1729763

2、准备(prepare)一个完全备份

--databases          #用于指定要备份的数据库,多个库文件使用方法: “database1 database2″

在实现“准备”的过程中,innobackupex通常还可以使用--use-memory选项来指定其可以使用的内存的大小,默认通常为100M。如果有足够的内存可用,可以多划分一些内存给prepare的过程,以提高其完成速度。

应用完全备份

然后将此表的表空间删除:

innodb_undo_directory=.

 

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

 

format = file

# innobackupex --parallel  /path/to/backup

#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/

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

tool_version = 2.4.4

要在mysql服务器上导入来自于其它服务器的某innodb表,需要先在当前服务器上创建一个跟原表表结构一致的表,而后才能实现将表导入:

官网下载

使用--include时,要求为其指定要备份的表的完整名称,即形如databasename.tablename,如:

查看数据是否恢复

于是,操作就变成了:

完全备份恢复

此选项的参数需要是一个文件名,此文件中每行包含一个要备份的表的完整名称;如:

#chown -R mysql.mysql data3307

(5)backup-my.cnf —— 备份命令用到的配置选项信息;

                                                                            Xtrabackup

innobakupex命令的--apply-log选项可用于实现上述功能。如下面的命令:

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

 

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

 

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

 

安装

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

to_lsn = 2026561686             #全备记录到的最大序列号

此命令会为每个innodb表的表空间创建一个以.exp结尾的文件,这些以.exp结尾的文件则可以用于导入至其它服务器。

完全备份

六、使用Xtrabackup对数据库进行部分备份

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

“准备”(prepare)增量备份与整理完全备份有着一些不同,尤其要注意的是:

last_lsn = 2026562643           #全备完成后当前的日志序列号

 

--incremental /back/incre:指定这次增量备份存放目录

甚至也可以使用类似如下命令将数据备份至其它服务器:

#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/

 

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

# innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-2

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

 

常用选项:

 

数据恢复

120407  9:01:36  InnoDB: Starting shutdown...

备份

 

backup_type = full-backuped        #注明这是全备

使用innobakupex备份时,其会调用xtrabackup备份所有的InnoDB表,复制所有关于表结构定义的相关文件(.frm)、以及MyISAM、MERGE、CSV和ARCHIVE表的相关文件,同时还会备份触发器和数据库配置信息相关的文件。这些文件会被保存至一个以时间命令的目录中。

compressed = N

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

#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/

一、安装

每个InnoDB页(通常为16k大小)都会包含一个日志序列号,即LSN。LSN是整个数据库系统的系统版本号,每个页面相关的LSN能够表明此页面最近是如何发生改变的。

五、导入或导出单张表

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

 

#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/

mysql> FLUSH PRIVILEGES;

(1)xtrabackup_checkpoints ――备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN(日志序列号)范围信息;

mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM ’bkpuser’;

将完全备份恢复到数据库中

 

compact = 0                  #注明没有进行打包

(5)还原速度快;

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

 

备份MyISAM和InnoDB表最终会处于一致,在准备(prepare)过程结束后,InnoDB表数据已经前滚到整个备份结束的点,而不是回滚到xtrabackup刚开始时的点。这个时间点与执行FLUSH TABLES WITH READ LOCK的时间点相同,所以myisam表数据与InnoDB表数据是同步的。类似oracle的,InnoDB的prepare过程可以称为recover(恢复),myisam的数据复制过程可以称为restore(还原)。

mysql> ALTER TABLE mydatabase.mytable  DISCARD TABLESPACE;

innodb_checksum_algorithm=innodb

Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具。特点:

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

导出表是在备份的prepare阶段进行的,因此,一旦完全备份完成,就可以在preparef过程中通过--export选项将某表导出了:

--user=root:备份用户

 

redo_log_version=0

xtrabackup: starting shutdown with innodb_fast_shutdown = 1

server_id=1

 

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

innobackupex: in '/backup/2012-04-07_08-17-03'

--incremental-basedir=/back/full/2016-07-28_01-46-28:指定完整备份存放目录

(2)整理(preparing)部分备份  

#/etc/init.d/mysql3307 stop

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

#mkdir /data/mysql/data3307

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

ibbackup_version = 2.4.4

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

以此类推。。。

默认情况下,InnoDB表不能通过直接复制表文件的方式在mysql服务器之间进行移植,即便使用了innodb_file_per_table选项。而使用Xtrabackup工具可以实现此种功能,不过,此时需要“导出”表的mysql服务器启用了innodb_file_per_table选项(严格来说,是要“导出”的表在其创建之前,mysql服务器就启用了innodb_file_per_table选项),并且“导入”表的服务器同时启用了innodb_file_per_table和innodb_expand_import选项。

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

 

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

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

--incremental /back/incre:指定这次增量备份存放目录

 

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

 

#cat xtrabackup_binlog_info

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

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

此命令执行过程中,innobackupex会调用xtrabackup命令从数据字典中移除缺失的表,因此,会显示出许多关于“表不存在”类的警告信息。同时,也会显示出为备份文件中存在的表创建.exp文件的相关信息。

innodb_fast_checksum=false

# innobackupex --apply-log --redo-only BASE-DIR

#cd /usr/local/src/

innobackupex命令的--copy-back选项用于执行恢复操作,其通过复制所有数据相关的文件至mysql服务器DATADIR目录中来执行恢复过程。innobackupex通过backup-my.cnf来获取DATADIR目录的相关信息。

innodb_to_lsn = 1735728

 

incremental = Y

(1)备份过程快速、可靠;

(2)xtrabackup_binlog_info ―― mysql服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置。

 

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

此选项接受的参数为数据名,如果要指定多个数据库,彼此间需要以空格隔开;同时,在指定某数据库时,也可以只指定其中的某张表。此外,此选项也可以接受一个文件为参数,文件中每一行为一个要备份的对象。如:

#cp data3307.bak/my.cnf data3307/

# innobackupex --stream=tar  /backup | ssh user@www.magedu.com  "cat -  > /backups/`date +%F_%H-%M-%S`.tar" 

--redo-only                 #用于准备增量备份内容把数据合并到全备份目录,配合incremental-dir增量备份目录使用。

prepare部分备份的过程类似于导出表的过程,要使用--export选项进行:

官方原理

二、备份的实现

mysql-bin.0000011371180-1-175

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

--apply-log           #准备在一个备份上启动mysql服务。

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

innodb_log_block_size=512

(1)需要在每个备份(包括完全和各个增量备份)上,将已经提交的事务进行“重放”。“重放”之后,所有的备份数据将合并到完全备份上。

增量备份恢复

 

#/etc/init.d/mysql3307 start

 

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

如果执行正确,其输出信息的最后几行通常如下:

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

此外,在执行本地备份时,还可以使用--parallel选项对多个文件进行并行复制。此选项用于指定在复制时启动的线程数目。当然,在实际进行备份时要利用此功能的便利性,也需要启用innodb_file_per_table选项或共享的表空间通过innodb_data_file_path选项存储在多个ibdata文件中。对某一数据库的多个文件的复制无法利用到此功能。其简单使用方法如下:

innodb_log_file_size=50331648

 

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

 

#wget

2、安装

增量备份

 

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

 

在InnoDB内部会维护一个redo日志文件,我们也可以叫做事务日志文件。事务日志会存储每一个InnoDB表数据的记录修改。当InnoDB启动时,InnoDB会检查数据文件和事务日志,并执行两个步骤:它应用(前滚)已经提交的事务日志到数据文件,并将修改过但没有提交的数据进行回滚操作。

120407  9:01:40  InnoDB: Shutdown completed; log sequence number 92036620

#cat xtrabackup_info

     

#wget 

(2)xtrabackup_binlog_info —— mysql服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置。

name =

innobackupex: Finished copying back files.

--incremental-basedir=/back/incre/2016-07-28_01-50-41:指定是第一个增量备份目录为参考点进行增量备份

每个InnoDB页(通常为16k大小)都会包含一个日志序列号,即LSN。LSN是整个数据库系统的系统版本号,每个页面相关的LSN能够表明此页面最近是如何发生改变的。

--copy-back           #从备份目录拷贝数据,索引,日志到my.cnf文件里规定的初始位置。

 

Xtrabackup在启动时会记住log sequencenumber(LSN),并且复制所有的数据文件。复制过程需要一些时间,所以这期间如果数据文件有改动,那么将会使数据库处于一个不同的时间点。这时,xtrabackup会运行一个后台进程,用于监视事务日志,并从事务日志复制最新的修改。Xtrabackup必须持续的做这个操作,是因为事务日志是会轮转重复的写入,并且事务日志可以被重用。所以xtrabackup自启动开始,就不停的将事务日志中每个数据文件的修改都记录下来。

 

#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/

 

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

此外,还原部分备份跟还原全部数据的备份也有所不同,即你不能通过简单地将prepared的部分备份使用--copy-back选项直接复制回数据目录,而是要通过导入表的方向来实现还原。当然,有些情况下,部分备份也可以直接通过--copy-back进行还原,但这种方式还原而来的数据多数会产生数据不一致的问题,因此,无论如何不推荐使用这种方式。

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

Xtrabackup对备份的数据文件支持“流”功能,即可以将备份的数据通过STDOUT传输给tar程序进行归档,而不是默认的直接保存至某备份目录中。要使用此功能,仅需要使用--stream选项即可。如:

启动mysql

innobackupex: Starting to copy InnoDB log files

--no-timestamp         #创建备份时不自动生成时间目录,可以自定义备份目录名例如:/backups/mysql/base

请确保如上信息的最行一行出现“innobackupex: completed OK!”。

encrypted = N

 

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

 

备份的文件说明

 

#cat backup-my.cnf

 

#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

(b)使用--tables-file

下载安装所需依赖包,从MySQL 5.7.5开始Boost库是必需的

而后是第二个增量:

[mysqld]

每个InnoDB的页面都会包含一个LSN信息,每当相关的数据发生改变,相关的页面的LSN就会自动增长。这正是InnoDB表可以进行增量备份的基础,即innobackupex通过备份上次完全备份之后发生改变的页面来实现。

innodb_page_size=16384

(2)“导入”表

 

要实现第一次增量备份,可以使用下面的命令进行:

120407 09:01:40  innobackupex: completed OK!

 

 

 1、简介

 

 

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

(3)还原部分备份  

# innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-1

(1)xtrabackup_checkpoints —— 备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN(日志序列号)范围信息;

 

3、从一个完全备份中恢复数据

需要注意的是,增量备份仅能应用于InnoDB或XtraDB表,对于MyISAM表而言,执行增量备份时其实进行的是完全备份。

 

 

 

(1)创建部分备份

# innobackupex --remote-host=root@www.magedu.com  /path/IN/REMOTE/HOST/to/backup

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

 

(4)自动实现备份检验;

如果要使用一个最小权限的用户进行备份,则可基于如下命令创建此类用户:

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

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

接着执行:

 

mysql> ALTER TABLE mydatabase.mytable  IMPORT TABLESPACE;

其中,BASEDIR指的是完全备份所在的目录,此命令执行结束后,innobackupex命令会在/backup目录中创建一个新的以时间命名的目录以存放所有的增量备份数据。另外,在执行过增量备份之后再一次进行增量备份时,其--incremental-basedir应该指向上一次的增量备份所在的目录。

 

当数据恢复至DATADIR目录以后,还需要确保所有数据文件的属主和属组均为正确的用户,如mysql,否则,在启动mysqld之前还需要事先修改数据文件的属主和属组。如:

 

(a)使用--include

本文由9159.com发布于操作系统,转载请注明出处:9159金沙官网(2)备份过程不会打断正在执行的事务

关键词:

上一篇:没有了
下一篇:没有了