zoukankan      html  css  js  c++  java
  • mysql实时增量备份

    采用binlog日志的好处
      掌控所有更改操作,必要时可用于恢复数据
      数据库主从复制的必要条件

    [linyouyi@localhost~]# vim  /etc/my.cnf
    [mysqld]
    .. ..
    log-bin=mysql-bin                              //启用二进制日志,并指定前缀
    .. ..
    [linyouyi@dbsvr1 ~]# service mysqld restart

    确认binlog日志文件
    新启用binlog后,每次启动MySQl服务都会新生成一份日志文件:

    [linyouyi@localhost~]# ls /var/lib/mysql/mysql-bin.*
    /var/lib/mysql/mysql-bin.000001  /var/lib/mysql/mysql-bin.index

    清除binlog日志
      删除早前指定版本的binlog日志
        RURGE MASTER LOGS TO "binlog日志"
      删除所有binlog日志,重新新建日志
        RESET MASTETR

    分析binlog日志
      使用mysqlbinlog工具
        格式:mysqlbinlog [选项] 日志文件
      常用选项
        --start-datatime="YYYY-mm-dd HH:MM:SS"
        --stop-datatime="YYYY-mm-dd HH:MM:SS"
        --start-position=起止位置
        --stop-positon=结束位置

    [linyouyi@localhost ~]# mysqlbinlog /var/lib/mysql/mysql-bin.000002
    [linyouyi@localhost ~]# mysqlbinlog --start-datetime="2018-10-20 23:30" /var/lib/mysql/mysql-bin.000002

    利用binlog恢复数据
      基本方法
        使用mysqlbinlog提取历史SQL操作
        通过管道交给mysql命令重做
      案例
        重做第一份binlog所记录的更改操作
    执行指定Pos节点范围内的sql命令恢复数据
    根据上述日志分析,只要恢复从2018-10-12 20:40:50到2018-10-20 23:15:50之间的操作即可。可通过mysqlbinlog指定时间范围输出,结合管道交给msyql命令执行导入重做:

    [linyouyi@loclahost ~]# mysqlbinlog 
        --start-datetime="2018-10-12 20:40:50"  
        --stop-datetime="2018-10-20 23:15:50" 
        /var/lib/mysql/mysql-bin.000002 | mysql -u linyouyi -p
    Enter password:
    若是全部重做
    [linyouyi@loclahost ~]# mysqlbinlog  /var/lib/mysql/mysql-bin.000002 | mysql -u linyouyi -p
    Enter password:

    mysql备份工具
      mysqlhotcopy不足
        仅适用于MyISAM引擎的数据库
        备份过程中,数据插入和更新操作都会被挂起
      mysqldump不足
        效率较低,备份和还原速度慢
        备份过程中,数据插入和更新操作会被挂起
      XtraBackup工具
        在线热备份工具
        备份过程中不锁表,适合生产环境适用
        支持整体备份和增量备份
        组件一xtrabackup:C程序,支持InnoDB和XtraDB,不能备份数据表结构
        组件二innobackupex:以Perl脚本封装xtrabackup,还支持MyISAM,能备份数据表结构

    xtrabackup基本选项
    基本选项 解释
    --backup 执行备份操作
    --target-dir 备份到目标文件夹
    --datadir 备份的原始文件夹(Mysql库的位置)
    --prepare 准备恢复数据
    --increamental-basedir 增量备份时,指定参照的完整备份路径
    --incremental-dir 准备恢复目录时,指定增量备份的路径

     1)使用XtraBackup执行数据库备份

    [linyouyi@localhost~]# mkdir -p /backup/mysql
    [linyouyi@localhost~]# xtrabackup_56 –backup --datadir=/var/lib/mysql/ --target-dir=/backup/mysql/

    2)确认备份好的文件数据:

    [linyouyi@loclahost~]# ls /backup/mysql/

    3)做一个增量备份(基于前一步的完整备份)

    [linyouyi@localhost ~]# xtrabackup_56  --backup         #xtrabackup_55 是5.5版本,xtrabackup_56是5.6版本
        --datadir=/var/lib/mysql/ 
        --target-dir=/backup/inc01/ 
        --incremental-basedir=/backup/mysql/

    确认备份好的文件数据:

    [linyouyi@localhost~]# ls /backup/inc01/

    对比完整备份、增量备份的大小:

    [linyouyi@localhost~]# du -sh /backup/mysql/ /backup/inc01/
    11M     /backup/mysql/                                  //完整备份的大小
    264K    /backup/inc01/  

    准备用于恢复的数据库目录
    以/backup/mysql/可用来重建MySQL服务器。这种情况下,官方建议连做两次--prepare,以确保数据一致性:

    [linyouyi@localhost ~]# xtrabackup_56 --prepare --target-dir=/backup/mysql/ 
    [linyouyi@localhost ~]# xtrabackup_56 --prepare --target-dir=/backup/mysql/ 

    准备恢复“完整备份+增量备份”

    以/backup/mysql/用来重建MySQL服务器,但这种情况下需提前合并相关增量备份的数据:
    先准备完整备份目录,添加--apply-log-only仅应用日志:

    [linyouyi@loclahost ~]# xtrabackup_56  --prepare --target-dir=/backup/mysql --apply-log-only

    然后整合增量备份的数据,通过--incremental-dir选项指定增量位置:

    [linyouyi@localhost ~]# xtrabackup_56  --prepare 
        --target-dir=/backup/mysql --apply-log-only 
        --incremental-dir=/backup/inc01

    至此,已经把全量备份和增量备份合并了

    接着停止数据库,删除/var/lib/mysql/下的内容,拷贝数据

    [linyouyi@localhost home]# systemctl stop mariadb
    //删除/var/lib/mysql/下的内容
    [linyouyi@localhost home]# rm -rf /var/lib/mysql/*
    #[linyouyi@hadoop01 home]# innobackupex --defaults-file=/etc/my.cnf --copy-back /home/mysql --user=linyouyi --password=123456
    [linyouyi@localhost home]# xtrabackup --copy-back --target-dir=/home/mysql
    [linyouyi@localhost home]# chown -R mysql:mysql /var/lib/mysql/
    [linyouyi@localhost home]# systemctl start mariadb

    至此,数据已经恢复成功

  • 相关阅读:
    gridview列的汇总
    windows phone 页面传值(7)
    windows phone 获取手机图片库中图片(4)
    windows phone 使用相机并获取图片(3)
    windows phone 页面导航(6)
    windows phone 三种数据共享的方式(8)
    windows phone 独立存储空间的操作 (2)
    ref 和out传参的不同
    Web Service 实例
    关于DataList,Repeater,GridView的一些问题!! joe
  • 原文地址:https://www.cnblogs.com/linyouyi/p/9823266.html
Copyright © 2011-2022 走看看