mysql Xtrabackup 在线物理备份及恢复

Xtrabackup是由percona开发的一个开源软件,是使用perl语言完成的脚本工具,可以很是快速地备份与恢复mysql数据库,且支持在线热备份,备份时不影响数据读写
在备份的时候,备份工具主要执行两个任务来完成备份:
① 在后台启动一个日志拷贝线程。这个线程会监视InnoDB日志文件,当日志文件发生改变时,这个线程会将发生变化的数据块拷贝到备份目录下一个名为xtrabackup_logfile的文件中。这个操做是必要的,由于备份可能会持续很长时间,在数据库恢复时,须要全部从备份开始到结束的这些日志文件。
② 拷贝InnoDB数据文件到指定备份目录下。这不是一个简单的拷贝,备份工具打开并读取文件的方式相似InnoDB,经过读取文件目录并以页(page)为单位进行拷贝。
当数据文件拷贝结束时,xtrabackup会中止日志拷贝线程,并在指定备份目录中建立一个名为xtrabackup_checkpoints的文件,这个文件包含备份的类型、开始备份的日志序列号和结束备份的日志序列号。
 
解压安装过程省略。。。
 
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操做。若是表空间数量巨大,这是一种能够关闭再也不访问的文件句柄的方法。使用该选项有风险,会有产生不一致备份的可能。

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

备份正则表达式

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

恢复sql

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的做用是经过回滚未提交的事务及同步已经提交的事务至数据文件使数据文件处于一致性状态 二、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等引擎,则仍然是全备。
 
  
一、增量备份:增量备份须要基于全备
 
  
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)
  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-1  
  2. 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  
  3. 多个备份日后以此类推
 
  
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
 
  
三、修改数据目录权限启动便可
相关文章
相关标签/搜索