xtrabackup备份(MySQL备份)与恢复

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


   

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;sql

建立存放备份文件的目录数据库

mkdir -pv /var/data服务器

进行数据库全量备份:

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

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

total 18460socket

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

-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 user@www.magedu.com " cat -> /backups/date +%F_%H-%M-%S.tar"

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

innobackupex --remote-host=root@www.magedu.com /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

恢复

复制代码

一、本地恢复的话 要先关闭数据库,而且删除数据文件,确保数据目录为空
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的做用是经过回滚未提交的事务及同步已经提交的事务至数据文件使数据文件处于一致性状态

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

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

复制代码

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


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

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

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

一、增量备份:增量备份须要基于全备

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 的目录指向上一次增量备份的目录便可


二、增量备份恢复
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

三、修改数据目录权限启动便可
相关文章
相关标签/搜索