• MySQL利用mysqlbinlog模拟增量恢复


    背景:本次的恢复操作是在另外一台MySQL实例上进行,不是在同一个实例中操作的。相当于生产的数据库恢复到一个全新的实例上了

    1 创建库表并插入数据 

    #创建库
    create database test;
    # 切换库
    use test;
    # 创建表 带有自动更新的时间戳,方便下面的实验
    CREATE TABLE t (
    	ID INT (10) NOT NULL AUTO_INCREMENT,
    	USER_NAME VARCHAR (50) DEFAULT '',
    	`CREATE_TIME` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    	`UPDATE_TIME` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    	PRIMARY KEY (id)
    ) ENGINE = INNODB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8 COMMENT = '测试表';
    
    # 插入数据,只插入ID 和 USER_NAME,时间戳有默认值会自动插入
    INSERT INTO t (ID, USER_NAME)
    VALUES
    	(1, '张三'),
    	(2, '李四'),
    	(3, 'zl'),
    	(4, 'yh'),
    	(5, 'jack')
    
    

     2 进行全量备份(模拟日常的数据库全量备份)

    mysqldump -uroot -proot -h10.238.162.31 --master-data=2  --single-transaction --databases test > /server/backup/test.sql

    3 全量备份之后进行数据的插入(模拟全量备份后数据库之后的改变)

    INSERT INTO t (ID, USER_NAME)
    VALUES
    	(6, 'rose'),
    	(7, 'nico')

     此时t表的数据如下,有7条数据

     

    4 利用这些备份恢复至数据库的最新状态(模拟现在的数据库服务器宕机不能启动或者数据被破坏,但是数据库做了异地备份,即有数据库的全量备份和日志备份。)

     首先在另一个MySQL实例上进行全量恢复

    mysql -uroot -proot < test.sql

    此时查看t表的数据是全量备份当时时间点的数据,没有全量备份之后的数据

    5 利用mysqlbinlog工具进行数据库增量恢复  

    首先查看全量备份文件中备份到那个点 

    利用这个binlog文件号和偏移量将数据库恢复至最新的状态 

    mysqlbinlog --start-position=2263  mysql-bin.000008 |mysql -uroot -proot

    查看数据已经恢复

  • 相关阅读:
    Hit Event 击中碰撞
    基于ReentrantLock通知唤醒的生产消费模式
    spring 源码构建
    读写分离、分库、分表
    python 反射的使用
    基础算法
    git 命令使用
    java设计模式应用
    linux 中python的使用
    linux命令
  • 原文地址:https://www.cnblogs.com/DBABlog/p/12926871.html
Copyright © 2020-2023  润新知