·概念
备份 (backup)
将数据或者结构按照一定的格式存储到另外一个文件中,以保障阶段数据的完整性和安全性
- 将当前正确数据进行数据保存
- 备份通常是有固定的时间节点(服务器压力小的时候)
还原 (restore)
在当前数据出问题的情况下,将之前备份的数据替换掉当前数据,保证系统的持续、正确的运行
- 基于备份进行数据还原
- 备份还原不一定能够保证所有损失挽回
·表数据备份与还原
·表数据备份
将数据从表中查出,按照一定格式存储到外部文件
字段格式化: fields
- terminated by:字段数据结束后使用的符号,默认是空格
- enclosed by:字段数据包裹,默认什么都没有
- escaped by:特殊字符的处理,默认是转义 \
行格式化: lines
- terminated by;行结束符号,默认是\n,自动换行
- starting by:行开始符号,默认没有
select 字段列表/* into outfile 外部文件路径
[fields terminated by 格式 enclosed by 格式]
[lines terminated by 格式 starting by 格式]
from 数据源;
--实例
select stu_name, class_id, gender, stu_age into outfile 'D:/my_student.csv'
fields terminated by '-' enclosed by '"'
lines starting by 'GO:'
from my_student;
注:
- 数据源可以是一张表或多张表连接
- SQL有不同的语法,但是数据的识别是一致的,所以方便进行数据库间的切换
- 表数据备份通常是为了进行数据加工后存入回表中,或者到其他表
·表数据还原
load data infile '文件名' into table 表名
[fields terminated by 格式 enclosed by 格式]
[lines terminated by 格式 starting by 格式]
[(字段列表)];
数据来源:
- 表数据备份的数据文件
- 外部获取或制作的符合格式的数据
-- 实例
load data infile 'D:/my_student.csv' into table student;-- you可能因为字符集出问题
load data infile 'D:/my_student.csv' into table student charset utf8;
注意:数据加载的时候需要注意外部数据的字符集,在加载的时候需要指定字符集为外部文件数据格式,在表后增加字符集charset外部文件数据字符集
·文件备份与还原
·文件备份
直接对数据表进行文件保留,属于物理备份
●文件备份操作简单,直接将数据表(或者数据库文件夹)进行保存迁移
●MySQL中不同表存储引擎产生的文件不一致,保存手段也不一致
- InnoDB:表结构文件在ibd文件中,数据和索引存储在外部统一的ibdata文件中
- Myisam:每张表的数据、结构和索引都是独立文件,直接找到三个文件迁移即可
步骤
- 设定备份时间节点
- 设定备份文件存储位置
- 确定备份表的存储引擎
- 根据节点进行文件备份:将文件转移(复制)到其他存储位置
示例
- Myisam表的文件备份:找到三个文件,复制迁移
●sdi:表结构文件
●MYI:索引文件
●MYD:数据文件 - InnoDB表的文件备份:找到两个文件,复制迁移
●ibd:表结构文件
●ibdata:所有InnoDB数据文件
小结
- 文件备份是一种简单粗暴的数据备份方式,是直接将数据文件打包管理的方式
●Myisam存储引擎相对比较适合文件备份,因为Myisam存储引擎表文件独立,不关联其他表(但是现在默认是innoDB)
●InnoDB不适合文件备份,因为不管是备份一张表还是全部数据表, 都需要备份整个数据存储文件ibdata(适合整库迁移) - 文件备份方式非常占用磁盘空间
·文件还原
利用备份的文件,替换出现问题的文件,还原到备份前的良好状态
- 直接将备份的文件放到对应的位置即可
- 文件还原影响
●Myisam存储引擎:单表备份,单表还原,不影响其他任何数据
●InnoDB存储引擎:单表结构,整库数据,只适合整库备份还原,否则会影响其他InnoDB存储表
步骤
- 找到出问题的数据文件
●Myisam: 表结构、表数据、表索引三个文件(删掉即可)
●InnoDB:表结构、整库数据表ibdata (删掉) - 将备份数据放到相应删除的文件位置
示例
- Myisam数据备份表的数据迁移:单表迁移到不同数据库
- InnoDB数据备份完成整个数据库的迁移(包括数据库用户信息)
小结
- 文件备份的还原通常使用较少
●数据备份占用空间大,这种备份方式就少
●InnoDB的备份是针对整个数据库里所有InnoDB表,还原会覆盖掉所有不需要还原的表 - 文件备份与还原通常可以在数据迁移的情况下使用
●Myisam:独立表的迁移 (现在很少用,myisam很少用)
●InnoDB: 整个数据库的迁移
·SQL备份与还原
·SQL备份
将数据库的数据以SQL指令的形式保存到文件当中,属于逻辑备份
- SQL备份是利用Mysgldump.exe客户端实现备份
- SQL备份是将备份目标(数据表)以SQL指令形式,从表的结构、数据和其他信息保存到文件
mysqldump.exe -h -P -u -p [备份选项]数据库名字[数据表列表] > SQL文件路径
- 备份选项很多,常见的主要是数据库的备份多少
●全库备份:–all-databases 所有数据库的所有表,也不需要指定数据库名字
●单库备份:[–databases] 数据库指定数据库里的所有表(后面不要给表名)
●部分表(单表)备份:数据库名字表1[ 表2 … 表N]
步骤
- 确定备份的时间:通常是有规则的时间备份
- 确定备份的目标级别:全库(少)、单库(多)、数据表
- 使用mysqldump实现备份
(借助于Windows下的cmd访问mysgldump.exe,当前用户使用root账号)
全库备份
mysqldump -uroot -p --all-databases > D:/mysql.sql
单库备份
mysqldump -uroot -p --databases mydatabase > D:/mydatabase.sql
单表备份(没有创建数据库的指令)
mysqldump -uroot -p mydatabase my_student my_teacher > D:/singal.sql
小结
- SQL备份是一般更新频次不高的数据库的常用备份方式
- SQL备份是将数据表(库)以SQL指令形式进行备份
●结构指令:表创建(库创建)
●数据指令:insert数据 - SQL备份能够完成的备份结构和数据,而结构和数据又是独立的,所以比较方便用作备份和还原
●SQL备份比较耗费时间和占用性能,建议在闲时进行备份(用户不活跃时)
●SQL备份可以根据数据表的重要性进行频次区分备份(重要的表多备份)
·SQL还原
在需要用到SQL备份数据时,想办法让SQL执行,从而实现备份数据的还原
-
SQL还原可以使用Mysql.exe进行操作
mysql.exe -h -P -u -p [数据库名字] < SQL文件路径
-
SQL还原可以在进入到数据库之后利用SQL指令还原
source SQL文件路径;
示例
- 使用mysg|客户端对某数据库的数据文件进行单库还原
mysql.exe -uroot -p < D:/mydatabase.sql
注意:如果不是库备份,那么需要指定数据库才能执行的
mysql.exe -uroot -p mydatabase < D:/single.sql
- 在进入数据库之后,使用source指令还原SQL备份
source SQL文件路径;