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

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

数据备份与还原

基础概念:

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

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

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

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

单表数据备份

单表数据备份,每次只能备份一张表,而且只能备份数据,不能备份表结构。

通常的使用场景为:将表中的数据导出到文件。

备份方法:从表中选出一部分数据保存到外部的文件中,

  • select */字段列表 + into outfile + '文件存储路径' + from 数据源;

在这里,使用单表数据备份有一个前提,那就是:导出的外部文件不存在,即文件存储路径下的文件不存在

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

-- 单表数据备份
select * into outfile 'D:/CoderLife/testMySQL/class.txt' from class;
1

如上图所示,SQL 语句已经执行成功。在这里,如果我们遇到:

ERROR 1290 (HY000): The MySQL server is running with the –secure-file-priv option so it cannot execute this statement.

这个错误,可以通过查看「详述 MySQL 导出数据遇到 secure-file-priv 的问题」进行解决。

为了验证是否真的将class表中的数据导出到指定位置,我们可以到该路径下进行确认:

2

如上图所示,显然我们已经将class表中的数据导出到本地啦!不过在这里,有一点需要我们特别注意,那就是:对于从数据库导出的文件,我们最好用EditPlus等编辑工具打开,防止乱码

此外,对于上述用于导出表中数据的 SQL 语法,其实我们可以颠倒书写顺序,也没有问题,例如:

  • select */字段列表 + from 数据源 + into outfile + '文件存储路径';

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

-- 单表数据备份
select * from class into outfile 'D:/CoderLife/testMySQL/class2.txt';
3

接下来,我们学习一些用于单表数据备份的高级操作,即自己指定字段和行的处理方式

  • 基本语法select */字段列表 + into outfile + '文件存储路径' + fields + 字段处理 + lines + 行处理 + from 数据源;

字段处理:

  • enclosed by:指定字段用什么内容包裹,默认是,空字符串;
  • terminated by:指定字段以什么结束,默认是\tTab键;
  • escaped by:指定特殊符号用什么方式处理,默认是\\,反斜线转义。

行处理:

  • starting by:指定每行以什么开始,默认是,空字符串;
  • terminated by:指定每行以什么结束,默认是\r\n,换行符。

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

-- 指定单表数据备份处理方式
select * into outfile 'D:/CoderLife/testMySQL/class3.txt'
-- 字段处理
fields
enclosed by '"'
terminated by '|'
lines
starting by 'START:'
from class ;
4

如上图所示,显然导出文件class3.txt按照我们指定的格式进行输出啦!在前面,我们已经测试了各种单表数据备份的方式,现在我们删除数据,并尝试还原数据,即将保持在外部的数据重新恢复到数据表中。But,由于单表数据备份仅能备份数据,因此如果表结构不存在,则不能进行还原。

  • 基本语法load data infile + '文件存储路径' + into table + 表名 + [字段列表] + fields + 字段处理 + lines + 行处理;

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

-- 删除表 class 中的数据
delete from class;

-- 查看表 class 中的数据
select * from class;

-- 还原表 class 中的数据
load  data infile 'D:/CoderLife/testMySQL/class3.txt'
into table class
-- 字段处理
fields
enclosed by '"'
terminated by '|'
lines
starting by 'START:';

-- 查看表 class 中的数据
select * from class;
5

如上图所示,显然在我们删除表class中的数据之后,还原数据成功。


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


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

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

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

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏狂码一生

深入PHP FTP类的详解

FTP是一种文件传输协议,它支持两种模式,一种方式叫做Standard (也就是Active,主动方式),一种是 Passive (也就是PASV,被动方式)。...

4488
来自专栏Python攻城狮

mongoDB的安装及基本使用1.mongoDB简介2.MySQL的安装3.Mongodb下载安装3.安装pymongo4.Mongodb基本使用5.

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

2033
来自专栏漏斗社区

大数据搜索引擎之elasticsearch使用篇(一)

在上一篇文章《大数据搜索分析引擎elasticsearch(安装篇)》中,斗哥介绍了elasticsearch的基本安装过程,本期,我们将着重介绍elastic...

2224
来自专栏JavaEE

Java面试题 - 03前言:三、框架篇:

1. JDBC编程有什么不足?mybatis是如何解决的? 答:主要有以下几个方面:

781
来自专栏禁心尽力

mybatis_映射查询

一、一对一映射查询: 第一种方式(手动映射):借助resultType属性,定义专门的pojo类作为输出类型,其中该po类中封装了查询结果集中所有的字段。此方法...

2029
来自专栏任浩强的运维生涯

mongodb基础篇

一、  关于mongodb 两种非关系数据库 Redis:满足极高读写性能的Key-Value数据库       键值式储存,可以通过键快速查询到值。     ...

3388
来自专栏北京马哥教育

Linux内存管理之mmap详解

作者:freeboy1015 来源:http://lib.csdn.net/article/linux/62126 一. mmap系统调用 1. mmap系统调...

6658
来自专栏博客园

MongoDB的CURD命令

   在MongDB服务成功启动的情况下,打开cmd,在MongDB的bin文件目录下执行MongDB命令

1664
来自专栏chenssy

【死磕Sharding-jdbc】---基于 SSM 集成sharding-jdbc2.0.3

本篇文章讲解如何在ssm(spring、springmvc、mybatis)结构的程序上集成sharding-jdbc(版本为2.0.3)进行分库分表; 假设分...

801
来自专栏www.96php.cn

【fastadmin】踩坑第二发-CMS插件后台文章状态修改未通过前台报错

我们找到模板application\index\view\cms\archives\my.html 大概46-52行

4303

扫码关注云+社区