暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL tips(二十三)——备份与恢复

爱可可的人生记录仪 2020-03-26
406

备份类型

热备、温备(锁表备份)、冷备(业务关闭下备份)

备份工具

mysqldump

    mysqldump -uroot -p123 -A >/back/full.sql (全备)
    mysqldump -uroot -p123 -B test zabbix >/back/db.sql (库备份)
    mysqldump -uroot -p123 city js tj >/back/tab.sql (表备份)
    复制


    常用备份参数

    -R 备份存储过程和函数

    -E 事件

    --triggers 触发器

    --master-data=2 记录备份时刻的binlog信息,记得加上single-transaction,innodb备份就不会锁表

    --single-transaction 对于innodb的表进行一致性快照备份,不锁表,其他的还是会锁表。

    扩展参数

    --set-gtid-purged=AUTO/ON 构建主从时使用,默认即可

    --max_allowed_packet=128M 控制备份时传输数据包的大小


    恢复案例:

    环境:mysql 5.7.26 ,数据量30G

    备份策略:每天23点mysqldump全备

    故障点:周三上午6点30数据库故障 

    思路:

    1.停业务,挂维护,避免二次伤害

    2.找临时库,恢复周二23点的全备

    3.截取周二23点到故障点的binlog,恢复到临时库

    4.直接顶替生产库,如果只是误删,只要从临时库导出数据到生产库即可(恢复时记得暂时关闭sql_log_bin)。

    5.测试检验然后开启业务


    物理备份(XBK)

    innobackupex

    非innodb,锁表备份,copy表文件。

    innodb表,立即触发checkpoint,记录LSN,copy数据文件,并且将备份过程中新产生的数据的redo一起备份走,并记录LSN。在恢复时,调用innodb的CSR过程,将数据和redo的LSN追平,然后进行一致性恢复。

    全备和恢复

      innobackupex --user=root --password=123 --no-timestamp backup/full
      innobackupex --apply-log back/full
      复制


      常用参数:

      --slave-info    备份目录下会多生成一个xtrabackup_slave_info 文件, 这里会保存主日志文件以及偏移

      --defaults-file    备份数据库的配置文件my.cnf的路径

      2>$backupdir/backup.log    备份日志,将备份过程中的输出信息重定向到log


      备份产生文件

      xtrabackup_binlog_info 二进制信息,可作为截取起点

      xtrabackup_checkpoints

      from:备份中包含的LSN号起点,全备:0,增量:上次备份的结束位置

      to:ckpt时的LSN

      last:备份结束时的LSN,下次增量备份的起点(LSN-9)


      增备和恢复

        初增必须在全备基础上,备份目录要为空
        innnobackupex --user=root --password=123 --no-timestamp --incremental --incremental-basedir=/backup/full backup/incr1
        二增
        innnobackupex --user=root --password=123 --no-timestamp --incremental --incremental-basedir=/backup/incr1 /backup/incr2
        复制

        恢复案例:

        环境:mysql 5.7.26 ,数据量30G

        备份策略:周日23点XBK全备,其他每天增备

        故障点:周三上午6点30数据库故障 

        思路:

        1.停业务,挂维护,避免二次伤害

        2.找临时库,查找可用备份full+incr1+incr2

        3.binlog,incr2到故障点的binlog,恢复

        4.直接顶替生产库,如果只是误删,只要从临时库导出数据到生产库即可(恢复时记得暂时关闭sql_log_bin)。

        5.测试检验然后开启业务


        主要操作:

        整理full,合并inc1到full,合并inc2到full,最后整理

        #--redo-only 整理全备和所有增量合并时(除了最后一次增量)用

          innobackupex --apply-log --redo-only /backup/full
          innobackupex --apply-log --redo-only --incremental-dir=/backup/incr1 /backup/full
          innobackupex --apply-log --incremental-dir=/backup/incr2 /backup/full
          innobackupex --apply-log /backup/full
          截取binlog
          起点:cat incr2/xtrabackup_binlog_info
          mysql-bin.000879 431 cd8d6766-6de6-11e8-80ca-fa163e468042:1-24,
          fc66187a-5e96-11e8-9023-fa163e3143f8:1-2
          终点:mysqlbinlog --skip-gtids --include-gtids='cd8d6766-6de6-11e8-80ca-fa163e468042:25-100' mysql-bin.000879 >/backup/binlog.sql
          复制


          题外话:数据库的备份非常重要,身为DBA的话,每天的第一件事其实应该是检查备份可用性(看备份日志,检查备份文件),同时要记得定期的恢复演练。最近想搞搞短视频了,毕竟B站元老级用户,一直不下海着实说不过去,现在想想,读大学的时候怎么什么都想不到呢?真的是人生呐。。。


          文章转载自爱可可的人生记录仪,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

          评论