zoukankan      html  css  js  c++  java
  • mysql_7 备份恢复

    mysql_7 备份恢复

    标签(空格分隔): mysql


    mysql数据损坏类型

    物理损坏

    硬盘损坏: 硬件 磁道 dd 格式化
    文件损坏: 数据文件损坏 redo损坏

    逻辑损坏

    drop
    delete
    truncate
    update

    dba 、运维在备份、恢复的职责

    设计备份和容灾的策略

    备份策略

    备份工具选择

    备份周期设计

    备份监控方法

    容灾策略

    备份:什么备份 主从  
    架构: 高可用 演示从库 灾备库
    

    定期的备份、容灾检查

    备份软件 -> 带库
    

    定期的故障恢复演练

    数据损坏时的恢复且快速恢复

    数据迁移工作

    mysql 常用备份工具

    • 逻辑备份方式

    mysqldump
    mydumper
    load data in file
    主从方式

    • 物理备份方式
      MySQL Enterprise Backup(企业版)
      Percona Xtrabackup (PBK,XBK)

    • 架构备份方式

    mysqldump mdp 应用

    逻辑备份工具 备份的是sql语句
    InnoDB 可以采取快照备份的方式。开启一个独立的事务,获取当前最新的一次性快照 放在临时表中 转换成sql语句(create database create table insert ) 保存到sql文件中

    非innodb表
    需要锁表备份 触发FTWARL 全局锁表 转换成sql语句(create database create table insert ) 保存到sql文件中

    mysqldump 核心参数

    连接参数
    -u #用户
    -p # 密码
    -h #host
    -P
    -S #指定socket

    备份参数
    -A #全部备份
    mysqldump -A -u root -p > /tmp/all.sql

    -B 备份1或多个库
    mysqldump -u root -p -B world test > /tmp/wt.sql

    备份单表或多表
    mysqldump -u root -p world city > /tmp/world_city.sql

    备份高级参数

    --master-data = 2

    场景:
    每周日 23:00 全备,周一到周六 binlog备份。所有备份时完整的。
    周三时,有一个核心运维人员删库操作。

    恢复全备 + 所有需要binlog恢复
    痛点:binlog 的 截取 起点和终点
    起点:寻找比较困难

     方法1: 最好备份的时间开启时,立即切割日志。  -F 刷新新的日志
     方法2: 备份开始时,自动记录日志文件信息 --master-data=2
    

    终点:drop之前的位置点。

    功能:
    1.备份时自动记录binlog信息
    2.自动锁表和解锁
    3.配合single transaction 可以减少 锁表时间。

    mysqldump -u root -p -A --master-data=2 > /tmp/full.sql

    #会在备份文件上多出
    CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.00005', MASTER_LOG_POS=355
    

    --single-transaction
    对于innodb引擎表备份时,开启一个独立事务,获取一致性的快照进行备份。 最好和--master-data=2 一起使用

    mysqldump -u root -p -A --master-data=2 --single-transaction > /tmp/full.sql


    -R -E --triggers

    -R #备份存储过程和函数
    -E #备份事件
    --triggers #触发器

    mysqldump -u root -p -A --master-data=2 --single-transaction -R -E --triggers > /tmp/full.sql


    --max_allowed_packet=64M

    mysqldump -u root -p -A --master-data=2 --single-transaction -R -E --triggers --max_allowed_packet=64M > /tmp/full.sql

    超出包的最大传输大小,注意:客户端和服务端都可以使用这个参数

    备份案例

    场景:
    基础环境: centos 7.6 + mysql 5.7 LNMT 网址业务 数据量100G
    备份策略: mysqldump每天全备, binlog定时备份
    故障: 核心业务库被误删除

    恢复思路:
    1.挂维护页
    2.找测试库
    3.恢复周二全备
    4.截取周二全备 然后恢复binlog日志
    5.测试业务功能正常
    6.恢复业务
    方案1: 故障库导回到原生产
    方案2: 直接用测试库充当生成库,先跑着。之后到导入到主业务库

    1.创建数据
    create database mdp charset utf8mb4;

    2.模拟备份
    mysqldump -u root -p -A --master-data=2 --single-transaction -R -E --triggers --max_allowed_packet=64M > /tmp/full_date + %F.sql

    3.再插入一些数据

    4.删除库
    drop database mdp;

    5.开始恢复
    检查全备的开始id
    vim full_时间.sql 找到下面开始的id
    -- change master to master_log_file

    6.恢复全备
    set sql_log_bin=0
    source /data/xxx.sql

    7.截取binlog
    起点:
    change master to master_log_file='mysql-bin.000019', MASTER_LOG_POS=788;

    终点

    show master status;
    show binlog events in 'mysql-bin.000020'
    找到drop之前的位置点

    position截取
    mysqlbinlog --skip-gtids --start-position=788 --stop-position=1275 /data/binlog/mysql-bin.000019 mysql-bin.000020 > /tmp/binlog.sql

    gtid截取
    起点中记录了
    set @@GLOBAL.GTID_PURGED='';

    mysqlbinlog --skip-gtids --include-gtids="开始的gtids:17-19" /data/binlog/mysql-bin.000019 mysql-bin.000020 > /tmp/binlog.sql

    8.恢复binlog
    set sql_log_bin = 0
    source /tmp/binlog.sql
    set sql_log_bin = 1

    比较

    SAS 硬盘 做 RAID 10
    磁盘阵列
    从硬件层面提高了可用性 速度快 成本高


    mysqldump 适合小数据量的
    可读性比较强 压缩比 节省空间
    备份时间相对较长 恢复时间长
    分布式架构 数据量较大时候,可以采取分布式备份,也可以选择mysqldump


    1、获得表结构
    # sed -e'/./{H;$!d;}' -e 'x;/CREATE TABLE `city`/!d;q'  full.sql>createtable.sql
    2、获得INSERT INTO 语句,用于数据的恢复
    # grep -i 'INSERT INTO `city`'  full.sqll >data.sql &
    3.获取单库的备份
    # sed -n '/^-- Current Database: `world`/,/^-- Current Database: `/p' all.sql >world.sql
    
  • 相关阅读:
    C# 桥接模式(Bridge)
    C# 中介者模式(Mediator)
    C# 命令模式(Command)
    C# 模板方法(TempleteMethod)
    C# 装饰模式(Decorate)
    C# 策略模式(Strategy)
    C# 职责链模式(Chain of Responsibility)
    C# 外观模式(Facade)
    C# 单例模式(Single)
    C# 原型模式(Prototype)
  • 原文地址:https://www.cnblogs.com/hywhyme/p/14572364.html
Copyright © 2011-2022 走看看