MySQL数据库备份与恢复
1,备份和恢复分类
物理(原始)与逻辑备份
物理备份由存储数据库内容的目录和文件的原始副本组成。这种类型的备份适用于大型的重要数据库,这些数据库在出现问题时需要快速恢复。
逻辑备份保存表示为逻辑数据库结构(CREATE DATABASE
, CREATE TABLE
语句)和内容(INSERT
语句或定界文本文件)的信息。这种备份类型适用于少量数据,可以在其中编辑数据值或表结构,或在其他计算机体系结构上重新创建数据。
联机与脱机备份
在线备份在MySQL服务器运行时进行,以便可以从服务器获取数据库信息。停止服务器时,将进行脱机备份。这种区别也可以描述为“ 热 ”与 “ 冷 ”备份。一个“ 温暖 ”的备份是一个在服务器保持运行,但锁定,以防止当你从外部访问数据库文件修改数据。
联机备份方法具有以下特征:
-
备份对其他客户端的干扰较小,其他客户端可以在备份期间连接到MySQL服务器,并且可以根据其需要执行的操作访问数据。
-
必须注意施加适当的锁定,以免发生会损害备份完整性的数据修改。MySQL Enterprise Backup产品会自动执行这种锁定。
脱机备份方法具有以下特征:
-
客户端可能会受到不利影响,因为备份期间服务器不可用。因此,此类备份通常是从复制从属服务器获取的,该复制从属服务器可以脱机使用而不会损害可用性。
-
备份过程更简单,因为不可能受到客户端活动的干扰。
在线和离线之间的相似区别适用于恢复操作,并且相似的特征适用。但是,与联机备份相比,与联机备份相比,客户机更可能受到影响,因为恢复需要更强的锁定。在备份期间,客户端可能能够在备份数据时读取数据。恢复会修改数据,而不仅仅是读取数据,因此在还原数据时,必须防止客户端访问数据。
本地与远程备份
本地备份是在运行MySQL服务器的同一主机上执行的,而远程备份是从其他主机执行的。对于某些类型的备份,即使输出是本地写在服务器上,也可以从远程主机启动备份。主办。 1,mysqldump可以连接到本地或远程服务器。对于SQL输出(CREATE
和 INSERT
语句),可以完成本地或远程转储并在客户端上生成输出。对于带分隔符的文本输出(带有此 --tab
选项),将在服务器主机上创建数据文件。
2,SELECT ... INTO OUTFILE
可以从本地或远程客户端主机启动,但是输出文件在服务器主机上创建。
3,物理备份方法通常在MySQL服务器主机上本地启动,以便使服务器脱机,尽管复制文件的目的地可能是远程的。
快照备份
一些文件系统实现使“ 快照 ” 得以拍摄。它们在给定的时间点提供文件系统的逻辑副本,而无需整个文件系统的物理副本。(例如,该实现可以使用写时复制技术,以便仅复制在快照时间之后修改的文件系统的某些部分。)MySQL本身不提供获取文件系统快照的功能。它可以通过Veritas,LVM或ZFS等第三方解决方案获得。
完整备份与增量备份
完全备份包括在给定时间点由MySQL服务器管理的所有数据。增量备份包括在给定时间段(从一个时间点到另一个时间点)内对数据所做的更改。MySQL有执行完全备份的不同方法,例如本节前面介绍的方法。通过启用服务器的二进制日志,使增量备份成为可能,服务器用于记录数据更改。
完全与时间点(增量)恢复
完全恢复可从完全备份中还原所有数据。这会将服务器实例还原到进行备份时的状态。如果该状态不是最新状态,则可以执行完全恢复,然后恢复自完全备份以来进行的增量备份,以使服务器进入最新状态。
增量恢复是指在给定时间范围内所做的更改的恢复。这也称为时间点恢复,因为它使服务器的状态在给定时间之前为当前状态。时间点恢复基于二进制日志,通常会从备份文件中进行完全恢复,从而将服务器恢复到进行备份时的状态。然后,将写入二进制日志文件中的数据更改作为增量恢复来应用,以重做数据修改并使服务器达到所需的时间点。
2,数据库备份方式
常见的方法有:
使用MySQL Enterprise Backup进行热备份
MySQL企业版的客户可以使用 MySQL企业备份产品对整个实例或选定的数据库,表或两者进行 物理备份。该产品包括 增量备份和 压缩备份的功能。备份物理数据库文件使恢复比逻辑技术(如mysqldump
命令)快得多。InnoDB
使用热备份机制复制表 。(理想情况下,这些InnoDB
表应代表大部分数据。)使用热备份从其他存储引擎复制表机制。
使用mysqldump进行备份
该mysqldump的程序可以进行备份。它可以备份各种表。
对于InnoDB
表,可以使用mysqldump--single-transaction
选项 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。
备份所有数据库
备份指定数据库
备份指定数据库的表(前面两个命令之间的区别在于,不带--databases
,转储输出不包含CREATE DATABASE
或者 USE
语句,因此恢复到指定库,没有则需要创建目标库)
在shell通过mysql命令恢复
在mysql内部恢复
通过复制表文件进行备份
对于不同的存储引擎表,可以通过复制这些文件来备份表。例如, MyISAM
表作为文件存储,所以很容易复制文件(做一个备份*.frm
, *.MYD
以及*.MYI
文件)。要获得一致的备份,需停止服务器或锁定并刷新相关表:
只需要一个读锁;这样,当在数据库目录中复制文件时,其他客户端就可以继续查询表。需要刷新才能确保在开始备份之前将所有活动索引页都写入磁盘。
还可以仅通过复制所有表文件来创建二进制备份,只要服务器不更新任何内容即可。(但是请注意,如果数据库中包含InnoDB
表,则表文件复制方法将不起作用。而且,即使服务器未在主动更新数据,InnoDB
也可能仍将修改后的数据缓存在内存中并且未刷新到磁盘。)
进行分隔文本文件备份
要创建包含表数据的文本文件 。该文件是在MySQL服务器主机而非客户端主机上创建的。对于此语句,输出文件不能已经存在,因为允许文件被覆盖会带来安全风险。此方法适用于任何类型的数据文件,但仅保存表数据,而不保存表结构。 SELECT * INTO OUTFILE '
file_name
' FROM tbl_name
创建文本数据文件(以及包含
CREATE TABLE
用于备份表的语句的文件)的另一种方法 是将mysqldump与--tab
选项一起使用。
对于mysqldump --tab,服务器默认将表数据写入.txt
文件,每行一行,在列值之间使用制表符,在列值之间没有引号,并使用换行符作为行终止符。(这些默认值与相同 SELECT ... INTO OUTFILE
。)
为了使数据文件可以使用其他格式写入, mysqldump支持以下选项。
-
--fields-terminated-by=
str
用于分隔列值的字符串(默认值:制表符)。
-
--fields-enclosed-by=
char
包含列值的字符(默认值:无字符)。
-
--fields-optionally-enclosed-by=
char
包含非数字列值的字符(默认值:无字符)。
-
--fields-escaped-by=
char
用于转义特殊字符的字符(默认值:不转义)。
-
--lines-terminated-by=
str
行终止字符串(默认值:换行符)。
要重新加载带分隔符的文本数据文件,使用 LOAD DATA
或 mysqlimport。
通过启用二进制日志进行增量备份
MySQL支持增量备份:必须使用--log-bin
选项启动服务器以启用二进制日志记录。二进制日志文件为提供了将更改复制到数据库的信息,这些更改是在执行备份之后进行的。目前,要进行增量备份(包含自上次完全备份或增量备份以来发生的所有更改),应使用FLUSH LOGS
。完成此操作后,需要将所有二进制日志复制到备份位置,范围从上次完全备份或增量备份的那一刻到最后一次备份。这些二进制日志是增量备份。
原文地址:https://www.cnblogs.com/jinli1771/p/13083765.html
- 设计模式之代理模式(二)CGLIB动态代理实现
- ios手势复习值之换图片-转场动画(纯代码)
- 顺序广播和无序广播
- Netflix Zuul与Nginx的性能对比
- 最有价值的50道java面试题(一)
- 用 Python 从零开始玩微信跳一跳
- ios地图小例子和手势的使用 供大家参考一下呦
- Spring Cloud源码分析(四)Zuul:核心过滤器
- basicAnimation移动图形
- 一个layer可以跟着画完的线移动ios程序 好玩啊。
- 最有价值的50道java面试题(二)
- android自定义属性
- kvo深入浅出举例
- 深入理解Android 自定义attr Style styleable以及其应用
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- CentOS6.5环境安装nginx服务器及负载均衡配置操作详解
- 详解linux 驱动编写(sd卡驱动)
- Centos 6.9环境下创建用户及删除用户的方法
- 详解linux驱动编写(入门)
- Ubuntu使用国内源出现Hash Sum mismatch错误的解决
- CentOS基于nginx反向代理实现负载均衡的方法
- CentOS7服务器环境下vsftpd安装及配置方法
- Linux date 时间设置同步命令分享
- Gerrit设置开机启动方法
- Ubuntu服务器下搭建php运行环境的方法
- 详解ubuntu14.04搭建(迁移)hustoj记录
- linux 触摸屏驱动编写
- centos yum更新及删除多余启动项
- React进阶(1)-理解Redux
- MySQL死锁系列-线上死锁问题排查思路