实践版本:MySQL5.7

备份类型(backup type)
物理和逻辑备份(Physical Versus Logical Backup)
        物理备份是指直接复制存储数据库内容的目录和文件,这种类型的备份适用于出现问题时需要快速恢复的大型重要数据库。

逻辑备份保存以逻辑数据库结构(create database、create table)和内容(insert 语句)表示的信息,也就是保存的是创建数据库、创建表和插入数据的sql语句。这种类型的备份适用于较小数量的数据,可以在其中编辑数据值或表结构,或者在不同的机器架构上重新创建数据。

物理备份特点如下:

(1)备份由数据库目录和文件副本组成,通常是MySQL整个或者部分数据目录;

(2)物理备份比逻辑备份要快,因为它只是复制文件,并不需要做什么转化;

(3)比逻辑备份更紧凑或者压缩性更好;

(4)因为备份速度和紧凑性对于繁忙、重要的数据库非常重要,MySQL企业版执行物理备份;

(5)备份的粒度范围从整个数据目录的级别到各个文件的级别。这可能提供表级粒度,也可能不提供,这取决于存储引擎。例如,InnoDB表可以单独存储在一个文件中,也可以与其他InnoDB表共享文件存储空间;每个MyISAM表只对应于一组文件。

(6)除了数据库之外,备份还可以包括任何相关文件,如日志或配置文件。

(7)以这种方式备份内存表中的数据比较困难,因为它们的内容并不存储在磁盘上。

(8)备份只能移植到具有相同或类似硬件特征的其他机器上;

(9)可以在MySQL服务器不运行时执行备份。如果服务器正在运行,则有必要执行适当的锁定,以便服务器在备份期间不会更改数据库内容。MySQL Enterprise Backup自动锁定备份的表;

(10)物理备份工具包括用于InnoDB或任何其他表的MySQL企业备份的mysqlbackup,或用于MyISAM表的文件系统级命令(如cp、scp、tar、rsync)。

逻辑备份特点如下:

(1)逻辑备份工具包括mysqldump程序和SELECT…INTO OUTFILE语句,适用于任何存储引擎,甚至内存;

(2)在运行MySQL服务器时执行逻辑备份;

(3)以逻辑格式存储的备份与机器无关,并且具有高度的可移植性;

(4)备份不包括日志或配置文件,或不属于数据库的其他与数据库相关的文件;

(5)无论任何存储引擎,备份和恢复粒度可用于服务器级别(所有数据库)、数据库级别(特定数据库中的所有表)或表级别;

(6)备份的输出比物理备份大,尤其是以文本格式保存时;

(7)和物理备份相比,要慢些,因为服务器必须访问数据库信息并将其转换为逻辑格式。如果输出写在客户端,服务器还必须将其发送到备份程序。

全量和增量备份(Full Versus Incremental Backups)
        全量备份是指某个时间点MySQL服务器管理的所有数据的备份,增量备份是指备份一个时间点到另一个时间点变化的数据,全量备份和增量备份区别是很明显的,第一次备份使用全量备份是必须的,但是每次都是全量备份,势必浪费时间和磁盘空间,特别是数据库变化很小的情况下,此时使用增量备份是一个比较好的选择。

实践
mysqldump命令
        它是MySQL自带的命令,先备份buffer中数据,然后再备份磁盘中的数据。生成的是一个包好sql语句的备份文件。下面分别以全库,单个数据库,单个表,表结构,表数据的备份为例说明它的基本用法。

备份全库
可以如下备份全库
mysqldump -uroot -proot --all-databases --single-transaction > 20190201-1325_all_backup.sql

-uroot:数据库登录用户为root;

-proot:数据库登录密码root,为了安全,建议使用-p,密码在执行命令后输入;

--all-databases:表示备份全库;

--singe-trasanction:保证了mysqldump看到的数据是一致的,此时其他事务对数据的修改,mysqldump是看不到的,其实在执行改名前,获得了所有数据库中所有表上的一个全局读锁(read lock);

>:输出符号;

20190201-1325_all_backup.sql:sql文件名,执行备份命令后,备份结果就保存在这个文件中,文件名中最好要包含备份时间、备份范围、backup关键字等信息,例如文件表示备份时间是2019年2月1日下午1点25分,all表示文件包含的是全库信息,backup表示这个文件时备份文件。

执行上面的备份命令,如图:

可以看到如果使用-proot,会发出不安全警告。执行命令后,在H下生成sql文件,部分内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
--
-- Current Database: `test`
--
  
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `test` /*!40100 DEFAULT CHARACTER SET utf8 */;
  
USE `test`;
  
--
-- Table structure for table `myset`
--
  
DROP TABLE IF EXISTS `myset`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `myset` (
  `col` set('a','b','c','d'DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
  
--
-- Dumping data for table `myset`
--
  
LOCK TABLES `myset` WRITE;
/*!40000 ALTER TABLE `myset` DISABLE KEYS */;
INSERT INTO `myset` VALUES ('a,d'),('a,d'),('a,d'),('a,d'),('a,d'),('');
/*!40000 ALTER TABLE `myset` ENABLE KEYS */;
UNLOCK TABLES;

下面就可以使用这个sql备份文件将数据库恢复到备份的时间点,切记备份时间点之后插入的数据将会丢失。命令如下:

1
mysql -uroot -proot < 20190201-1325_all_backup.sql

注意恢复的命令是mysql,而不是mysqldump。

备份单个数据库

以备份单个test数据库为例,命令如下:

1
mysqldump -uroot -proot --single-transaction test > 20190201-1325_test_backup.sql

恢复test数据库的命令,如下:

1
mysql -uroot -proot test < 20190201-1325_test_backup.sql

恢复单个数据库时,需要数据库已经存在,不然报如下错误:

所以,如果数据库不存在,执行如下命令创建数据库

1
CREATE DATABASE test;

然后再执行数据库恢复命令。

备份单个表

以备份test数据库的userinfo表为例,备份命令如下:

1
mysqldump -uroot -proot --single-transaction  test userinfo > 20190201-1325_test-userinfo_backup.sql

恢复单个表和恢复单个数据库的命令是一样的,如下:

1
mysql -uroot -proot test < 20190201-1325_test-userinfo_backup.sql

备份表结构

以备份test数据库的userinfo表结构为例,命令如下:

1
mysqldump -uroot -proot --single-transaction  test userinfo -d > 20190201-1325_test-userinfo-structure_backup.sql

文件内容包括创建表的sql语句。恢复表结构命令,如下:

1
mysql -uroot -proot test < 20190201-1325_test-userinfo-structure_backup.sql

注意:如果表中数据被删除,使用这种备份文件时无法恢复的,这个在实践中并没有多大用,数据才是最宝贵的。

备份表数据

以备份test数据库的userinfo表中数据为例,命令如下:

1
mysqldump -uroot -proot --single-transaction  test userinfo -t > 20190201-1325_test-userinfo-data_backup.sql

备份文件中只包含insert语句。恢复命令如下:

1
mysql -uroot -proot test < 20190201-1325_test-userinfo-data_backup.sql

注意:如果表不存在或者表结构被改变可能无法恢复数据。

select ... into outfile语句

使用binlog增量恢复

可以如下查看所有的binlog文件名、大小和当前正在记录日志的binlog:

binlog是二进制文件,可以使用mysqlbinlog命令查看binlog内容,如下:

1
mysqlbinlog mysql-bin.000001

如图:

一般binlog文件一页是无法展示的,可以使用如下命令翻看

1
mysqlbinlog binlog_files | more

如图:

按下Enter键即可继续往下翻看。也可以使用如下命令将binlog内容输出到一个文件中

1
mysqlbinlog mysql-bin.000004 > H:\tmp
1
mysqlbinlog -v mysql-bin.000004 > H:\tmp
1
mysqlbinlog -vv mysql-bin.000004 > H:\tmp

-v参数可以看到具体的语句,如图:

-vv参数可以看到字段的数据类型,如图:

如果没有-v或者-vv参数,是看不到###行的,如图:

恢复时使用如下命令即可:

1
mysql -u root -p < H:\tmp

如果tmp是整个库的binlog,则全库恢复,如果要增量恢复,先是将数据库恢复到某个时间点,然后将从该时间点之后数据的变化形成的的binlog日志保存出,然后使用上面的命令恢复这些数据。

Backup &recovery备份和还原的更多相关文章

  1. Backup&recovery备份和还原 mysql

    1.mysqldump 在日常工作中,我们会使用mysqldump命令创建sql格式的转储文件来备份数据库.或者我们把数据导出后做数据迁移,主备搭建等操作.mysqldump是一个逻辑备份工具,复制原 ...

  2. Database differential backup差异备份和还原

    完整备份: 备份全部选中的文件和文件夹,并不依赖文件的存档属性来确定备份哪些文件.(在备份过程中,任何现有的标记都被清除,每个文件都被标记为已备份,换言之,清除存档属性),完全备份也叫完整备份. 差异 ...

  3. 第一章、关于SQL Server数据库的备份和还原(sp_addumpdevice、backup、Restore)

    在sql server数据库中,备份和还原都只能在服务器上进行,备份的数据文件在服务器上,还原的数据文件也只能在服务器上,当在非服务器的机器上启动sql server客户端的时候,也可以通过该客户端来 ...

  4. Chapter 7 Backup and Recovery 备份和恢复:

    Chapter 7 Backup and Recovery 备份和恢复: Table of Contents 7.1 Backup and Recovery Types 7.2 Database Ba ...

  5. 14.18 InnoDB Backup and Recovery 备份和恢复:

    14.18 InnoDB Backup and Recovery 备份和恢复: 安全数据库管理的关键是 做定期的备份,依赖你的数据卷, MySQL server的数量和数据库的负载,你可以使用那些技术 ...

  6. sqlserver日志的备份与还原

    ----------完整备份与还原----------                --完整备份数据库--backup database studb to disk='e:\stu.bak'back ...

  7. C#.NET SQL数据库备份与还原解决方案

    C#.NET SQL数据库备份与还原解决方案http://www.csframework.com/archive/1/arc-1-20110924-1841.htm 开发框架V2.2(快速开发版)系统 ...

  8. windows server 备份与还原

    1:文件备份: ①Goodsync ②Acronis Backup & Recovery 2:域控&系统备份 ①CMD -- >NTbackup (不支持异机还原) ②Acron ...

  9. android ROM备份和还原,再也不用当心刷到垃圾ROM,而还原不了原有系统

    安卓刷机后如何还原以前ROM 和系统备份,本教程为大家介绍刷机后如何还原到以前的ROM 和系统备份. 很多人,看到了好多新的rom,包括测试版的新rom,心里痒痒的.想刷一刷.尝尝鲜,结果刷完,感觉新 ...

随机推荐

  1. sql语法总结

    1.创建表 . 创建时间 default current_imestamp(6) 更新时间 default current_timestamp(6)  on update current_timest ...

  2. [Sublime]Sublime安装以及插件使用

    安装直接去官网下载安装了 安装Package Control关于安装Package Control,有两种方法. 一.自动安装 自动安装很方便,网上代码很多.我用的是Sublime Text3,通过V ...

  3. .NET 简单多线程

    取消跨线程访问 Control.CheckForIllegalCrossThreadCalls = false; 1.开启新线程 无参数 Thread thread = new Thread(方法名) ...

  4. 第二篇flask响应方式

    响应三件套 1.Flask中的HTTPResponse @app.route('/home') # app中的route装饰器 def home(): # 视图 return '登陆成功' #HTTP ...

  5. angular中service封装$http做权限时拦截403等状态及获取验证码倒计时、跨域问题解决

    封装$http.做权限时拦截403等状态及获取验证码倒计时: 拦截接口返回状态 var app = angular.module('app'); app.factory('UserIntercepto ...

  6. java 多态 向上 向下转型

    向上转型 将子类对象当作父类对象     子类对象------>父类对象 先实例化子类 父类 父类对象 = 子类实例 package test2; class Father{ public vo ...

  7. Django模型操作常用方法

    1.Save() 基本方法:object.save() save顾名思义是保存的意思,在django中既可以进行新增也可以进行修改操作.具体判定的算法如下: 1.如果对象的主键属性为一个求值为True ...

  8. ECMA Script 6_async 函数

    async 函数 const promise = new Promise((resolve, reject)=>{ setTimeout(function(){ console.log(&quo ...

  9. (89)Wangdao.com第二十二天_JavaScript DocumentFragment 节点

    DocumentFragment 节点 代表一个文档的片段,本身就是一个完整的 DOM 树形结构. 它没有父节点,.parentNode 返回 null 可以插入任意数量的子节点. 不属于当前文档,操 ...

  10. CSP201312-4 有趣的数【dp】

    问题描述 试题编号: 201312-4 试题名称: 有趣的数 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0, 1, ...