MySQL - 数据备份与还原(导出导入)

时间:2022-01-03 06:59:20

数据备份与还原的常用方式:数据表备份,单表数据备份,SQL备份和 增量备份。

【1】数据表备份

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

数据表备份有前提条件:根据不同的存储引擎(MySQL进行数据存储的方式)有不同的区别。

MySQL - 数据备份与还原(导出导入)


这里主要对比myisam和innodb:数据存储方式

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

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

Myisam表会有三个文件: *.frm , *.MYD , *.MYI。

这种文件备份通常适用于myisam存储引擎:(还原使用时)直接复制三个文件即可。然后放到对应的数据库下就可以使用。InnoDB不适用这种方式。

InnoDB 查看数据文件存放路径:

show variables like '%datadir%';

MySQL - 数据备份与还原(导出导入)

MySQL - 数据备份与还原(导出导入)


【2】单表数据备份

  • 每次只能备份一张表,只能备份数据(表结构不能备份);

  • 通常的使用方式:将表中的数据导出到文件;

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

  • 通常不会使用该方式。

语法格式如下:

select * /字段列表 into outfile 文件所在路径 from 数据源;

-- 前提:外部文件不存在。

示例如下:

SELECT * INTO OUTFILE 'D:/temDirectory/BACKUP1.txt' from p_user

MySQL - 数据备份与还原(导出导入)

一定不要用txt打开(如上图),可以使用EditPlus:

MySQL - 数据备份与还原(导出导入)


高级备份:自己制定字段和行的处理方式;

语法格式如下:

select */字段列表 into outfile 文件所在路径 fields 字段处理 lines 行处理 from 数据源;

Fields :字段处理。

Enclosed by:字段使用什么内容包裹,默认是 ”—空字符串。
Terminated by:字段以什么结束,默认是’\t’—-Tab键。
Escaped by:特殊符号用什么方式处理,默认是’\’,使用反斜杠转义。

Lines:行处理。

Starting by:每行以什么开始,默认是 ”—–空字符串。
Terminated by:每行以什么结束,默认是’\r\n’—-换行符。

测试如下:

select * into OUTFILE 'D:/temDirectory/backup.txt' 
-- 字段处理
FIELDS
ENCLOSED by '"'-- 数据使用双引号包裹;
TERMINATED by '|' -- 使用竖线分隔字段数据;
-- 行处理
LINES
STARTING by 'START:'

FROM p_user

MySQL - 数据备份与还原(导出导入)


【数据还原】:将一个在外部保存的数据重新恢复到表中(前提是表结构必须存在)。

语法格式如下:

Load data infile 文件所在路径 into table 表名[(字段列表)] fields 字段处理 lines 行处理。

-- 怎么到处去的就怎么还原(fields,lines)

示例如下:

Load data infile 'D:/temDirectory/backup.txt'  into table p_user 
FIELDS
ENCLOSED by '"'-- 数据使用双引号包裹;
TERMINATED by '|' -- 使用竖线分隔字段数据;
-- 行处理
LINES
STARTING by 'START:'

【3】SQL备份

备份的是SQL语句:系统会对表结构以及数据进行处理,变成对应的SQL语句,然后进行备份。还原的时候只要执行SQL语句就可以了(主要就是针对表结构)。

MySQL没有提供备份指令,需要用到MySQL提供的软件:mysqldump.exe。

mysql.exe : 客户端软件;
mysqld.exe : 服务端软件;
mysqldump.exe : 备份软件。

mysqldump.exe也是一种客户端,需要操作服务器,必须连接认证。

语法格式如下:

mysqldump/mysqldump.exe -hpup 数据库名字 [数据表名字1[数据表名字2...]]>外部文件

示例如下-备份整库(包含结构和数据):

mysqldump.exe    -hlocalhost -p3306 -uroot -p test_mybatis> D:/temDirectory/back20170613.sql

或者如下-备份整库(包含结构和数据)

mysqldump.exe   -uroot -p test_mybatis > D:/temDirectory/back20170614.sql

MySQL - 数据备份与还原(导出导入)


备份某个库的指定表(包含结构和数据)

mysqldump.exe   -uroot -p test_mybatis p_user > D:/temDirectory/back20170614.sql

仅备份结构不要数据:

-- 某个库
mysqldump.exe -uroot -p -d test_mybatis > D:/temDirectory/back20170614.sql;

-- 某个库指定表
mysqldump.exe -uroot -p -d test_mybatis p_user > D:/temDirectory/back20170614.sql;

使用Navicat for MySQL进行SQL备份:

MySQL - 数据备份与还原(导出导入)

MySQL - 数据备份与还原(导出导入)


Linux下进行SQL备份,基本操作和上述一致。有时会遇到如下错误:

 -bash: mysqldump: command not found

即命令未找到。有两种解决方法:

① 进入目标路径再执行命令;

② 使用软链将模板映射到/usr/bin下。

MySQL - 数据备份与还原(导出导入)


【SQL还原数据库:三种方式】
·
① 使用mysql.exe客户端还原;

mysql.exe/mysql [-hlocalhost] [-p3306] -uroot -p 数据库名字 < 备份文件目录

示例如下:

mysql -uroot -p test_mybatis < D:/temDirectory/back20170613.sql

MySQL - 数据备份与还原(导出导入)


② 使用SQL指令进行还原

语法格式如下:

source 文件目录

示例如下:

source D:/temDirectory/back20170613.sql

MySQL - 数据备份与还原(导出导入)


③ 使用MySQL工具(如Navicat for MySQL)进行还原

MySQL - 数据备份与还原(导出导入)


SQL备份优缺点:

优点:可以备份结构;
缺点:会浪费空间(额外增加SQL指令)。

但是,无论单表备份还是整库备份,SQL备份是用的最多的一种方式(中小型项目)。


【4】增量备份

不是针对数据或者SQL指令进行备份,而是针对MySQL服务器的日志文件进行备份。

增量备份定义:

指定时间段开始备份,备份数据不会重复,而且所有的操作都会备份(大项目都用增量备份)。