MySQL学习笔记(12)--数据备份与还原

·概念

备份 (backup)
将数据或者结构按照一定的格式存储到另外一个文件中,以保障阶段数据的完整性和安全性

  1. 将当前正确数据进行数据保存
  2. 备份通常是有固定的时间节点(服务器压力小的时候)

还原 (restore)
在当前数据出问题的情况下,将之前备份的数据替换掉当前数据,保证系统的持续、正确的运行

  1. 基于备份进行数据还原
  2. 备份还原不一定能够保证所有损失挽回

·表数据备份与还原

·表数据备份

将数据从表中查出,按照一定格式存储到外部文件
字段格式化: fields

  1. terminated by:字段数据结束后使用的符号,默认是空格
  2. enclosed by:字段数据包裹,默认什么都没有
  3. escaped by:特殊字符的处理,默认是转义 \

行格式化: lines

  1. terminated by;行结束符号,默认是\n,自动换行
  2. 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;

在这里插入图片描述
注:

  1. 数据源可以是一张表或多张表连接
  2. SQL有不同的语法,但是数据的识别是一致的,所以方便进行数据库间的切换
  3. 表数据备份通常是为了进行数据加工后存入回表中,或者到其他表

·表数据还原

load data infile '文件名' into table 表名
[fields terminated by 格式 enclosed by 格式]
[lines terminated by 格式 starting by 格式]
[(字段列表)];

数据来源:

  1. 表数据备份的数据文件
  2. 外部获取或制作的符合格式的数据
-- 实例
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中不同表存储引擎产生的文件不一致,保存手段也不一致

  1. InnoDB:表结构文件在ibd文件中,数据和索引存储在外部统一的ibdata文件中
  2. Myisam:每张表的数据、结构和索引都是独立文件,直接找到三个文件迁移即可

步骤

  1. 设定备份时间节点
  2. 设定备份文件存储位置
  3. 确定备份表的存储引擎
  4. 根据节点进行文件备份:将文件转移(复制)到其他存储位置

示例

  1. Myisam表的文件备份:找到三个文件,复制迁移
    ●sdi:表结构文件
    ●MYI:索引文件
    ●MYD:数据文件
  2. InnoDB表的文件备份:找到两个文件,复制迁移
    ●ibd:表结构文件
    ●ibdata:所有InnoDB数据文件

小结

  1. 文件备份是一种简单粗暴的数据备份方式,是直接将数据文件打包管理的方式
    ●Myisam存储引擎相对比较适合文件备份,因为Myisam存储引擎表文件独立,不关联其他表(但是现在默认是innoDB)
    ●InnoDB不适合文件备份,因为不管是备份一张表还是全部数据表, 都需要备份整个数据存储文件ibdata(适合整库迁移)
  2. 文件备份方式非常占用磁盘空间

·文件还原

利用备份的文件,替换出现问题的文件,还原到备份前的良好状态

  1. 直接将备份的文件放到对应的位置即可
  2. 文件还原影响
    ●Myisam存储引擎:单表备份,单表还原,不影响其他任何数据
    ●InnoDB存储引擎:单表结构,整库数据,只适合整库备份还原,否则会影响其他InnoDB存储表

步骤

  1. 找到出问题的数据文件
    ●Myisam: 表结构、表数据、表索引三个文件(删掉即可)
    ●InnoDB:表结构、整库数据表ibdata (删掉)
  2. 将备份数据放到相应删除的文件位置

示例

  1. Myisam数据备份表的数据迁移:单表迁移到不同数据库
  2. InnoDB数据备份完成整个数据库的迁移(包括数据库用户信息)

小结

  1. 文件备份的还原通常使用较少
    ●数据备份占用空间大,这种备份方式就少
    ●InnoDB的备份是针对整个数据库里所有InnoDB表,还原会覆盖掉所有不需要还原的表
  2. 文件备份与还原通常可以在数据迁移的情况下使用
    ●Myisam:独立表的迁移 (现在很少用,myisam很少用)
    ●InnoDB: 整个数据库的迁移

·SQL备份与还原

·SQL备份

将数据库的数据以SQL指令的形式保存到文件当中,属于逻辑备份

  1. SQL备份是利用Mysgldump.exe客户端实现备份
  2. SQL备份是将备份目标(数据表)以SQL指令形式,从表的结构、数据和其他信息保存到文件 mysqldump.exe -h -P -u -p [备份选项]数据库名字[数据表列表] > SQL文件路径
  3. 备份选项很多,常见的主要是数据库的备份多少
    ●全库备份:–all-databases 所有数据库的所有表,也不需要指定数据库名字
    ●单库备份:[–databases] 数据库指定数据库里的所有表(后面不要给表名)
    ●部分表(单表)备份:数据库名字表1[ 表2 … 表N]

步骤

  1. 确定备份的时间:通常是有规则的时间备份
  2. 确定备份的目标级别:全库(少)、单库(多)、数据表
  3. 使用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
在这里插入图片描述

小结

  1. SQL备份是一般更新频次不高的数据库的常用备份方式
  2. SQL备份是将数据表(库)以SQL指令形式进行备份
    ●结构指令:表创建(库创建)
    ●数据指令:insert数据
  3. SQL备份能够完成的备份结构和数据,而结构和数据又是独立的,所以比较方便用作备份和还原
    ●SQL备份比较耗费时间和占用性能,建议在闲时进行备份(用户不活跃时)
    ●SQL备份可以根据数据表的重要性进行频次区分备份(重要的表多备份)

·SQL还原

在需要用到SQL备份数据时,想办法让SQL执行,从而实现备份数据的还原

  1. SQL还原可以使用Mysql.exe进行操作
    mysql.exe -h -P -u -p [数据库名字] < SQL文件路径

  2. SQL还原可以在进入到数据库之后利用SQL指令还原

    source SQL文件路径; 
    

示例

  1. 使用mysg|客户端对某数据库的数据文件进行单库还原
    mysql.exe -uroot -p < D:/mydatabase.sql
    注意:如果不是库备份,那么需要指定数据库才能执行的
    mysql.exe -uroot -p mydatabase < D:/single.sql
  2. 在进入数据库之后,使用source指令还原SQL备份
    source SQL文件路径; 
    
发布了19 篇原创文章 · 获赞 20 · 访问量 9533

猜你喜欢

转载自blog.csdn.net/qq_39323164/article/details/104138195
今日推荐