数据备份与还原
基础概念:
备份,将当前已有的数据或记录另存一份;
还原,将数据恢复到备份时的状态。
为什么要进行数据的备份与还原?
- 防止数据丢失;
- 保护数据记录。
数据备份与还原的方式有很多种,具体可以分为:数据表备份、单表数据备份、SQL备份和增量备份。
数据表备份
数据表备份,不需要通过 SQL 来备份,我们可以直接进入到数据库文件夹复制对应的表结构以及数据;在需要还原数据的时候,直接将备份(复制)的内容放回去即可。
不过想要进行数据表备份是有前提条件的,因为不同的存储引擎之间是有区别的。
对于存储引擎,MySQL 主要使用两种,分别为:InnoDB 和 Myisam,两者均免费。在这里,咱们可以顺便科普一下存储引擎的知识:
特点 | 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;
如上图所示,我们创建了名为my_myisam
,存储引擎为 Myisam 的数据表。为了验证 Myisam 的存储特性,我们可以到data
文件夹查看具体的数据存储情况:
如上图所示,我们仅仅创建了一个表my_myisam
,但是 Myisam 对于会生成三个存储文件,分别为:
my_myisam.frm
:存储表的结构;my_myisam.MYD
:存储表的数据;my_myisam.MYI
:存储表的索引。
现在,我们将这三个文件复制到testoo
数据库(至于如何找到 MySQL 数据文件的存储位置,可以参考详述查看 MySQL 数据文件存储位置的方法):
执行如下 SQL 语句,进行测试:
-- 切换数据库 use testoo; -- 查看 testoo 数据库中的表 show tables; -- 查看表 my_myisam select * from my_myisam;
如上图所示,显然我们已经通过复制文件的方式,完成了数据表的备份工作。
在这里,有一点需要我们注意,那就是:我们可以将通过 InnoDB 存储引擎产生的.frm
和.idb
文件复制到另一个数据库,也可以通过show tables
命令查看复制过来的表名称,但是却无法获得数据。
执行如下 SQL 语句,进行测试:
-- 查看 testoo 数据库中的表 show tables; -- 查看表 my_class select * from my_class;
通过以上测试,显然数据表备份这种备份方式更适用于 Myisam 存储引擎,而且备份的方式也很简单,直接复制 Myisam 存储引擎产生的.frm
、.MYD
和.MYI
三个存储文件到新的数据库即可。
温馨提示:符号[]
括起来的内容,表示可选项;符号+
,则表示连接的意思。
———— ☆☆☆ —— 返回 -> 史上最简单的 MySQL 教程 <- 目录 —— ☆☆☆ ————