数据备份与还原的常用方式:数据表备份,单表数据备份,SQL备份和 增量备份。
不需要通过SQL备份,直接进入到数据库文件夹复制对应的表结构以及数据文件。以后还原的时候,直接将备份的内容放进去即可。
数据表备份有前提条件:根据不同的存储引擎(MySQL进行数据存储的方式)有不同的区别。
这里主要对比myisam和innodb的数据存储方式
**InnoDB:**只有表结构,数据全部存储到ibdata1文件中;
**Myisam : **表,数据和索引全部单独分开存储。
Myisam表会有三个文件: *.frm , *.MYD , *.MYI。
这种文件备份通常适用于myisam存储引擎:(还原使用时)直接复制三个文件即可。然后放到对应的数据库下就可以使用。InnoDB不适用这种方式。
InnoDB 查看数据文件存放路径:
show variables like '%datadir%';
① 备份
特点:每次只能备份一张表,只能备份数据(表结构不能备份);
通常的使用方式:将表中的数据导出到文件;
备份:从表中选出一部分数据保存到外部的文件中;
通常在数据(表)库备份中不会使用该方式。
语法格式如下:
select * /字段列表 into outfile 文件所在路径 from 数据源;
//前提:外部文件不存在。
示例如下:
SELECT * INTO OUTFILE 'D:/temDirectory/BACKUP1.txt' from p_user
一定不要用txt打开(如上图),可以使用EditPlus:
高级备份–自己制定字段和行的处理方式
语法格式如下:
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
② 表数据还原
将一个在外部保存的数据重新恢复到表中(前提是表结构必须存在)。
语法格式如下:
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:'
① SQL备份
备份的是SQL语句:系统会对表结构以及数据进行处理,变成对应的SQL语句,然后进行备份。还原的时候只要执行SQL语句就可以了(主要就是针对表结构)。
MySQL没有提供备份指令,需要用到MySQL提供的软件: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
备份某个库的指定表(包含结构和数据)
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备份:
Linux下进行SQL备份,基本操作和上述一致。有时会遇到如下错误:
-bash: mysqldump: command not found
即命令未找到。有两种解决方法:
① 进入目标路径再执行命令;
② 使用软链将模板映射到/usr/bin下。
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
使用SQL指令进行还原
语法格式如下:
source 文件目录
示例如下:
source D:/temDirectory/back20170613.sql
使用MySQL工具(如Navicat for MySQL)进行还原
SQL备份优缺点:
优点:可以备份结构;
缺点:会浪费空间(额外增加SQL指令)。
但是,无论单表备份还是整库备份,SQL备份是用的最多的一种方式(中小型项目)。
不是针对数据或者SQL指令进行备份,而是针对MySQL服务器的日志文件进行备份。
增量备份定义:
指定时间段开始备份,备份数据不会重复,而且所有的操作都会备份(大项目都用增量备份)。
参考博文:SQL命令进行表结构与数据复制