lYong90

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

1、innobackupex备份原理

1、innobackupex启动并fork一个进程启动xtrabackup,然后等待xtrabackup备份InnoDB文件;
2、xtrabackup备份时存在两个线程,一个负责复制redo,一个负责复制ibd文件;
    redo复制线程先启动,从最新checkpoint开始顺序复制redo
    数据复制线程在redo线程后启动,负责复制ibd文件,innobackupex一直处于等待状态
3、xtrabackup拷贝完成idb后,通知innobackupex,同时自己进入等待,redo线程仍然继续复制redo;
4、innobackupex收到xtrabackup通知后,执行FLUSH TABLES WITH READ LOCK(FTWRL),取得一致性位点,然后开始备份非InnoDB文件;
    包括 frm、MYD、MYI、CSV、opt、par等文件,此时数据库全局只读状态非InnoDB表比较多的话时间可能会比较长
5、当innobackupex拷贝完所有非InnoDB表文件后,通知xtrabackup,同时自己进入等待;
6、xtrabackup收到innobackupex备份完非InnoDB通知后,就停止redo拷贝线程,然后通知innobackupex日志复制完成;
7、innobackupex收到redo备份完成通知后,就开始解锁,执行UNLOCK TABLES;
8、innobackupex和xtrabackup进程各自完成收尾工作,如资源的释放、写备份元数据信息等,innobackupex等待xtrabackup子进程结束后退出。

 

 

2、常用参数说明

常用参数:
--user=USER                     #指定备份用户,不指定的话为当前系统用户
--password=PASSWD               #指定备份用户密码
--port=PORT                     #指定数据库端口
--defaults-group=GROUP-NAME     #在多实例的时候使用
--host=HOST                     #指定备份的主机,可以为远程数据库服务器
--apply-log                     #回滚日志
--database                      #指定需要备份的数据库,多个数据库之间以空格分开
--defaults-file                 #指定mysql的配置文件
--copy-back                     #将备份数据复制回原始位置
--incremental                   #增量备份,后面跟要增量备份的路径
--incremental-basedir=DIRECTORY #增量备份时使用指向上一次的增量备份所在的目录
--incremental-dir=DIRECTORY     #增量备份还原的时候用来合并增量备份到全量,用来指定全备路径
--redo-only                     #对增量备份进行合并
--rsync                         #加快本地文件传输,适用于non-InnoDB数据库引擎。不与--stream共用
--safe-slave-backup             #会暂停slave的sql线程,待备份结束后再启动
--no-timestamp                  #生成的备份文件不以时间戳为目录.
--slave-info                    #打印二进制日志的position和主库的名字,写入xtrabackup_slave_info文件

3、全量备份与恢复

##全量备份
innobackupex --defaults-file=/data01/3306/my3306.cnf --user=root --password=root  --socket=/data01/3306/run/mysql.sock  /data01/3306/backup
##全量恢复
innobackupex --apply-log /data01/3306/backup/2018-08-14_21-02-01
##将恢复的数据文件复制到datadir
innobackupex --defaults-file=/data02/3307/my3307.cnf  --user=root --password=root --copy-back /data01/3306/backup/2018-08-14_21-02-01

4、增量备份与恢复

xtrabackup是支持增量备份的,但是只能对InnoDB做增量,InnoDB每个page有个LSN号,LSN是全局递增的,page被更改时会记录当前的LSN号,每次备份会记录当前备份到的LSN(xtrabackup_checkpoints文件中),增量备份就是只拷贝LSN大于上次备份的page,比上次备份小的跳过,每个ibd文件最终备份出来的是增量 delta 文件。
MyISAM 是没有增量的机制的,每次增量备份都是全部拷贝的。
增量备份过程和全量备份一样,只是在ibd文件拷贝上有不同。

##全量备份
innobackupex --defaults-file=/data01/3306/my3306.cnf --user=root --password=root  --socket=/data01/3306/run/mysql.sock  /data01/3306/backup
##增量备份
innobackupex --defaults-file=/etc/my.cnf --user=root --password=root --socket=/tmp/mysql.sock --incremental /data01/3306/backup/incr --incremental-basedir=/data01/3306/backup/2018-08-14_21-02-01 --parallel=2
innobackupex --defaults-file=/etc/my.cnf --user=root --password=root --socket=/tmp/mysql.sock --incremental /data01/3306/backup/incr --incremental-basedir=/data01/3306/backup/incr/2018-08-14_22-02-01 --parallel=2
##增量恢复
--全量恢复
innobackupex --apply-log --redo-only /data01/3306/backup/2018-08-14_21-02-01
##将增量1应用到完全备份##
innobackupex --apply-log --redo-only /data01/3306/backup/2018-08-14_21-02-01 --incremental-dir=/data01/3306/backup/incr/2018-08-14_22-02-01
##将增量2应用到完全备份,注意不加 --redo-only 参数了##
innobackupex --apply-log /data01/3306/backup/2018-08-14_21-02-01 --incremental-dir=/data01/3306/backup/incr/2018-08-14_23-02-01
##把所有合在一起的完全备份整体进行一次apply操作,回滚未提交的数据##
innobackupex --apply-log /data01/3306/backup/2018-08-14_21-02-01

 

posted on 2018-08-16 15:28  lYong90  阅读(148)  评论(0编辑  收藏  举报