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体系结构:
连接池:数据库的连接,都先要连接到连接池; 用户身份认证、校验账号密码、权限等操作;
查询缓存:缓存所执行的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的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
MyISAM引擎:
db_itheima: 数据库文件夹。创建一个数据库,就生成一个数据库文件夹。
db.opt 存放的是数据库的编码格式。
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)
只产生了两个文件。.frm和.ibd 两个文件。
.frm 框架文件,定义数据表文件。
.ibd 索引文件+数据文件。
其实InnoDB引擎不仅仅会产生以上两个文件,其在外部data目录中也会产生一个文件(确切来说不能叫做产生文件,而应该叫做共享文件)。
所以由此可知,InnoDB引擎的数据备份不能简简单单的通过拷贝方式实现,必须使用专业的备份工具。