zoukankan      html  css  js  c++  java
  • mysql 数据库备份与恢复

    本文参考:mysql 官网 http://www.mysql.com/ 

    一、备份数据库的意义
    1.在系统崩溃、硬件故障或者用户误删数据的情况下,来恢复数据,不至于数据丢失造成巨大损失。
    2.在升级mysql server的时候,数据备份也是一项必要的保护措施。
    3.可以利用备份数据建立master-slave replication的从服务器。

    注:

    可以使用Mysql 企业版备份产品工具(购买)
    备份议题的论坛:http://forums.mysql.com/list.php?28
    Mysql client programs (备份程序):mysqldump mysqlhotcopy等

    二、备份方式的分类
    物理备份与逻辑备份

    物理备份:
    1)复制数据库目录下的数据原文件。
    2)适用于大数据量、重要数据库的备份。
    3)可以从问题中快速恢复
    特征:
    1)是对mysql data 目录的全部或者部分复制
    2)物理备份比逻辑备份更快速(只是文件的拷贝)
    3)输出更加简洁
    4)由于重要、大数据量数据库对速度和简洁性的要求高,因此mysql 企业版备份工具使用的是物理备份的方式。
    5)根据存储引擎的不同,备份恢复可能会拥有表级别的粒度、也可能没有表级粒度。例如,innodb类型的表可以存储为一组共享的文件、也可以各自存储为一组文件。而MyISAM的每个表只能对应单独的一组数据文件。
    6)数据库之外,物理备份会备份日志文件、配置文件等相关的一些文件。
    7)Memory table 中的数据很难备份,因为他的内容不在硬盘上面。(注:企业版sql 本分工具可以将数据从内从中取出来)
    8)备份文件仅仅对具有相同或相似特征的硬件机器来说是跨平台的
    9)一般情况下,备份之前应该先关闭mysql server。如果,要在mysql server运行的情况下进行备份,必须要加上合适的锁,以保证在备份期间server 不会改变数据库的内容。

    逻辑备份:
    1)保存数据库的结构(create statement)以及内容(insert statement)
    2)适用于小数据量的数据库备份
    特征:
    1)通过sql query 来获取大数据库的结构和内容。
    2)比物理备份慢,因为server 要访问数据库信息并将其转换为逻辑格式。
    3)备份输出比物理备份要更大,特别是被保存为文本格式的时候。
    4)Server 级 dabatase 级、table 级别上的备份与恢复粒度都是可用的。与存储引擎无关。
    5)备份不会包含日志、配置文件等。因其不是数据库的一部分。
    6)逻辑备份的恢复是与机器不相关的。
    7)逻辑备份工具:mysqldump 、select ...into outfile。并且对任何存储引擎都是有效的。
    8)可以使用 mysql 客户端程序执行sql statement进行备份恢复。

    在线备份与离线备份
    在线备份(hot backup):server runing 的时候进行备份
    特征:
    1)备份期间,对其它链接到server的client有较小的影响(可以继续访问数据)
    2)利用合适的锁,避免备份期间数据的修改,以保证备份的完整性。
    离线备份(cold backup):server stoped 之后进行数据备份
    特征:
    1)客户端会受到很大的使用影响,因为server 停止了。由于这个原因,冷备份通常使用(slave-server)进行备份。
    2)备份方式简单。

    本地备份和远程备份
    本地备份就是在mysql server运行的机器上进行备份。
    远程备份则是在非 server 机器上进行备份。
    备份工具:
    Mysqldump 可以连接本地和远程server
    Mysqlhotcopy 只能进行本地备份
    Select .. into outputfile 可以在本地和远程执行,但是备份输出在server端。

    快照备份(snapshot)


    完整备份和增量式备份
    完整备份
    包含了在一个时间点上mysql server所拥有的所有数据。
    增量式备份
    由给定时间跨度上的数据改变组成。
    使用增量式备份之前,必须要开启server binary log,二进制日志文件对数据的改变进行全程记录。

    完整备份恢复和增量式备份的恢复
    完整备份恢复
    使用完整备份会是 server instance 恢复到进行备份时间点的状态。如果在完整备份之后,数据又发生了改变,需要使用增量式备份进行继续回复,最终把server 实例恢复为最新的状态。
    增量式备份恢复
    因其记录了数据库当前到给定时间点的状态,又称为point-in-time 恢复。

    三、备份和恢复方法简介

    1.Making a Hot Backup with MySQL Enterprise Backup

    2.Making Backups with mysqldump or mysqlhotcopy

    3.Making Backups by Copying Table Files:需要stop server 或者FLUSH TABLES tbl_list WITH READ LOCK;

    4.Making Delimited-Text File Backups(只保存数据,没有表结构)

    5.Making Incremental Backups by Enabling the Binary Log(必须要开启 二进制日志)

    6.Making Backups Using Replication Slaves

    7.Recovering Corrupt Tables(If you have to restore MyISAM tables that have become corrupt, try to recover them using REPAIR TABLE or myisamchk -r first. That should work in 99.9% of all cases. If myisamchk fails, see Section 7.6, “MyISAM Table Maintenance and Crash Recovery”.)

    8.Making Backups Using a File System Snapshot

    四、使用mysqlsump工具 备份和恢复举例 (数据库完整备份+增量备份)

    数据备份:
    Mysqldump -uuser -p --single-transaction --flush-logs --master-data=2 database > d:database.sql
    命令执行之后,生成一份完整备份文件database.sql,同时生成要给全新的binary log file :bin_log.000005。那么bin_log.000005及其以后的日志文件记录了完整备份之后数据库的数据改变。


    (注:--single-transaction 把事务隔离级别设置为REPEATABLE-READ(可重复读,也是mysql事务的默认隔离级别,只对InnoDB引擎有用),并在备份数据之前 发送一个 start transaction 命令。
    重启mysql server ,执行Flush logs 命令, Mysqladmin flush-logs 或者mysqldump 的--flush-logs 选项 告诉服务器关闭当前正在使用的 binary log file并且使用一个新的binary log file。
    --master-data[=value] :默认值是1 会设置备份文件中生成 change master to 语句,在数据库文件进行备份恢复的时候,执行相关语句。 设置为2的时候,change master to 语句会以注释的形式写入备份文件。)

    数据恢复:
    1.完整备份恢复阶段
    Mysql> source d:database.sql
    2.增量式备份恢复阶段
    > mysqlbinlog bin_log.000005 bin_log.000006 ... | mysql

  • 相关阅读:
    完整安装always on 集群——转自菜鸟就是我
    markdown文件的基本常用编写语法-转自凌云之翼
    python基础学习DAY5——转自金角大王
    python基础学习DAY4——转自金角大王
    python函数返回局部变量,局部&全局变量同名问题
    python2.7和python3.6共存,使用pip安装第三方库
    理解if __name__ == '__main__':
    pycharm中查看快速帮助和python官方帮助文档
    python第三方库PIL安装的各种坑
    python2.7安装第三方库错误:UnicodeDecodeError: 'ascii' codec can't decode byte 0xcb in position 0
  • 原文地址:https://www.cnblogs.com/ahguSH/p/7229772.html
Copyright © 2011-2022 走看看