转自:https://www.cnblogs.com/dianel/


   

1. innobackupex参数选项

--no-timestamp: 不创建一个时间戳
--defaults-file=[MY.CNF]    //指定配置文件:只能从给定的文件中读取默认选项。 且必须作为命令行上的第一个选项;必须是一个真实的文件,它不能是一个符号链接。--databases=#    //指定备份的数据库和表,格式为:--database="db1[.tb1] db2[.tb2]" 多个库之间以空格隔开,如果此选项不被指定,将会备份所有的数据库。--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 文件。--apply-log    //应用 BACKUP-DIR 中的 xtrabackup_logfile 事务日志文件。一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处于不一致状态。“准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件使得数据文件处于一致性状态。--use-memory=#    //此选项接受一个字符参数(1M/1MB,1G/1GB,默认100M),仅与--apply-log一起使用,该选项指定prepare时用于崩溃恢复(crash-recovery)的内存。--copy-back    //拷贝先前备份所有文件到它们的原始路径。但原路径下不能有任何文件或目录,除非指定 --force-non-empty-directories 选项。--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.全量备份恢复

创建备份恢复的用户并赋权

create user pxb@'localhost' identified by '123456';

grant reload,process,lock tables,replication client on . to pxb@localhost;

创建存放备份文件的目录

mkdir -pv /var/data

进行数据库全量备份:

innobackupex --defaults-file=/etc/my.cnf --user=pxb --password=123456 /var/data/

[root@aliy ~]# ll /var/data/2018-08-28_09-06-39/

total 18460

-rw-r----- 1 root root 417 Aug 28 09:06 backup-my.cnf

-rw-r----- 1 root root 18874368 Aug 28 09:06 ibdata1

drwxr-x--- 2 root root 4096 Aug 28 09:06 mysql

drwxr-x--- 2 root root 4096 Aug 28 09:06 performance_schema

drwxr-x--- 2 root root 4096 Aug 28 09:06 test

-rw-r----- 1 root root 113 Aug 28 09:06 xtrabackup_checkpoints

-rw-r----- 1 root root 454 Aug 28 09:06 xtrabackup_info

-rw-r----- 1 root root 2560 Aug 28 09:06 xtrabackup_logfile

全量备份恢复

systemctl stop mariadb

rm /var/lib/mysql -rf

mkdir /var/lib/mysql

准备一个完全备份: --apply-log,执行之后 xtrabackup_checkpoints 文件中的 backup_type = full-prepared

innobackupex --apply-log /var/data/2018-08-28_09-06-39/

执行恢复操作:

innobackupex --defaults-file=/etc/my.cnf --copy-back /var/data/2018-08-28_09-06-39/

更改data目录权限并启动mysql:

chown -R mysql:mysql /var/lib/mysql

systemctl start mariadb

3. 增量备份恢复

所谓增量备份恢复就是在全量的基础上进行增量备份。

增量备份1:以全量为基准

innobackupex --defaults-file=/etc/my.cnf --user=pxb --password=123456 --incremental /var/data/inc --incremental-basedir=/var/data/2018-08-28_10-01-53/ --parallel=2

中途进行了数据添加操作。

增量备份2:以增量备份1为基准

innobackupex --defaults-file=/etc/my.cnf --user=pxb --password=123456 --incremental /var/data/inc/ --incremental-basedir=/var/data/inc/2018-08-28_10-04-22/ --parallel=2

增量备份的恢复:
步骤:

  1. 恢复完全备份

  2. 恢复增量备份到完全备份(开始恢复的增量备份要添加--redo-only参数,到最后一次增量备份要去掉--redo-only)

  3. 对整体的完全备份进行恢复,回滚提交的数据

准备一个全备:

innobackupex --apply-log --redo-only /var/data/2018-08-28_10-01-53/

将增量1应用到完全备份

innobackupex --apply-log --redo-only /var/data/2018-08-28_10-01-53 --incremental-dir=/var/data/inc/2018-08-28_10-04-22/

将增量2应用到完全备份,不用加--redo-only参数

innobackupex --apply-log /var/data/2018-08-28_10-01-53 --incremental-dir=/var/data/inc/2018-08-28_10-07-40/

把所有的完全备份合并到一起进行一次apply操作,回滚提交的数据

innobackupex --apply-log /var/data/2018-08-28_10-01-53/

模拟:将数据库里的内容删除

systemctl stop mariadb

mv /var/lib/mysql /var/lib/mysql.bak

mkdir /var/lib/mysql

恢复:

innobackupex --defaults-file=/etc/my.cnf --copy-back /var/data/2018-08-28_10-01-53/

chown -R mysql:mysql /var/lib/mysql

systemctl start maraidb

流备份以及压缩备份

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

innobackupex --stream=tar /data/backup/|gzip >/data/backup/`date +%F`.tar.gz

也可以使用如下命令将数据备份至其他服务器

innobackupex --default-file=/etc/my.cnf --stream=tar /backup | ssh [email protected] " cat -> /backups/date +%F_%H-%M-%S.tar"

同时也可将备份的数据文件存储到远程的主机,使用--remote-host来实现

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



Xtrabackup是由percona开发的一个开源软件,是使用perl语言完成的脚本工具,能够非常快速地备份与恢复mysql数据库,且支持在线热备份,备份时不影响数据读写

在备份的时候,备份工具主要执行两个任务来完成备份:

① 在后台启动一个日志拷贝线程。这个线程会监视InnoDB日志文件,当日志文件发生改变时,这个线程会将发生变化的数据块拷贝到备份目录下一个名为xtrabackup_logfile的文件中。这个操作是必要的,因为备份可能会持续很长时间,在数据库恢复时,需要所有从备份开始到结束的这些日志文件。

② 拷贝InnoDB数据文件到指定备份目录下。这不是一个简单的拷贝,备份工具打开并读取文件的方式类似InnoDB,通过读取文件目录并以页(page)为单位进行拷贝。

当数据文件拷贝结束时,xtrabackup会停止日志拷贝线程,并在指定备份目录中创建一个名为xtrabackup_checkpoints的文件,这个文件包含备份的类型、开始备份的日志序列号和结束备份的日志序列号。

 

Xtrabackup 下载地址:https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.13/source/tarball/percona-xtrabackup-2.4.13.tar.gz

解压安装过程省略。。。

 

innobackupex常用参数

复制代码

--compress:该选项表示压缩innodb数据文件的备份。
--compact: 创建一个不包含第二索引(除了主键之外的索引)的备份
--defaults-file=[MY.CNF] 配置文件的路径
--use-memory=#        这个参数用于在准备备份时,xtrabackup执行crash recovery所使用的内存大小。这个参数仅和--apply-log搭配时才生效。
--include:该选项表示使用正则表达式匹配表的名字[db.tb],要求为其指定匹配要备份的表的完整名称,即databasename.tablename。
--user:该选项表示备份账号。
--password:该选项表示备份的密码。
--port:该选项表示备份数据库的端口。
--host:该选项表示备份数据库的地址。
--databases:该选项接受的参数为数据名,如果要指定多个数据库,彼此间需要以空格隔开;如:"xtra_test dba_test",同时,在指定某数据库时,也可以只指定其中的某张表。如:"mydatabase.mytable"。该选项对innodb引擎表无效,还是会备份所有innodb表。此外,此选项也可以接受一个文件为参数,文件中每一行为一个要备份的对象。
--tables-file:该选项表示指定含有表列表的文件,格式为database.table,该选项直接传给--tables-file。
--socket:该选项表示mysql.sock所在位置,以便备份进程登录mysql。
--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线程会在备份完成的时候重启。
--rsync:该选项表示通过rsync工具优化本地传输,当指定这个选项,innobackupex使用rsync拷贝非Innodb文件而替换cp,当有很多DB和表的时候会快很多,不能--stream一起使用。
--history:该选项表示percona server 的备份历史记录在percona_schema.xtrabackup_history表。
--redo-only 当准备数据库的全备或合并增量备份时,需要指定这个参数。这个参数实际上执行的是xtrabackup --apply-log-only,会让xtrabackup跳过回滚节点,只做“redo”步骤。当数据库需要应用增量备份时,需要指定这个参数。
--no-timestamp        这个参数会让xtrabackup在备份的时候不创建带有时间格式的子文件夹。当指定了这个参数,备份会直接创建在指定的备份目录下。
--stream=STREAMNAME 指定流备份的格式。备份将会以指定格式输出到STDOUT。目前支持的格式有tar 和 xbstream。如果指定了这个参数,后面需要接tmpdir目录作为处理流的一个中间目录。
--incremental 创建增量备份,当指定这个参数的时候,应该指定--incremental-lsn或--incremental-basedir参数,否则将会备份到--incremental-basedir路径
--incremental-basedir 以上一次全量或增量备份的路径,作为增量备份的基础。指定这个参数的同时,应该同样指定--incremental参数
--incremental-dir:该选项表示增量备份的目录。
--incremental-force-scan:该选项表示创建一份增量备份时,强制扫描所有增量备份中的数据页。
--incremental-lsn:该选项表示指定增量备份的LSN,与--incremental选项一起使用。
--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。
--close-files:该选项表示关闭不再访问的文件句柄,当xtrabackup打开表空间通常并不关闭文件句柄目的是正确的处理DDL操作。如果表空间数量巨大,这是一种可以关闭不再访问的文件句柄的方法。使用该选项有风险,会有产生不一致备份的可能。

复制代码

全备及本地或者异地恢复过程

备份

innobackupex --defaults-file=/data/mysql_data/3307/my_3307.cnf /data/backups/ --user=root -H127.0.0.1 -P3307 --password=***
--defaults-file:mysql配置文件。不指定默认为 /etc/my.cnf
/data/backups/ 备份文件要写入的目录,会创建一个以时间格式为名的目录2019-02-13_15-19-58

恢复

复制代码

1、本地恢复的话 要先关闭数据库,并且删除数据文件,确保数据目录为空
innobackupex --defaults-file=/data/mysql_data/3307/mysql_3307.cnf --use-memory=4G --apply-log /data/backups/2019-02-13_15-19-58
--apply-log的作用是通过回滚未提交的事务及同步已经提交的事务至数据文件使数据文件处于一致性状态

2、innobackupex --defaults-file=/data/mysql_data/3307/mysql_3307.cnf --copy-back /data/backups/2019-02-13_15-19-58
--copy-back,即把备份文件拷贝至原数据目录下。

3、修改数据目录权限
chown mysql.mysql /data/mysql_data/3307/data -R

复制代码

相关备份binlog点都存在下图中,用作主从同步及记录,数据库启动后根据文件中的点从做主备的相关参数即可


 以上流程也适合异地恢复及做主从同步,把备份目录scp到远程服务器目录,再执行第二三步即可

 增备及本地或者异地恢复过程

注意:innobackupex 增量备份仅针对InnoDB这类支持事务的引擎,对于MyISAM等引擎,则仍然是全备。

1、增量备份:增量备份需要基于全备

innobackupex --defaults-file=/data/mysql_data/3307/my_3307.cnf 
--user=root -H127.0.0.1 -P3307 
--password=*** --incremental /data/backups 
--incremental-basedir=/data/backups/2019-02-13_15-19-58
--incremental-basedir     指向全量备份目录
--incremental             指向增量备份的目录
上面语句执行成功之后,会在--incremental执行的目录下创建一个时间戳子目录
可以持续做增量备份
只需要把--incremental-basedir 的目录指向上一次增量备份的目录即可


2、增量备份恢复
innobackupex --apply-log --redo-only 
--defaults-file=/data/mysql_data/3307/mysql_3307.cnf --use-memory=2G 
 /data/backups/INCREMENTAL-DIR(2019-02-13_15-19-58)
innobackupex --apply-log --redo-only 
--defaults-file=/data/mysql_data/3307/mysql_3307.cnf --use-memory=2G 
/data/backups/2019-02-13_15-19-58 --incremental-dir=INCREMENTAL-DIR-1  
innobackupex --apply-log --redo-only 
--defaults-file=/data/mysql_data/3307/mysql_3307.cnf --use-memory=2G 
/data/backups/2019-02-13_15-19-58 --incremental-dir=INCREMENTAL-DIR-2  
多个备份往后以此类推

INCREMENTAL-DIR:全备目录

INCREMENTAL-DIR-1:增备目录1

INCREMENTAL-DIR-2:增备目录2

。。。

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

innobackupex --defaults-file=/data/mysql_data/3307/mysql_3307.cnf --use-memory=2G --apply-log /data/backups/2019-02-13_15-19-58

innobackupex --defaults-file=/data/mysql_data/3307/mysql_3307.cnf --copy-back /data/backups/2019-02-13_15-19-58

3、修改数据目录权限启动即可