MySQL学习笔记18

MySQL的备份与恢复:

制定数据库备份策略进行备份,并且把数据导入到测试环境。

核心技术:

1)掌握MySQL的备份工具使用及各自特点;

2)熟悉Shell脚本;

3)熟悉MySQL数据的导入导出;

场景任务:

对重要数据做好备份,是我们每个运维人员和DBA的重要职责,备份只是一种手段,我们最终目的是当数据出问题的时候能及时通过备份进行恢复,所以,现在需要对MySQL数据库进行备份策略的制定和实施。

任务要求:

1)选择合适的工具和方法对MySQL数据库进行备份。

2)编写脚本实现自动化备份。

课程目标:

1)了解MySQL常见的备份方法和类型;

2)能够使用mysqldump工具进行数据库的备份。如全库备份、库级别备份、表级别备份。

3)能够使用mysqldump工具+binlog日志实现增量备份。(高端一些)

4)理解xtrabackup工具实现全库备份和增量备份的原理和方法。

5)能够使用xtrabackup工具对数据进行全备和增备。

MySQL备份概述:

1、关于数据保存你要知道的:

思考:数据备份和数据冗余的区别:

数据备份:能够防止由于机械故障以及人为操作带来的数据丢失,例如将数据库中的数据导出成一个文件保存到其他地方。文件备份在某个地方,当服务器出现故障,我们第一时间把备份文件恢复到服务器中。

数据冗余:数据有多份冗余,但不等于数据备份,只能防止机械故障带来的数据丢失。例如:主备模式,主从架构,数据库集群。

主从架构,两个服务器,放着相同的数据,当主服务器出现故障的时候,立即调用从服务器。实时切换。这个叫冗余操作。

理论上,数据备份和数据冗余都要有的。

2、备份什么?

数据库:一堆物理文件的集合;日志文件(二进制文件)+ 数据文件 + 配置文件。

1)数据文件;

2)配置文件;my.cnf

3)日志文件(二进制日志文件)

MySQL体系结构:

MySQL学习笔记18_第1张图片

连接池:数据库的连接,都先要连接到连接池; 用户身份认证、校验账号密码、权限等操作;

查询缓存:缓存所执行的select语句以及该语句的结果集。第一次查询时间稍微长点,第二次查询时间就非常短。缓存还没有失效。缓存可以加快查询的速度。

mysql> select * from tb_student;
+----+-----------+------+--------+---------+
| id | name      | age  | gender | subject |
+----+-----------+------+--------+---------+
|  1 | 孙行者    |  254 | 男     | ui      |
|  2 | 八戒      |  250 | 男     | python  |
|  3 | 唐僧      |   30 | 男     | yunwei  |
|  4 | 沙僧      |  150 | 男     | java    |
|  5 | 小白龙    |  100 | 男     | yunwei  |
|  6 | 白骨精    |   28 | 女     | ui      |
|  7 | 兔子精    |   22 | 女     | yunwei  |
|  8 | 狮子精    |   33 | 男     | yunwei  |
+----+-----------+------+--------+---------+
8 rows in set (0.00 sec)

分析器:词法分析、语法分析;主要是判断sql语句是否正确,是否符合MySQL的语法。

优化器:选择最优的执行方案去执行器中执行。select有很多执行方式。加快数据的查询。

执行器:检查用户权限、如果有权限,就去调用引擎接口,返回接口的执行结果。

存储引擎层:InnoDB、MyISAM、NDB...在MySQL中,我们可以使用show engines查看当前数据库版本支持哪些引擎。

简单来说,存储引擎就是数据在底层的存储方式。比较常见的是InnoDB和MyISAM。

MySQL学习笔记18_第2张图片

存储引擎层:

MySQL的MyISAM和InnoDB引擎的区别:

 MyISAM引擎:擅长数据的查询操作,支持全文索引;

InnoDB引擎:支持事务处理,支持行级锁,支持外键;

CID字段,是分类表的主键、产品表的从键。关联删除。代码的方式进行关联操作。

备份的时候主要是围绕这两个引擎进行的。

MEMORY: 基于Hash,存储在内存中,临时不常用的放在临时表中。

BLACKHOLE:5.7版本出现这个引擎。/dev/null, 写到这个里面的数据都会消失。

存储层(数据文件和日志文件)

问题:存储引擎到底是如何保存数据文件的。

mysql> create database db_itheima default charset=utf8;
Query OK, 1 row affected (0.00 sec)

提出问题:我能不能不进入MySQL终端,然后在命令行中直接创建一个数据库呢?-e

MySQL学习笔记18_第3张图片

MyISAM引擎: 

db_itheima: 数据库文件夹。创建一个数据库,就生成一个数据库文件夹。

MySQL学习笔记18_第4张图片

db.opt 存放的是数据库的编码格式。

 

MySQL学习笔记18_第5张图片

MyISAM引擎会生成三个文件。

.frm: 框架文件,定义数据表结构。

.MYI  索引文件INDEX:主要用于存放索引文件。目录索引、主键索引。

.MYD 数据文件。

把三个文件备份下,找个位置可以还原的。这个机制比较简单。

InnoDB引擎(默认引擎):

mysql> create table tb_user (
    -> id int,
    -> name char(1)
    -> )engine=innodb default charset=utf8;
Query OK, 0 rows affected (0.01 sec)


mysql> show create table tb_user;
+---------+--------------------------------------------------------------------------------------------------------------------------+
| Table   | Create Table                                                                                                             |
+---------+--------------------------------------------------------------------------------------------------------------------------+
| tb_user | CREATE TABLE `tb_user` (
  `id` int(11) DEFAULT NULL,
  `name` char(1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+---------+--------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

MySQL学习笔记18_第6张图片

只产生了两个文件。.frm和.ibd 两个文件。

.frm 框架文件,定义数据表文件。

.ibd  索引文件+数据文件。

MySQL学习笔记18_第7张图片

其实InnoDB引擎不仅仅会产生以上两个文件,其在外部data目录中也会产生一个文件(确切来说不能叫做产生文件,而应该叫做共享文件)。

所以由此可知,InnoDB引擎的数据备份不能简简单单的通过拷贝方式实现,必须使用专业的备份工具。

你可能感兴趣的:(MySQL,mysql)