史上最简单的 MySQL 教程(三十五)「数据备份与还原(上)」

温馨提示:本系列博文已经同步到 GitHub,地址为「mysql-tutorial」,欢迎感兴趣的童鞋StarFork,纠错。

数据备份与还原

基础概念:

  • 备份,将当前已有的数据或记录另存一份;
  • 还原,将数据恢复到备份时的状态。

为什么要进行数据的备份与还原?

  • 防止数据丢失;
  • 保护数据记录。

数据备份与还原的方式有很多种,具体可以分为:数据表备份、单表数据备份、SQL备份和增量备份。

数据表备份

数据表备份,不需要通过 SQL 来备份,我们可以直接进入到数据库文件夹复制对应的表结构以及数据;在需要还原数据的时候,直接将备份(复制)的内容放回去即可。

不过想要进行数据表备份是有前提条件的,因为不同的存储引擎之间是有区别的。

对于存储引擎,MySQL 主要使用两种,分别为:InnoDBMyisam,两者均免费。在这里,咱们可以顺便科普一下存储引擎的知识:

特点

Myisam

InnoDB

BDB

Memory

Archive

批量插入的速度

非常高

事务安全

——

支持

支持

——

——

全文索引

支持

5.5版本支持

——

——

——

锁机制

表锁

行锁

页锁

表锁

行锁

存储限制

没有

64TB

没有

没有

B树索引

支持

支持

支持

支持

——

哈希索引

——

支持

——

支持

——

集群索引

——

支持

——

——

——

数据缓存

——

支持

——

支持

——

索引缓存

支持

支持

——

支持

——

数据可压缩

支持

——

——

——

支持

空间使用

N/A

非常低

内存使用

中等

外键支持

——

支持

——

——

——

其中,Myisam 和 InnoDB 的数据存储方法也有所区别:

  • Myisam:表、数据和索引全部单独分开存储;
  • InnoDB:只有表结构,数据全部存储到ibd文件中。

执行如下 SQL 语句,测试 Myisam 的数据存储方式:

-- 创建 Myisam 表
create table my_myisam(
	id int
)charset utf8 engine = myisam;

-- 显示表结构
show create table my_myisam;

-- 插入数据
insert into my_myisam values(1),(2),(3);

-- 显示数据
select * from my_myisam;
1

如上图所示,我们创建了名为my_myisam,存储引擎为 Myisam 的数据表。为了验证 Myisam 的存储特性,我们可以到data文件夹查看具体的数据存储情况:

2

如上图所示,我们仅仅创建了一个表my_myisam,但是 Myisam 对于会生成三个存储文件,分别为:

  • my_myisam.frm:存储表的结构;
  • my_myisam.MYD:存储表的数据;
  • my_myisam.MYI:存储表的索引。

现在,我们将这三个文件复制到testoo数据库(至于如何找到 MySQL 数据文件的存储位置,可以参考详述查看 MySQL 数据文件存储位置的方法):

3

执行如下 SQL 语句,进行测试:

-- 切换数据库
use testoo;

-- 查看 testoo 数据库中的表
show tables;

-- 查看表 my_myisam
select * from my_myisam;
4

如上图所示,显然我们已经通过复制文件的方式,完成了数据表的备份工作。

在这里,有一点需要我们注意,那就是:我们可以将通过 InnoDB 存储引擎产生的.frm.idb文件复制到另一个数据库,也可以通过show tables命令查看复制过来的表名称,但是却无法获得数据

5

执行如下 SQL 语句,进行测试:

-- 查看 testoo 数据库中的表
show tables;

-- 查看表 my_class
select * from my_class;
6

通过以上测试,显然数据表备份这种备份方式更适用于 Myisam 存储引擎,而且备份的方式也很简单,直接复制 Myisam 存储引擎产生的.frm.MYD.MYI三个存储文件到新的数据库即可。


温馨提示:符号[]括起来的内容,表示可选项;符号+,则表示连接的意思。


———— ☆☆☆ —— 返回 -> 史上最简单的 MySQL 教程 <- 目录 —— ☆☆☆ ————

原创声明,本文系作者授权云+社区-专栏发表,未经许可,不得转载。

如有侵权,请联系 zhuanlan_guanli@qq.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Grace development

MySQL常用系统表汇总

本篇文章虽大部分内容为参考原文作者的相关内容,但对原文对于文章的逻辑与排版上进行了大范围修改,方便阅读与理解。原文链接在底部

222
来自专栏java达人

MySQL事务autocommit自动提交

image.png MySQL默认操作模式就是autocommit自动提交模式。这就表示除非显式地开始一个事务,否则每个查询都被当做一个单独的事务自动执行。...

18310
来自专栏L宝宝聊IT

SQL server 数据库的存储过程和触发器

1133
来自专栏数据和云

Oracle数据库的初始化与跟踪学习方法

编辑说明:《Oracle性能优化与诊断案例精选》出版以来,收到很多读者的来信和评论,我们会通过连载的形式将书中内容公布出来,希望书中内容能够帮助到更多的读者朋友...

3389
来自专栏Java帮帮-微信公众号-技术文章全总结

【数据库】MySQL进阶四、select

【数据库】MySQL进阶四、select mysql中select * for update 注: FOR UPDATE 仅适用于InnoDB,且必须在事务区...

4067
来自专栏Netkiller

数据库进程间通信解决方案

数据库进程间通信解决方案 数据库与其他第三方应用程序进程间通信解决方案 摘要 你是否想过当数据库中的数据发生变化的时候出发某种操作?但因数据无法与其他进程通信(...

3265
来自专栏杨建荣的学习笔记

清理session的小插曲(r4笔记第95天)

前几天在做一次巡检的时候,通过top发现有3个进程占用的时间很长,之前也碰到过几次这种情况,但是排查发现是由于监控程序在运行,算是虚惊一场。 今天看到这些进程的...

3157
来自专栏杨建荣的学习笔记

基于时间点的不完全恢复的例子(r6笔记第9天)

说到不完全恢复,一般有三种场景,基于时间点的不完全恢复,基于scn的不完全恢复,基于cancel的不完全恢复。 三种情况都是不完全恢复采用的方式,而不完全恢复都...

2595
来自专栏数据和云

备份策略 - 单表备份的隐患与应对方案

作者介绍: 刘鹏松,任职云和恩墨北区交付部,负责山东部分客户业务交付。 在通过mysqldump进行MySQL数据库(InnoDB引擎)逻辑备份的时候经常使用的...

3397
来自专栏杨建荣的学习笔记

海量数据迁移之sqlldr和datapump的缺点分析(r4笔记第74天)

在数据迁移中,sql*loader和datapump总是作为一些常用的数据迁移方案,自己在经历了一些项目之后,优点就不说了,说点这些方案的缺点,批评不自由,则赞...

3486

扫描关注云+社区