MySQL 大数据备份方案之Percona XtraBackup

Wesley13
• 阅读 929

  Xtrabackup介绍

1、Xtrabackup是什么

Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品。

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

1、xtrabackup只能备份InnoDB和XtraDB两种数据表,而不能备份MyISAM数据表
2、 innobackupex是参考了InnoDB Hotbackup的innoback脚本修改而来的.innobackupex是一个perl脚本封装,封装了xtrabackup。主要是为了方便的 同时备份InnoDB和MyISAM引擎的表,但在处理myisam时需要加一个读锁。并且加入了一些使用的选项。如slave-info可以记录备份恢 复后,作为slave需要的一些信息,根据这些信息,可以很方便的利用备份来重做slave。

2、Xtrabackup可以做什么 :

在线(热)备份整个库的InnoDB、 XtraDB表

在xtrabackup的上一次整库备份基础上做增量备份(innodb only)
以流的形式产生备份,可以直接保存到远程机器上(本机硬盘空间不足时很有用)

MySQL数据库本身提供的工具并不支持真正的增量备份,二进制日志恢复是point-in-time(时间点)的恢复而不是增量备份。
Xtrabackup工具支持对InnoDB存储引擎的增量备份,工作原理如下:

(1)首先完成一个完全备份,并记录下此时检查点的LSN(Log Sequence Number)。
(2)在进程增量备份时,比较表空间中每个页的LSN是否大于上次备份时的LSN,如果是,则备份该页,同时记录当前检查点的LSN。
首 先,在logfile中找到并记录最后一个checkpoint(“last checkpoint LSN”),然后开始从LSN的位置开始拷贝InnoDB的logfile到xtrabackup_logfile;接着,开始拷贝全部的数据文 件.ibd;在拷贝全部数据文件结束之后,才停止拷贝logfile。

因为logfile里面记录全部的数据修改情况,所以,即时在备份过程中数据文件被修改过了,恢复时仍然能够通过解析xtrabackup_logfile保持数据的一致。

因为innobackupex支持innodb,myisam,所以本文说一下,怎么使用innobackupex。

1.安装篇

安装包下载:

wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.9/binary/tarball/percona-xtrabackup-2.4.9-Linux-x86_64.tar.gz

解压:

[root@localhost src]# tar zxvf percona-xtrabackup-2.4.9-Linux-x86_64.tar.gz
[root@localhost src]# mv percona-xtrabackup-2.4.9-Linux-x86_64 /usr/local/xtrabackup

设置环境变量或者创建软链接:

方法1 设置环境变量
[root@localhost src]# vi /etc/profile
设置如下:
export PHP_HOME=/usr/local/php
PATH=$PATH:$PHP_HOME/bin:/usr/local/xtrabackup/bin
export PATH
说明:只需要在path中加入:/usr/local/xtrabackup/bin即可
 
使新设置的环境变量生效
[root@localhost src]# source /etc/profile
 
 
方法2 创建软链接
[root@localhost src]# ln -s /usr/local/xtrabackup/bin/* /usr/bin/

查看版本:

[root@localhost src]# xtrabackup --version
xtrabackup version 2.4.9 based on MySQL server 5.7.13 Linux (x86_64) (revision id: a467167cdd4)

2.常用参数说明:

详细参数说明:

https://www.percona.com/doc/percona-xtrabackup/LATEST/xtrabackup_bin/xbk_option_reference.html

https://www.percona.com/doc/percona-xtrabackup/2.4/innobackupex/innobackupex_option_reference.html

1. innobackupex 参数选项:

--defaults-file=[MY.CNF]    //指定配置文件:只能从给定的文件中读取默认选项。 且必须作为命令行上的第一个选项;必须是一个真实的文件,它不能是一个符号链接。
--databases=#    //指定备份的数据库和表,格式为:--database="db1[.tb1] db2[.tb2]" 多个库之间以空格隔开,如果此选项不被指定,将会备份所有的数据库。
--user=root       //备份使用的用户
--password=123456    //备份使用的用户的密码
--no-lock            //不锁表,仅适用于存储引擎为innodb,并且不在乎备份位置点时使用。如果有任何DDL语句正在执行或非InnoDB正在更新时,会导致备份数据不一致。如果考虑备份因为获得锁失败,可以考虑--safe-slave-backup立刻停止复制线程。
--socket==/tmp/mysql.sock  // 指定mysql.sock所在位置,便于备份进程登录mysql
--include=REGEXP    //用正则表达式的方式指定要备份的数据库和表,格式为 --include=‘^mydb[.]mytb’ ,对每个库中的每个表逐一匹配,因此会创建所有的库,不过是空的目录。--include 传递给 xtrabackup --tables。
--tables-file=FILE    //此选项的参数需要是一个文件名,此文件中每行包含一个要备份的表的完整名称,格式为databasename.tablename。该选项传递给 xtrabackup --tables-file,与--tables选项不同,只有要备份的表的库才会被创建。
注意:部分备份(--include、--tables-file、--database)需要开启 innodb_file_per_table 。
--compact    //创建紧凑型备份,忽略所有辅助索引页,只备份data page;通过--apply-log中重建索引--rebuild-indexs。
--compress    //此选项指示xtrabackup压缩备份的InnoDB数据文件,会生成 *.qp 文件。
--decompress    //解压缩qp文件,为了解压缩,必须安装 qpress 工具。 Percona XtraBackup不会自动删除压缩文件,为了清理备份目录,用户应手动删除 * .qp文件:find /data/backup -name "*.qp" | xargs rm。
--no-timestamp    //指定了这个选项备份将会直接存储在 BACKUP-DIR 目录,不再创建时间戳文件夹。
--apply-log    //应用 BACKUP-DIR 中的 xtrabackup_logfile 事务日志文件。一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处于不一致状态。“准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件使得数据文件处于一致性状态。
--use-memory=#    //此选项接受一个字符参数(1M/1MB,1G/1GB,默认100M),仅与--apply-log一起使用,该选项指定prepare时用于崩溃恢复(crash-recovery)的内存。
--copy-back    //拷贝先前备份所有文件到它们的原始路径。但原路径下不能有任何文件或目录,除非指定 --force-non-empty-directories 选项。
--force-non-empty-directories    //恢复时指定此选项,可使 --copy-back 和 --move-back 复制文件到非空目录,即原data目录下可以有其他文件,但是不能有与恢复文件中同名的文件,否则恢复失败。
--rsync    //此选项可优化本地文件(非InnoDB)的传输。rsync工具一次性拷贝所有非InnoDB文件,而不是为每个文件单独创建cp,在备份恢复很多数据库和表时非常高效。此选项不能和 --stream 一起使用。
--incremental    //这个选项告诉 xtrabackup 创建一个增量备份,而不是完全备份。它传递到 xtrabackup 子进程。当指定这个选项,可以设置 --incremental-lsn 或 --incremental-basedir。如果这2个选项都没有被指定,--incremental-basedir 传递给 xtrabackup 默认值,默认值为:基础备份目录的第一个时间戳备份目录。
--incremental-basedir=DIRECTORY    //该选项接受一个字符串参数,该参数指定作为增量备份的基本数据集的完整备份目录。它与 --incremental 一起使用。
--incremental-dir=DIRECTORY    //该选项接受一个字符串参数,该参数指定了增量备份将与完整备份相结合的目录,以便进行新的完整备份。它与 --incremental 选项一起使用。
--redo-only    //在“准备基本完整备份” 和 “合并所有的增量备份(除了最后一个增备)”时使用此选项。它直接传递给xtrabackup的 xtrabackup --apply-log-only 选项,使xtrabackup跳过"undo"阶段,只做"redo"操作。如果后面还有增量备份应用到这个全备,这是必要的。有关详细信息,请参阅xtrabackup文档。
--parallel=NUMBER-OF-THREADS    //此选项接受一个整数参数,指定xtrabackup子进程应用于同时备份文件的线程数。请注意,此选项仅适用于文件级别,也就是说,如果您有多个.ibd文件,则它们将被并行复制; 如果您的表一起存储在一个表空间文件中,它将不起作用。
2) xtrabackup 参数选项
--apply-log-only    //这个选项使在准备备份(prepare)时,只执行重做(redo)阶段,这对于增量备份非常重要。

按职能划分:

 

--user:该选项表示备份账号。
--password:该选项表示备份的密码。
--port:该选项表示备份数据库的端口。
--host:该选项表示备份数据库的地址。
--socket:该选项表示mysql.sock所在位置,以便备份进程登录mysql。
--defaults-file:该选项指定了从哪个文件读取MySQL配置,必须放在命令行第一个选项的位置。
--databases:该选项接受的参数为数据名,如果要指定多个数据库,彼此间需要以空格隔开;如:"db1 db2",同时,在指定某数据库时,也可以只指定其中的某张表。如:"mydatabase.mytable"。该选项对innodb引擎表无效,还是会备份所有innodb表。此外,此选项也可以接受一个文件为参数,文件中每一行为一个要备份的对象。

#压缩参数
--compress:该选项表示压缩innodb数据文件的备份。
--compress-threads:该选项表示并行压缩worker线程的数量。
--compress-chunk-size:该选项表示每个压缩线程worker buffer的大小,单位是字节,默认是64K。

#加密参数
--encrypt:该选项表示通过ENCRYPTION_ALGORITHM的算法加密innodb数据文件的备份,目前支持的算法有ASE128,AES192,AES256。
--encrypt-key:该选项使用合适长度加密key,因为会记录到命令行,所以不推荐使用。
--encryption-key-file:该选项表示文件必须是一个简单二进制或者文本文件,加密key可通过以下命令行命令生成:openssl rand -base64 24。
--encrypt-threads:该选项表示并行加密的worker线程数量。
--encrypt-chunk-size:该选项表示每个加密线程worker buffer的大小,单位是字节,默认是64K。

#增量备份参数
--incremental:该选项表示创建一个增量备份,需要指定--incremental-basedir。
--incremental-basedir:该选项表示接受了一个字符串参数指定含有full backup的目录为增量备份的base目录,与--incremental同时使用。
--incremental-lsn:该选项表示指定增量备份的LSN,与--incremental选项一起使用。
--incremental-dir:该选项表示增量备份的目录。
--incremental-force-scan:该选项表示创建一份增量备份时,强制扫描所有增量备份中的数据页。
--incremental-history-name:该选项表示存储在PERCONA_SCHEMA.xtrabackup_history基于增量备份的历史记录的名字。Percona Xtrabackup搜索历史表查找最近(innodb_to_lsn)成功备份并且将to_lsn值作为增量备份启动出事lsn.与innobackupex--incremental-history-uuid互斥。如果没有检测到有效的lsn,xtrabackup会返回error。
--incremental-history-uuid:该选项表示存储在percona_schema.xtrabackup_history基于增量备份的特定历史记录的UUID。 

#主从
--slave-info:该选项表示对slave进行备份的时候使用,打印出master的名字和binlog pos,同样将这些信息以change master的命令写入xtrabackup_slave_info文件。可以通过基于这份备份启动一个从库。
--safe-slave-backup:该选项表示为保证一致性复制状态,这个选项停止SQL线程并且等到show status中的slave_open_temp_tables为0的时候开始备份,如果没有打开临时表,bakcup会立刻开始,否则SQL线程启动或者关闭知道没有打开的临时表。如果slave_open_temp_tables在--safe-slave-backup-timeount(默认300秒)秒之后不为0,从库sql线程会在备份完成的时候重启。

--include:该选项表示使用正则表达式匹配表的名字[db.tb],要求为其指定匹配要备份的表的完整名称,即databasename.tablename。
--tables-file:该选项表示指定含有表列表的文件,格式为database.table,该选项直接传给--tables-file。
--no-timestamp:该选项可以表示不要创建一个时间戳目录来存储备份,指定到自己想要的备份文件夹。
--rsync:该选项表示通过rsync工具优化本地传输,当指定这个选项,innobackupex使用rsync拷贝非Innodb文件而替换cp,当有很多DB和表的时候会快很多,不能--stream一起使用。
--stream:该选项表示流式备份的格式,backup完成之后以指定格式到STDOUT,目前只支持tar和xbstream。
--ibbackup:该选项指定了使用哪个xtrabackup二进制程序。IBBACKUP-BINARY是运行percona xtrabackup的命令。这个选项适用于xtrbackup二进制不在你是搜索和工作目录,如果指定了该选项,innoabackupex自动决定用的二进制程序。
--kill-long-queries-timeout:该选项表示从开始执行FLUSH TABLES WITH READ LOCK到kill掉阻塞它的这些查询之间等待的秒数。默认值为0,不会kill任何查询,使用这个选项xtrabackup需要有Process和super权限。
--kill-long-query-type:该选项表示kill的类型,默认是all,可选select。
--ftwrl-wait-threshold:该选项表示检测到长查询,单位是秒,表示长查询的阈值。
--ftwrl-wait-query-type:该选项表示获得全局锁之前允许那种查询完成,默认是ALL,可选update。
--galera-info:该选项表示生成了包含创建备份时候本地节点状态的文件xtrabackup_galera_info文件,该选项只适用于备份PXC。
--defaults-extra-file:该选项指定了在标准defaults-file之前从哪个额外的文件读取MySQL配置,必须在命令行的第一个选项的位置。一般用于存备份用户的用户名和密码的配置文件。
----defaults-group:该选项表示从配置文件读取的组,innobakcupex多个实例部署时使用。
--no-lock:该选项表示关闭FTWRL的表锁,只有在所有表都是Innodb表并且不关心backup的binlog pos点,如果有任何DDL语句正在执行或者非InnoDB正在更新时(包括mysql库下的表),都不应该使用这个选项,后果是导致备份数据不一致,如果考虑备份因为获得锁失败,可以考虑--safe-slave-backup立刻停止复制线程。
--tmpdir:该选项表示指定--stream的时候,指定临时文件存在哪里,在streaming和拷贝到远程server之前,事务日志首先存在临时文件里。在 使用参数stream=tar备份的时候,你的xtrabackup_logfile可能会临时放在/tmp目录下,如果你备份的时候并发写入较大的话 xtrabackup_logfile可能会很大(5G+),很可能会撑满你的/tmp目录,可以通过参数--tmpdir指定目录来解决这个问题。
--history:该选项表示percona server 的备份历史记录在percona_schema.xtrabackup_history表。 --close-files:该选项表示关闭不再访问的文件句柄,当xtrabackup打开表空间通常并不关闭文件句柄目的是正确的处理DDL操作。如果表空间数量巨大,这是一种可以关闭不再访问的文件句柄的方法。使用该选项有风险,会有产生不一致备份的可能。
--compact:该选项表示创建一份没有辅助索引的紧凑的备份。
--throttle:该选项表示每秒IO操作的次数,只作用于bakcup阶段有效。apply-log和--copy-back不生效不要一起用。

3、具体实例

1、普通全量备份、还原:

如果是对所有数据库备份的话,可以使用--copy-back恢复。但如果是部分备份,不能直接用--copy-back,只能手动来复制需要的库,也要复制ibdata(数据字典)

备份所有数据库:备份目录里生成日期命名的文件夹

innobackupex  --defaults-file=/etc/my.cnf --user=root --password=@126.com  /home/backup/xtrabackup/

还原

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

innobackupex --apply-log /home/backup/xtrabackup/2018-07-28_09-35-25/

恢复数据:需要数据目录为空,关掉mysql服务器

innobackupex --defaults-file=/etc/my.cnf --copy-back /home/backup/xtrabackup/2018-07-28_09-35-25/

修改权限

sudo chown mysql:mysql /var/lib/mysql -R    #/var/lib/mysql是我mysql的数据路径

重新启动服务器,数据恢复完成

service mysqld start

 --no-timestamp 增加选项,备份文件直接在指定目录下产生,不会生成日期命名的文件夹

++++++++++++++++++++++++++++++++++++++++++++++++++++

2、普通增量备份、还原

如果是对所有数据库备份的话,可以使用--copy-back恢复。但如果是部分备份,不能直接用--copy-back,只能手动来复制需要的库,也要复制ibdata(数据字典)

#全量备份

innobackupex --defaults-file=/etc/my.cnf --user=root --password=@126.com /home/backup/xtrabackup/

#增量备份1

innobackupex --defaults-file=/etc/my.cnf --user=root --password=@126.com --incremental --incremental-basedir=/home/backup/xtrabackup/2018-07-28_22-37-26/ /home/backup/increment_data/

#增量备份2

innobackupex --defaults-file=/etc/my.cnf --user=root --password=@126.com --incremental --incremental-basedir=/home/backup/increment_data/2018-07-28_22-39-28/  /home/backup/increment_data/

注:    1.通过上面三个目录里的xtrabackup_checkpoints文件,可以看出是哪种备份类型,全量(full-backuped)还是增量 并且全量到增量的from_lsn和last_lsn是一一对应的。

          2.在第2次做增量备份的时候 --incremental-basedir 指向全量备份,则第一次增量备份中的数据会被第2次包含,只需要还原一次就可以恢复,现在则需要还原2次增量备份。  

          3.其中,--incremental指明是增量备份,--incremental-basedir指定上次完整备份或者增量备份文件的位置。这里的增量备份其实只针对的是InnoDB,对于MyISAM来说,还是完整备份。

#还原

1.先prepare全备

innobackupex --incremental --apply-log --redo-only /home/backup/xtrabackup/2018-07-28_22-37-26

2.再prepare第一个增量

innobackupex --incremental --apply-log --redo-only /home/backup/xtrabackup/2018-07-28_22-37-26 --incremental-dir=/home/backup/increment_data/2018-07-28_22-39-28

3.然后prepare最后一个增量

innobackupex --incremental --apply-log --redo-only /home/backup/xtrabackup/2018-07-28_22-37-26 --incremental-dir=/home/backup/increment_data/2018-07-28_22-41-21

此时两次增量备份其实都合并到全备上了,恢复是只需要使用全备进行恢复就可以了

4.最后再prepare全量备份

innobackupex --apply-log /home/backup/xtrabackup/2018-07-28_22-37-26/

数据恢复,需要mysql数据目录为空,如果非空,恢复命令将报错

innobackupex --defaults-file=/etc/my.cnf --copy-back /home/backup/xtrabackup/2018-07-28_22-37-26/

修改权限,因为--copy-back恢复产生的文件的用户为root,需要把mysql数据库目录下的文件用户都修改为mysql,mysql的服务器才能正常启动

sudo chown mysql:mysql /var/lib/mysql -R    #/var/lib/mysql是我mysql的数据路径

重新启动服务器,数据恢复完成。

以上是对所有数据库的一个增量备份过程,如果想要指定备份的数据库,只需要在每条的备份命令里增加:

--databases=DataBaseName(指定的数据库个>1时,用空格隔开)

如果只想备份指定数据库下的某个表,只需要在每条的备份命令里增加:

--databases=DataBaseName.tableName

部分备份,不能直接用--copy-back,只能手动来复制需要的库,也要复制ibdata(数据字典)

++++++++++++++++++++++++++++++++++++++++++++++++++++

3、部分备份

1、部分备份多个数据库时,多个数据库用空格分开

注意的是:如果备份单个的表,备份的表必须是在独立的表空间中,即该表在创建以前,你的MySQL开启了innodb_file_per_table设置。

还一点要注意的是:不要将prepared backup备份的东西拷贝回去。部分备份使用的是导入表(importing the tables),而不是全库备份的--copy-back参数。尽管有时简单的拷贝备份文件可以成功,但是这种方法很容易导致数据库的不一致,因此不推荐大家这么做

部分备份共有三种方式,分别是:1. 用正则表达式表示要备份的库名及表名(参数为--include);2. 将要备份的表名或库名都写在一个文本文件中(参数为--tables-file)以及 3. 将要备份表名或库名完整的写在命令行中(参数为:--databases)。(注:不管你备份哪个库或是哪张表,强烈推荐把mysql库也一起备份,恢复的时候要用。)

2、#备份指定表

        保证:InnoDB_File_Per_Table = ON   --此参数修改InnoDB为独立表空间模式,每个数据库的每个表都会生成一个数据空间.

          以数据库xtra_test下表 I 为例实验,这个涉及到两个mysql的服务器,在一个服务器上备份,在另一台服务器上恢复。

第一步:备份数据库xtra_test下的 I 表,备份前保证表里有一定的数据

innobackupex --defaults-file=/etc/my.cnf --user=root --password=@126.com --databases="xtra_test.I mysql" /home/backup/xtrabackup

第二步:准备部分备份(Preparing Partial Backups)

innobackupex --apply-log --export /home/backup/xtrabackup

第三步:查看备份表的结构

mysql> show create table I;

第四步:把创建表的命令复制下来,在另一台服务器上,创建一模一样的表

CREATE TABLE `I` (

  `id` int(11) DEFAULT NULL,

  `name` varchar(10) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

第五步:discard its tablespace

ALTER TABLE test.I DISCARD TABLESPACE;

第六步:将备份文件中的I.exp  和  I.ibd 文件拷贝到你创建的表空间,即mysqldatadir/databaseName/tableName/下

scp root@172.16.7.131:/home/backup/xtrabackup/2018-07-30_23-40-13/xtra_test/I.exp .

scp远程拷贝命令,注意最后有个点表示拷贝到当前目录,可以换成绝对路径:/var/lib/mysql/test/I/

第七步:修改拷贝文件的权限

sudo chown mysql:mysql /var/lib/mysql/test/I -R

或者在当前目录执行:

sudo chown mysql:mysql I.exp -R

sudo chown mysql:mysql  I.ibd -R

第八步:IMPORT TABLESPACE

ALTER TABLE test.I IMPORT TABLESPACE;

最后查看表中的数据,恢复完成。

++++++++++++++++++++++++++++++++++++++++++++++++++++

4、其他备份形式(没有亲自操作,留着以后用到再做研究)

③.打包压缩备份,注意:--compress不能和--stream=tar一起使用

#压缩备份

innobackupex --defaults-file=/etc/mysql/my.cnf --user=root --password=123 --compress --compress-threads=8 --no-timestamp --databases="xtra_test.I" /home/zhoujy/xtrabackup/

#在perpare之前需要decompress,需要安装qpress

innobackupex --decompress /home/zhoujy/xtrabackup/

#prepare

innobackupex --apply-log /home/zhoujy/xtrabackup/

最后还原方法和上面一致

#打包备份

innobackupex --defaults-file=/etc/mysql/my.cnf --user=root --password=123 --stream=tar --no-timestamp --databases="xtra_test" /home/zhoujy/xtrabackup/ 1>/home/zhoujy/xtrabackup/xtra_test.tar

#解包

tar ixvf xtra_test.tar

最后还原方法和上面一致

#第三方压缩备份:

innobackupex --defaults-file=/etc/mysql/my.cnf --user=root --password=123 --compress --compress-threads=8 --parallel=4 --stream=tar --no-timestamp --databases="xtra_test" /home/zhoujy/xtrabackup/ | gzip >/home/zhoujy/xtrabackup/xtra_test.tar.gz

#prepare之前先解压

tar izxvf xtra_test.tar.gz

#prepare

innobackupex --apply-log /home/zhoujy/xtrabackup/

④.加密备份

说明:在参数说明里看到加密备份的几个参数:--encrypt、--encrypt-threads、--encrypt-key、--encryption-key-file。其中encrypt-key和encryption-key-file不能一起使用,encryption-key需要把加密的密码写到命令行,不推荐。

#加密备份:

先生成key:

openssl rand -base64 24

把Key写到文件:

echo -n "Ue2Wp6dIDWszpI76HQ1u57exyjAdHpRO" > keyfile

最后备份:

innobackupex --defaults-file=/etc/mysql/my.cnf --user=root --password=123 --compress --compress-threads=3 --no-timestamp --encrypt=AES256 --encrypt-key-file=/home/zhoujy/keyfile ----encrypt-threads=3 --parallel=5 /home/zhoujy/xtrabackup2/

#解密:

for i in `find . -iname "*\.xbcrypt"`; do xbcrypt -d --encrypt-key-file=/home/zhoujy/keyfile --encrypt-algo=AES256 < $i > $(dirname $i)/$(basename $i .xbcrypt) && rm $i; done

#解压:

innobackupex --decompress /home/zhoujy/xtrabackup2/

#prepare:

innobackupex --apply-log /home/zhoujy/xtrabackup2/

#还原copy

innobackupex --defaults-file=/etc/mysql/my.cnf --move-back /home/zhoujy/xtrabackup2/

⑤.复制环境中的备份:一般生产环境大部分都是主从模式,主提供服务,从提供备份。

#备份 5个线程备份2个数据库,并且文件xtrabackup_slave_info记录GTID和change的信息

innobackupex --defaults-file=/etc/mysql/my.cnf --user=root --password=123 --no-timestamp --slave-info --safe-slave-backup --parallel=5 --databases='xtra_test dba_test' /home/zhoujy/xtrabackup/

#还原

还原方法同上

总结:关于更多的innobackupex的备份可以看官方文档和xtrabackup 安装使用。强烈推荐研究研究帮助文档

5、个人感觉一些比较重要的文档,大多博客没有提到的放在了下边

Once the pages have been put together in their respective order, applying the logs will recreate the process that affected

the database, yielding the data at the moment of the most recently created backup.

Creating an Incremental Backups with innobackupex First, you need to make a full backup as the BASE for

subsequent incremental backups:

$ innobackupex /data/backups

This will create a timestamped directory in /data/backups. Assuming that the backup is done last day of the

month, BASEDIR would be /data/backups/2013-03-31_23-01-18, for example.

Note: You can use the innobackupex --no-timestamp option to override this behavior and the backup will

be created in the given directory.

If you check at the xtrabackup-checkpoints file in BASE-DIR, you should see something like:

backup_type = full-backuped

from_lsn = 0

to_lsn = 1291135

To create an incremental backup the next day, use the --incremental option and provide the BASEDIR:

$ innobackupex --incremental /data/backups --incremental-basedir=BASEDIR

and another timestamped directory will be created in /data/backups, in this example,

/data/backups/2013-04-01_23-01-18 containing the incremental backup. We will call this

INCREMENTAL-DIR-1.

If you check at the xtrabackup-checkpoints file in INCREMENTAL-DIR-1, you should see something like:

backup_type = incremental

from_lsn = 1291135

to_lsn = 1352113

Creating another incremental backup the next day will be analogous, but this time the previous incremental one will

be base:

$ innobackupex --incremental /data/backups --incremental-basedir=INCREMENTAL-DIR-1

yielding (in this example) /data/backups/2013-04-02_23-01-18. We will use INCREMENTAL-DIR-2

instead for simplicity.

At this point, the xtrabackup-checkpoints file in INCREMENTAL-DIR-2 should contain something like:

backup_type = incremental

from_lsn = 1352113

to_lsn = 1358967

As it was said before, an incremental backup only copy pages with a LSN greater than a specific value. Providing the

LSN would have produced directories with the same data inside:

innobackupex --incremental /data/backups --incremental-lsn=1291135

innobackupex --incremental /data/backups --incremental-lsn=1358967

This is a very useful way of doing an incremental backup, since not always the base or the last incremental will be

available in the system.

Warning: This procedure only affects XtraDB or InnoDB-based tables. Other tables with a different storage

engine, e.g. MyISAM, will be copied entirely each time an incremental backup is performed.

Note: Currently in Percona XtraBackup the –databases option has no effect for InnoDB files for both local and

streaming backups, i.e. all InnoDB files are always backed up. Currently, only .frm and non-InnoDB tables are limited

by that option.

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这