美文网首页数据库
8 增量备份xtrabackup

8 增量备份xtrabackup

作者: Kokoronashi | 来源:发表于2019-01-29 13:54 被阅读33次

    增量备份xtrabackup

    MySQL 备份工具

    物理备份缺点

    1. 跨平台性差
    2. 备份时间长,冗余备份,浪费存储空间

    mysqldump 备份缺点

    1. 效率较低,备份和还原速度慢
    2. 备份过程中,数据插入和更新操作会被挂起

    XtraBackup工具

    优点

    1. 备份过程中不锁库表,适合生产环境
    2. 由专业组织Percona提供( 改进MySQL分支 )

    主要组件

    1. xtrabackup: C程序,支持InnoDB/XtraDB
    2. innobackupex: 以Perl脚本封装xtrabackup,支持MyISAM

    安装 Xtrabackup

    通过官方源安装

    #安装Percona官方源
    yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
    #安装 xtrabackup 2.4版本,不同版本支持不同版本的MySQL
    yum install  percona-xtrabackup-24 -y
    #查看版本
    xtrabackup --version
    

    xtrabackup: recognized server arguments: --server-id=101 --log_bin=/logdir/rz --datadir=/var/lib/mysql
    xtrabackup version 2.4.13 based on MySQL server 5.7.19 Linux (x86_64) (revision id: 3e7ca7c)

    #查看安装rpm包
    rpm -qa |grep percona
    #查看RPM包安装文件
    rpm -ql percona-xtrabackup-24
    

    基本参数

    常用选项 含义
    --host 主机名
    --user 用户名
    --port 端口号
    --password 密码
    --databases 数据库名
    --no-timestamp 不用日期命名备份文件存储的子目录名
    多库语法 说明
    --databases="库名" 单个库
    --databases="库1 库2" 多个库
    --databases="库.表" 单个表

    进阶参数

    常用选项 含义
    --redo-only 日志合并
    --apply-log 准备还原(回滚日志)
    --copy-back 恢复数据
    --incremental 目录名 增量备份
    --incrementtal-basedir=目录名 增量备份时,指定上一次备份数据存储的目录名
    --incremental-dir=目录名 准备恢复数据时,指定增量备份数据存储的目录名
    --export 导出表信息
    --import 导出表空间

    Innobackupex应用案例

    完全备份

    1. 将所有库完全备份到 /backup
    innobackupex --user root --password 123123 /allbak [--no-timestamp]
    

    xtrabackup 不能备份MySIAM表

    innobackupex 封装了xtrabackup,可以增量备份 innodb ,但是mysiam是全量备份

    1. 备份指定库
    innobackupex --user root --password 123123 --databases="buydb mysql" /twodbbak [--no-timestamp]
    
    1. 备份指定表所有数据
    innobackupex --user root --password 123123 --databases="buydb.a" /opt/a --no-timestamp
    
    1. 要求数据库目录为空,才可以恢复数据.生产环境一般使用全备.恢复时,缺少系统三个库时会无法启动.
    innobackupex --user root --password 123123 --databases="mysql sys performance_schema buydb" /opt/buydbfull --no-timestamp
    

    完全恢复

    要求数据库目录为空

    1. 重做日志 --apply-log
    2. 恢复数据 --copy-back
    3. 重启数据库服务
    #重做日志 
    innobackupex --user root --password 123123 --apply-log /opt/buydbfull/
    
    #xtrabackup_checkpoints 文件中 backup_type 会从 backed变化为 prepared
    cat /opt/buydbfull/xtrabackup_checkpoints 
    backup_type = full-prepared
    
    #停止数据库,清空数据目录,否则无法恢复
    systemctl stop mysqld
    rm -rf /var/lib/mysql/*
    
    #恢复数据,修改文件所有者
    innobackupex --copy-back /opt/buydbfull/
    chown -R mysql. /var/lib/mysql
    
    #启动mysqld,查看
    systemctl start mysqld
    

    增量备份

    做首次备份(完全备份)

    innobackupex --user root --password 123123 --databases="mysql sys performance_schema buydb" /fullbuydb --no-timestamp
    

    写入新数据,第一次增量备份

    --incremental 执行增量备份文件存储目录

    --incremental-basedir= 上次备份文件存储目录

    innobackupex --user root --password 123123 --databases="mysql sys performance_schema buydb" --incremental /new1dir --incremental-basedir=/fullbuydb --no-timestamp
    

    写入新数据,第二次增量备份

    innobackupex --user root --password 123123 --databases="mysql sys performance_schema buydb" --incremental /new2dir --incremental-basedir=/new1dir --no-timestamp
    

    生产环境中定时执行,

    00 23 * * 1 /shell/allbak.sh    完全备份innobackupex,每周1执行
    00 23 * * 2-7 /shell/newdata.sh 增量备份innobackupex,周二到周日执行
    

    工作原理 innodb 和 xtrdb 有效

    增量备份工作原理

    事务日志文件的LSN,每次增量备份都会记录每次的LSN范围值.

    ib_logfile0 正确完成的sql命令

    ib_logfile1 正确完成的sql命令

    ibdata1 未提交的sql命令

    LSN 日志序列号 增量备份lsn记录在 xtrabackup_checkpoints

    每一条命令有一个 LSN

    增量恢复

    --incremental-dir= 增量备份目录名

    1. 重做并合并日志 --apply-log --redo-only

    2. 停止服务,清空数据目录

    3. 恢复数据

    #合并增量备份的日志,范围取自 lsn值
    innobackupex --apply-log --redo-only /fullbuydb/
    innobackupex --apply-log --redo-only /fullbuydb/ --incremental-dir=/new1dir
    innobackupex --apply-log --redo-only /fullbuydb/ --incremental-dir=/new2dir
    #停止服务清空数据目录
    systemctl stop mysqld
    rm -rf /var/lib/mysql/*
    
    #恢复数据
    innobackupex --copy-back /fullbuydb/
    chown mysql. /var/lib/mysql -R
    systemctl start mysqld
    

    完全备份文件中恢复某个表

    --export 导出表信息

    恢复步骤

    1. 从备份数据利导出表信息.
    #全备中导出buydb库下表信息
    innobackupex --apply-log --export /buydbfull2 --no-timestamp
    
    #查看buydb库备份文件,新增 后缀为 .cfg 和 .exp 表信息文件
    ls /buydbfull2/buydb/
    a.cfg  a.exp  a.frm  a.ibd  b.cfg  b.exp  b.frm  b.ibd  db.opt
    
    1. 创建删除的表( 表结构要和删除时相同 )
    mysql> create table b(name char(10));
    
    1. 删除表空间

    alter table 库名.表名 discard tablespace;

    mysql> alter table buydb.b discard tablespace;
    
    1. 把导出的表信息文件拷贝到数据库目录下
    cp /buydbfull2/buydb/b.{cfg,exp,ibd} /var/lib/mysql/buydb/
    
    1. 修改所有者
    chown mysql. -R /var/lib/mysql
    
    1. 导入表空间

    alter table 库名.表名 import tablespace;

    mysql> alter table buydb.b import tablespace;
    
    1. 验证查看数据,删除无用表信息文件
    mysql> select * from buydb.b;
    rm -rf /var/lib/mysql/buydb/b.{exp,cfg};
    

    相关文章

      网友评论

        本文标题:8 增量备份xtrabackup

        本文链接:https://www.haomeiwen.com/subject/bmrxsqtx.html