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

    在实际生产环境中,数据是至关重要的。如何将数据实现安全冗余,在出现意外或灾害时快速恢复数据是挽救一个公司的关键所在。那么,定期备份数据是一个基本的工作。

    备份的类型:

      根据备份的数据量可分为:

        完全备份:备份整个数据集

        部分备份:备份部分数据集

        增量备份:仅备份最近一次完全备份或增量备份(如果存在的话)以来变化的数据

          缺点:由于可能存在多个增量,恢复时较麻烦

        差异备份:仅备份最近一次完全备份以来变化的数据

          缺点:数据量大的话,比较浪费磁盘空间

      根据备份的方式可分为:

        物理备份:直接复制数据文件进行备份

        逻辑备份:与存储引擎无关,从数据库中“导出”数据另存而进行的备份

      根据备份时数据的可用状态可分为:

        热备:备份时,数据可读可写

        温备:备份时,数据仅可读

        冷备:备份时,数据不可读写

    备份时需要考虑的要点:

      ①能容忍最多丢失多少数据

      ②恢复数据需要的时长

      ③需要恢复哪些数据

      ④根据备份的数据量选择合适的工具

      ⑤mysql的二进制日志至关重要,一定要留存好以便实现基于时间点的还原

    接下来将陈述一下基于mysqldump,xtrabackup进行数据备份和恢复。

      一、mysqldump

      是MySQL自带的适合所有存储引擎的逻辑备份工具,支持完全和部分备份,支持温备,对InnoDB支持热备

    mysqldump [options] db_name [tb1_name,...] (不会自动创建数据库)
    mysqldump [options] --databases db_name ...
    mysqldump [options] --all-databases

      常用的选项:

    -uUSERNAME  //备份时的用户
    -pPASSWORD  //备份时用户的密码
    -E,--events  //备份指定数据库相关的所有事件调度器
    -R,--routines  //备份指定数据库相关的存储过程和存储函数
    --[skip-]triggers  //(不)备份相关的触发器
    --master-data[=#]
        1:记录为不被注释的CHANGE MASTER TO语句;
        2.记录为注释的CHANGE MASTER TO语句;(一般用2)
    --flush-logs  //锁定表完成后,执行flush logs命令;
    
    //温备的选项,先锁定备份库,再启动备份操作(MyISAM和InnoDB)
        --lock-all-tables  //锁定所有库的所有表(生产环境慎用)
        --lock-tables  //对某个单独数据库的所有表进行锁定
    热备的选项
        --single-transaction  //启动一个巨大的事务

      二、xtrabackup

      是由Percona提供的支持对InnoDB做热备(物理备份)的工具,可实现完全备份、增量备份。  

      备份命令:xtrabackup

      推荐使用:innobackupex(对xtrabackup做了二次封装的perl script),相对简洁轻量;

      创建备份恢复的用户(基于最小权限)

    MariaDB [(none)]> CREATE USER 'backupuser'@'192.168.1.102' IDENTIFIED BY 'backuppass';
    
    MariaDB [(none)]> GRANT RELOAD,LOCK TABLES,REPLICATION CLIENT ON *.* TO 'backupuser'@'192.168.1.102';
    
    MariaDB [(none)]> FLUSH PRIVILIGES;

      ①完全备份

    innobackupex --user=DBUSE --password=DBUSEPASS /path/to/BACKUP-DIR/

      基于完全备份恢复前的整理操作:

    innobackupex --apply-log /path/to/Backup-Dir(备份文件所在的目录)
    //整理无误出现“Completed OK”后,可执行完全备份的恢复操作:
    innobackupex --copy-back /path/to/Backup-Dir(整理后的备份文件目录)
    //注意:执行innobackupex --copy-back命令时不需要启动mysql服务,停止之前配置好mysql的数据目录即可。恢复数据成功后不要忘记将数据文件的属主属组改为mysql

      ②增量备份

    innobackupex --incremental /backup --incremental-basedir=BASEDIR
    
    /*其中,BASEDIR指的是完全备份所在的目录。
        此命令执行结束后,innobackupex命令会在/backup目录中创建一个新的以时间命名的目录已存放所有的增量备份数据。
        另外,执行过增量备份后再次执行时,其--incremental-basedir应该指向上一次的增量备份所在的目录
    
    注意:增量备份仅能应用于InnoDB和XtraDB为存储引擎的表;对于MyISAM表而言,执行增量备份其实进行的是完全备份*/

      基于完全备份和增量备份恢复前的整理操作:

    /*与完全备份恢复时整理操作的不同:
    (1)需要在每个备份(包括完全和各个增量备份)上,将已经提交的事务进行“重放”。“重放”之后,所有的备份数据将合并到完全备份上。
    (2)基于所有的备份将未提交的事务进行“回滚”。*/
    
    //于是,执行整理的命令:
    innobackupex --apply-log --redo-only BASE-DIR
    //接着执行
    innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-1
    //而后是第二个增量:
    innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-2
    //其中,BASE-DIR指的是完全备份所在目录,而INCREMENTAL-DIR-1指的是第一次增量备份的目录,INCREMENTAL-DIR-2指的是第二次增量备份的目录,依此类推,如果有多个增量备份,每一次都要执行如上操作。
    
    //整理无误后,执行恢复数据操作:
    innobackupex --copy-back /path/to/Backup-Dir(整理后的备份文件目录)

        

      

  • 相关阅读:
    web前端(4)—— 常用标签1
    web前端(3)—— html标签及web页面结构
    web前端(2)—— 前端技术介绍
    web前端(1)——了解什么是前端,以及与后端的关系
    数据库之redis篇(2)—— redis配置文件,常用命令,性能测试工具
    数据库之redis篇(1)—— redis数据库安装,简单使用
    数据库之mysql篇(6)—— mysql常用函数函数/自定义函数
    洗礼灵魂,修炼python(91)-- 知识拾遗篇 —— pymysql模块之python操作mysql增删改查
    LINUX新建和增加SWAP分区
    Configuring SSL for SAP Host Agent on UNIX
  • 原文地址:https://www.cnblogs.com/trymybesttoimp/p/6416343.html
Copyright © 2011-2022 走看看