史上最简单的 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 教程 <- 目录 —— ☆☆☆ ————

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

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏郭霖

Android数据库高手秘籍(一)——SQLite命令

要想熟练地操作任何一个数据库,最最基本的要求就是要懂SQL语言,这也是每个程序员都应该掌握的技能。虽说SQL博大精深,要想精通确实很难,但最基本的一些建表命令,...

20810
来自专栏java达人

一次sql注入引发的多个mysql进程锁住的问题(针对myisam)

以前碰到过一个sql注入式攻击引发大量mysql进程被锁住的例子,现在分享给大家。当时数据表用的是myisam存储引擎。 基本知识点: InnoDB存储引擎既支...

2148
来自专栏喵了个咪的博客空间

Otter-入门篇4(单向同步实践)

Otter-入门篇4(单向同步实践)# ? 前言## 在前几节我们已经做好了关于otter的准备工作,配置好了zookeeper,manage和node,本节就...

51210
来自专栏L宝宝聊IT

存储过程和触发器的应用

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

浅谈MySQL中的事务隔离级别(r11笔记第86天)

之前写了一篇浅谈事务(一),算是对事务的一个基本认识,今天来简单总结一下事务的隔离级别,虽然是老掉牙的知识点,重温一下还是值得的。 在MySQL中基...

3319
来自专栏magicsoar

C++操作mysql方法总结(2)

C++通过ODBC和通过MFC ODBC操作mysql的两种方式 使用vs2013和64位的msql 5.6.16进行操作 ? 项目中使用的数据库名和表数据请参...

2436
来自专栏PHP在线

数据优化

数据优化 读写分离,在X2的版本中,我们引入了多SQL服务器的支持,在主从服务器中,你可以配置写服务器跟读服务器,这样对于负载高的站点中可以使用这个 功能达到读...

2878
来自专栏运维技术迷

MySQL数据库(一):安装MySQL数据库

安装环境: 操作系统版本:RHEL 6.5 安装版本:MYSQL 5.1 升级版本:MYSQL 5.6 一、简述MYSQL 1.什么是数据库? DB ...

4158
来自专栏我和PYTHON有个约会

Django来敲门~第一部分【5.2.模型和数据库交互】

通常情况下,如果你只是做测试使用,可以使用Django内置的数据库SQLite就完全可以满足需要了,我们在本次教程中,通过使用MySQL这个数据库来完成后续的功...

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

MySQL中insert语句没有响应的问题分析(r11笔记第21天)

今天开发的一个同学问我一个MySQL的问题,说在测试数据库中执行一条Insert语句之后很久没有响应。我一看语句是一个很常规的insert into xxx ...

36212

扫码关注云+社区