- 备份:将当前已有的数据或者记录保留
- 还原:将已保留的数据恢复到对应的表中
- 为什么要做数据备份与还原?
(1)防止数据丢失:被盗、误操作
(2)保护数据记录 - 数据备份还原的方式有很多种:数据表备份、单表数据备份、SQL备份、增量备份
数据表备份
- 不需要通过SQL来备份:直接进入到数据库文件夹下赋值对应的表结构以及数据文件,以后还原的时候,直接将备份的内容放到对应的数据库目录下即可
- 数据表备份有前提条件: 根据不同的存储引擎有不同的区别.
- 储引擎: mysql进行数据存储的方式: 主要是两种: innodb(免费)和myisam(免费)
- 对比myisam和innodb:数据存储方式
(1)innodb:只有表结构文件,数据全部存储到ibdata1文件中
(2)myisam存储引擎:表结构文件、数据文件、索引文件全部单独分开存储
- 数据表备份只能备份存储引擎为myisam的数据库:直接拷贝三个文件到目标数据库下即可:表结构文件、数据文件以及索引文件
单表数据备份
- 单表数据备份:每次只备份一张表:只能备份数据:表结构是不能备份的
- 通常的使用:将表中的数据进行导出到文件
- 备份:从表中选出一部分数据保存到外部文件中
select */字段列表 into outfile 文件所在路径 from 数据源;
- 前提:外部文件不存在
- 文件所在路径使用字符串:即单引号进行包裹
- 高级备份:自己制定字段和行处理方式
select */字段列表
into outfile '文件所在路径'
fields 字段处理
lines 行处理
from 数据源;
fields:字段处理
enclosed by:字段使用什么内容包裹:默认是啥也没有
terminated by:字段以什么结束:默认是tab键,即"\t"
escaped by:特殊符号用什么方式处理:默认是"\\",即使用反斜杠转义
lines:行处理
starting by:每行以什么开始:默认是空字符串,即什么也没有
terminated by:每行以什么结束:默认是换行,即"\r\n"
select *
into outfile 'c:\stu.txt'
fields enclosed by '"' -- 字段以双引号包裹
terminated by '|' -- 字段以|结束
lines starting by 'START:' -- 每行以START:字符串开头
from student;
- 数据还原:将一个在外部保存的数据重新恢复到表中:前提:表结构必须存在:怎么备份的就怎么还原
load data infile '文件所在路径'
into table 表名称[(字段列表)]
fileds 字段处理
lines 行处理
- 中文乱码的原因:文件stu.tx编码字符集与mysqld.exe解码字符集不相同
- 乱码问题还是没有解决
SQL备份
- SQL备份:备份的是SQL语句:系统会对表结构以及数据进行处理,变成对应的SQL语句,然后进行备份:还原的时候只需要执行SQL指令即可:主要是针对表结构
- 备份:mysql没有提供专门的备份指令:需要利用mysql数据库提供的软件mysqldump.exe:mysqldump.exe也是一种客户端,需要操作数据库服务器:必须连接认证:
mysqldump.exe -hPup 数据库名字 [数据表1 数据表2 ...] > '外部文件';
- 单表备份
- mysqldump/mysqldump.exe -hPup 数据库名称 [数据表1 数据表2 ] > 文件所在路径:主要结尾不能有分号,如果有分号则备份不会成功
mysqldump/mysqldump.exe -hlocalhost -P3306 -uroot -proot 数据库名称 [数据表1 数据表2 ] > 文件所在路径
mysqldump/mysqldump.exe -hlocalhost -P3306 -uroot -p 数据库名称 [数据表1 数据表2 ] > 文件所在路径
>: 输入密码
- 多表备份
- 整库备份
- SQL数据还原:两种还原方式
- 方案1:使用mysql.exe客户端进行还原
mysql -hPup 数据库名字 < 文件所在路径
- 使用SQL指令还原:在mysql客户端连接下:source 文件所在路径
增量备份
- 不是针对数据或者SQL指令进行备份: 是针对mysql服务器的日志文件进行备份
- 增量备份: 指定时间段开始进行备份., 备份数据不会重复, 而且所有的操作都会备份(大项目都用增量备份)