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

数据备份与还原

基础概念:

备份,将当前已有的数据或记录另存一份;

还原,将数据恢复到备份时的状态。

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

防止数据丢失;

保护数据记录。

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

数据表备份

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

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

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

 
特点 Myisam InnoDB BDB Memory Archive
批量插入的速度 非常高
事务安全 —— 支持 支持 —— ——
全文索引 支持 5.5版本支持 —— —— ——
锁机制 表锁 行锁 页锁 表锁 行锁
存储限制 没有 64TB 没有 没有
B树索引 支持 支持 支持 支持 ——
哈希索引 —— 支持 —— 支持 ——
集群索引 —— 支持 —— —— ——
数据缓存 —— 支持 —— 支持 ——
索引缓存 支持 支持 —— 支持 ——
数据可压缩 支持 —— —— —— 支持
空间使用 N/A 非常低
内存使用 中等
外键支持 —— 支持 —— —— ——

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

Myisam:表、数据和索引全部单独分开存储;

InnoDB:只有表结构,数据全部存储到ibd文件中。

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

[plain] view plaincopy

  1. -- 创建 Myisam 表  
  2. create table my_myisam(  
  3. id int  
  4. )charset utf8 engine = myisam;  
  5.   
  6. -- 显示表结构  
  7. show create table my_myisam;  
  8.   
  9. -- 插入数据  
  10. insert into my_myisam values(1),(2),(3);  
  11.   
  12. -- 显示数据  
  13. 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 语句,进行测试:
 

[plain] view plaincopy

  1. -- 切换数据库  
  2. use testoo;  
  3.   
  4. -- 查看 testoo 数据库中的表  
  5. show tables;  
  6.   
  7. -- 查看表 my_myisam  
  8. select * from my_myisam;  





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

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



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

[plain] view plaincopy

  1. -- 查看 testoo 数据库中的表  
  2. show tables;  
  3.   
  4. -- 查看表 my_class  
  5. select * from my_class;  





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

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

你可能感兴趣的:(MySQL,数据库)