zoukankan      html  css  js  c++  java
  • MySQL基于mysqldump及lvmsnapshot备份恢复

    一、备份对象

    数据

    配置文件

    代码:存储过程,存储函数,触发器

    跟复制相关的配置

    二进制日志文件

    二、备份工具

    • mysqldump:逻辑备份工具

        InnoDB热备、MyISAM温备、Aria温备

        备份和恢复过程较慢

        mysqldumper:多线程的mysqldump

        很难实现差异或增量备份

    • lvm-snapshot:

    接近于热备的工具:因为要先请求全局锁,而后创建快照,并在创建快照完成后释放全局锁

    使用copy、tar等工具进行物理备份

    备份和恢复速度较快

    很难实现增量备份,并且请求全局锁需要等待一段时间,在繁忙的服务器上尤其如此

    • Innobase:商业备份工具,innobackup

        Xtrabackup:由Percona提供的开源备份工具

        InnoDB热备,增量备份

        MyISAM温备,不支持增量备份

        物理备份,速度快

    • mysqlhotcopy:几乎冷备

    三、mysqldump(适用数据量5G以下)

    备份单个库,恢复时如果目标库不存在,需要手动创建

    mysqldump [OPTIONS] database [tables]

    备份指定的多个库

    mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]

    备份所有库

    mysqldump [OPTIONS] --all-databases [OPTIONS]

    注意:备份前要加锁(下面两个不要同时使用)

    --lock-all-tables:请求锁定所有表之后再备份,对MyISAM、InnoDB、Aria做温备

    --single-transaction:能够对InnoDB存储引擎实现热备

    备份代码:

    --events:备份事件调度器代码

    --routines:备份存储过程和存储函数

    --triggers:备份触发器

    备份时滚动日志:

    --flush-logs:备份前、请求到锁之后滚动日志

    复制时的同步位置标记:

    --master-data=[0|1|2]

    0:不记录

    1:记录为CHANGE MASTER语句

    2:记录为注释的CHANGE MASTER语句

    使用mysqldump备份:

    请求锁:--lock-all-tables或使用--single-transaction进行InnoDB热备

    滚动日志:--flush-logs

    选定要备份的库:--databases

    记录二进制文件及为位置:--master-data=2

    mysqldump --databases fansik --lock-all-tables --flush-logs > fansik.sql

    或者

    mysqldump --databases fansik --single-transaction --flush-logs > fansik.sql

    具体操作:

    恢复:

    建议:关闭二进制日志,关闭其他用户连接

    备份策略:基于mysqldump

    备份:mysqldump+二进制日志文件

          周日做一次完全备份:备份的同时滚动日志

          周一至周六:备份二进制日志

    恢复:

         完全备份+各二进制日志文件中至此刻的事件

         对于MySQL配置文件,以及与MySQL相关的配置文件再每次修改后都应该直接进行备份

    四、lvm-snapshot:基于LVM快照的备份

    1、事务日志跟数据文件文件必须在同一个卷上;

    2、创建快照之前,要请求MySQL的全局锁;在快照创建完成之后释放锁;

    3、请求全局锁完成之后,做一次日志滚动;做二进制日志文件及位置标记(手动进行);

    五、lvm-snapshot备份步骤

    1、请求全局锁,并滚动日志

    mysql> FLUSH TABLES WITH READ LOCK;

    mysql> FLUSH LOGS;

    2、做二进制日志文件及位置标记(手动进行);

    # mysql -e 'show master status' > /tmp/fansik

    3、创建快照卷

    # lvcreate -L 100M -s -n fansik -p r /path/ fansik_lv

    4、释放全局锁

    mysql> UNLOCK TABLES;

    5、挂载快照并备份

    cp

    6、备份完成之后删除快照卷(卸载)

    六、lvm-snapshot恢复步骤

    1、二进制日志保存好,提取备份之后的所有事件至某sql脚本中

    2、还原数据,修改权限及属主数组等,并启动mysql

    3、座即时点还原

  • 相关阅读:
    为什么java使用对象序列化到文件,打开之后是乱码,而且更换编码格式查看也不能正常显示呢
    String类能够导入IDEA,但是里面的构造方法无法使用,一直显示报错
    IDEA不能提示导入java.io.File类,但是自己手写import没问题,最后找到了问题所在
    扑克牌发牌,排序的功能实现
    TFS 生成定义
    Git-tfs工具
    日期和时间
    调用惯例
    优化查找和排序
    使用更好的库
  • 原文地址:https://www.cnblogs.com/fansik/p/5564004.html
Copyright © 2011-2022 走看看