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

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

【1】数据表文件备份

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

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

MySQL - 数据备份与还原(导出导入)_第1张图片


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

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

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

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

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

show variables like '%datadir%';

MySQL - 数据备份与还原(导出导入)_第2张图片

MySQL - 数据备份与还原(导出导入)_第3张图片


【2】单表数据备份与还原

① 备份

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

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

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

通常在数据(表)库备份中不会使用该方式。

语法格式如下:

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

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

示例如下:

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

MySQL - 数据备份与还原(导出导入)_第4张图片

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

MySQL - 数据备份与还原(导出导入)_第5张图片


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

语法格式如下:

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 - 数据备份与还原(导出导入)_第6张图片


② 表数据还原

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

语法格式如下:

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语句,然后进行备份。还原的时候只要执行SQL语句就可以了(主要就是针对表结构)。

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

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

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

语法格式如下:

mysqldump/mysqldump.exe -h p u p 数据库名字 [数据表名字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 - 数据备份与还原(导出导入)_第7张图片


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

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 - 数据备份与还原(导出导入)_第8张图片

MySQL - 数据备份与还原(导出导入)_第9张图片


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

 -bash: mysqldump: command not found

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

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

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

MySQL - 数据备份与还原(导出导入)_第10张图片


Linux下备份整个库:

mysqldump  -uroot -p test_mybatis > /opt/back20170614.sql

Linux下备份某个表:

mysqldump  -uroot -p test_mybatis tb_sys_user > /opt/back20170614.sql

Linux下备份整个库表结构(无表数据):

mysqldump  -uroot -p -d test_mybatis > /opt/back20170614.sql

② SQL还原数据库
·
使用mysql.exe客户端还原;

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

示例如下:

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

MySQL - 数据备份与还原(导出导入)_第11张图片


使用SQL指令进行还原

语法格式如下:

source 文件目录

示例如下:

source D:/temDirectory/back20170613.sql

MySQL - 数据备份与还原(导出导入)_第12张图片

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

MySQL - 数据备份与还原(导出导入)_第13张图片

SQL备份优缺点:

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

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


【4】增量备份

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

增量备份定义:

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

参考博文:SQL命令进行表结构与数据复制

你可能感兴趣的:(MySQL)