第6周作业

1. 总结关系型数据库相关概念,关系,行,列,主键,惟一键,域。

关系统型数据库相关概念
关系Relational :关系就是二维表,其中:表中的行、列次序并不重要
行row:表中的每一行,又称为一条记录record
列column:表中的每一列,称为属性,字段,域field
主键Primary key:PK ,一个或多个字段的组合, 用于惟一确定一个记录的字段,一张表只有一个主 键, 主键字段不能为空NULL
唯一键Unique key: 一个或多个字段的组合,用于惟一确定一个记录的字段,一张表可以有多个UK,而 且UK字段可以为NULL
域domain:属性的取值范围,如,性别只能是’男’和’女’两个值,人类的年龄只能0-150

2. 总结关联类型,1对1,1对多,多对多关系。可以自行设计表进行解释。

一对一联系(1:1): 在表A或表B中创建一个字段﹐存储另一个表的主键值 如: 一个人只有一个学号

表名字段
学生表(Student)id(学生ID)、姓名(Name)
学籍表(Enrollment)id(学籍ID)、学生ID(StudentID)、课程ID(CourseID)、成绩(Grade)
  • 学生表中的每个学生对应学籍表中的一条记录。
  • 学籍表中的每条记录对应学生表中的一个学生。

一对多联系(1:n):外键, 如: 部门和员工
1对多(One-to-Many)关系

表名字段
班级表(Class)d(班级ID)、班级名称(Name)
学生表(Student)id(学生ID)、姓名(Name)、班级ID(ClassID)
  • 班级表中的每个班级可以对应多个学生表中的学生。
  • 学生表中的每个学生只属于一个班级。

多对多(Many-to-Many)关系

表名字段
课程表(Course)id(课程ID)、课程名称(Name)
学生表(Student)id(学生ID)、姓名(Name)
选课表(Enrollment)i学生ID(StudentID)、课程ID(CourseID)
  • 学生表中的每个学生可以选择多门课程。
  • 课程表中的每门课程可以被多个学生选择。

3. 总结mysql设计范式

目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴德斯科范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般数据库只需满足第三范式(3NF)即可规则是死的,人是活的,所以范式是否必须遵守,要看业务需要而定掌握范式的目的是为了在合适的场景下违反范式

第一范式:1NF
无重复的列,每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性,确保每一列的原子性。除去同类型的字段,就是无重复的列
说明:第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库

第二范式:2NF
第二范式必须先满足第一范式,属性完全依赖于主键,要求表中的每个行必须可以被唯一地区分,通常为表加上每行的唯一标识主键PK,非PK的字段需要与整个PK有直接相关性,即非PK的字段不能依赖于部分主键

第三范式:3NF
满足第三范式必须先满足第二范式属性,非主键属性不依赖于其它非主键属性。第三范式要求一个数据表中不包含已在其它表中已包含的非主关键字信息,非PK的字段间不能有从属关系

4. 总结Mysql多种安装方式,及安全加固,并总结mysql配置文件。安装方式介绍

程序包管理器管理的程序包
源代码编译安装
二进制格式的程序包:展开至特定路径,并经过简单配置后即可使用

5. 完成将server和client端的mysql配置默认字符集为utf8mb4;

vim /etc/my.cnf
#针对mysql客户端
[mysql]
default-character-set=utf8mb4
#针对所有MySQL客户端
[client]
default-character-set=utf8mb4

5. 掌握如何获取SQL命令的帮助,基于帮助完成添加testdb库,字符集utf8, 排序集合utf8_bin.创建host表,字段(id,host,ip,cname等)

查看SQL帮助
用help命令
在这里插入图片描述

创建testdb数据库,设置字符集为utf8,排序规则utf8_bin。

create database testdb character set utf8 collate utf8_bin;
在这里插入图片描述
创建host表,字段(id,host,ip,cname等).
create table host( id int auto_increment primary key, host varchar(255) not null, ip varchar(15)not null, cname varchar(255) ) character set utf8 collate utf8_bin;
在这里插入图片描述

6. 根据表扩展出几个语句,完成总结DDL, DML的用法,并配上示例。

DDL语句:

创建表和字段名,并设置属性

create table student( id int unsigned auto_increment primary key,name varchar(20) not null,age tinyint unsigned,gender enum(‘M’,‘F’) default ‘M’)ENGINE=InnoDB auto_increment=10 default charset=utf8;
在这里插入图片描述

查询表结构desc student;
在这里插入图片描述
查看表
在这里插入图片描述

DML语句

表插入数据
insert student (name,age)values(‘xiaohong’,20);
在这里插入图片描述
全值插入
insert student values(0,‘wang’,18,default);
在这里插入图片描述
部分列插入
insert student(id,name,age)values(default,‘lian’,19);
insert student(name,age)values(‘zhang’,20);
在这里插入图片描述
更新数据
update student set age='29’where name=‘li’;
在这里插入图片描述
添加一个标识字段实现,删除数据即修改标识字段
在这里插入图片描述

7. 总结mysql架构原理

**网络连接层:**这一层主要负责客户端连接,提供与MySQL服务器的支持。客户端连接器通过各自的API技术与MySQL建立连接,几乎支持所有主流的服务端编程技术,例如Java、C、Python、.NET等。
服务层:这是MySQL Server的核心部分,主要包括系统管理和控制工具、连接池、SQL接口、解析器、查询优化器和缓存。连接池负责存储和管理客户端与数据库的连接,一个线程负责管理一个连接。SQL接口用于接收客户端发送的各种SQL命令,并返回用户需要查询的结果。解析器负责将请求的SQL解析生成一个“解析树”,然后根据一些MySQL规则进一步检查解析树是否合法。查询优化器将“解析树”转化成执行计划,然后与存储引擎交互。缓存机制由一系列小缓存组成,如表缓存、记录缓存、权限缓存、引擎缓存等,如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。
存储引擎层:存储引擎负责MySQL中数据的存储与提取,与底层系统文件进行交互。不同的存储引擎提供的功能都集中在这一层,如存储过程、触发器、视图等。

8. 总结myisam和Innodb存储引擎的区别。

MyISAM 引擎特点
不支持事务
表级锁定
读写相互阻塞,写入不能读,读时不能写
只缓存索引
不支持外键约束
不支持聚簇索引
读取数据较快,占用资源较少
不支持MVCC(多版本并发控制机制)高并发
崩溃恢复性较差
MySQL5.5.5 前默认的数据库引擎
MyISAM 存储引擎适用场景
只读(或者写较少)
表较小(可以接受长时间进行修复操作)
MyISAM 引擎文件
tbl_name.frm 表格式定义
tbl_name.MYD 数据文件
tbl_name.MYI 索引文件

InnoDB 引擎

InnoDB引擎特点
行级锁
支持事务,适合处理大量短期事务
读写阻塞与事务隔离级别相关
可缓存数据和索引
支持聚簇索引
崩溃恢复性更好
支持MVCC高并发
从MySQL5.5后支持全文索引
从MySQL5.5.5开始为默认的数据库引擎

在这里插入图片描述

所有InnoDB表的数据和索引放置于同一个表空间中
数据文件:ibdata1, ibdata2,存放在datadir定义的目录下
表格式定义:tb_name.frm,存放在datadir定义的每个数据库对应的目录下
每个表单独使用一个表空间存储表的数据和索引
两类文件放在对应每个数据库独立目录中
数据文件(存储数据和索引):tb_name.ibd
表格式定义:tb_name.frm

9. 总结mysql索引作用,同时总结哪些查询不会使用到索引。

索引:是排序的快速查找的特殊数据结构,定义作为查找条件的字段上,又称为键key,索引通过存储引
擎实现
优点
索引可以降低服务需要扫描的数据量,减少了IO次数
索引可以帮助服务器避免排序和使用临时表
索引可以帮助将随机I/O转为顺序 I/O
缺点
占用额外空间,影响插入速度
索引类型:
B+ TREE、HASH、R TREE、FULL TEXT
聚簇(集)索引、非聚簇索引:数据和索引是否存储在一起
主键索引、二级(辅助)索引
稠密索引、稀疏索引:是否索引了每一个数据项
简单索引、组合索引: 是否是多个字段的索引
左前缀索引:取前面的字符做索引
覆盖索引:从索引中即可取出要查询的数据,性能高

不适合使用hash索引的场景

  1. 不适用于顺序查询:索引存储顺序的不是值的顺序
  2. 不支持模糊匹配
  3. 不支持范围查询
  4. 不支持部分索引列匹配查找:如A,B列索引,只查询A列索引无效

10. 总结事务ACID事务特性

ACID特性
A:atomicity 原子性;整个事务中的所有操作要么全部成功执行,要么全部失败后回滚
C:consistency一致性;数据库总是从一个一致性状态转换为另一个一致性状态,类似于能量守恒定
律(N50周启皓语录)
I:Isolation隔离性;一个事务所做出的操作在提交之前,是不能为其它事务所见;隔离有多种隔离
级别,实现并发
D:durability持久性;一旦事务提交,其所做的修改会永久保存于数据库中

11. 总结事务日志工作原理。

1 此为默认值,日志缓冲区将写入日志文件,并在每次事务后执行刷新到磁盘。 这是完全遵守ACID特性
0 提交时没有写磁盘的操作; 而是每秒执行一次将日志缓冲区的提交的事务写入刷新到磁盘。 这样可提供更
好的性能,但服务器崩溃可能丢失最后一秒的事务
2 每次提交后都会写入OS的缓冲区,但每秒才会进行一次刷新到磁盘文件中。 性能比0略差一些,但操作系
统或停电可能导致最后一秒的交易丢失

高并发业务行业最佳实践,是使用第三种折衷配置(=2):
1.配置为2和配置为0,性能差异并不大,因为将数据从Log Buffer拷贝到OS cache,虽然跨越用户态与内
核态,但毕竟只是内存的数据拷贝,速度很快
2.配置为2和配置为0,安全性差异巨大,操作系统崩溃的概率相比MySQL应用程序崩溃的概率,小很多,设置
为2,只要操作系统不奔溃,也绝对不会丢数据

12. 总结mysql日志类型,并说明如何启动日志。

事务日志:transaction log
redo log:记录某数据块被修改后的值,数据更新前先记录redo log( WALWrite Ahead Log ),可以
用来恢复未写入data file的已成功事务更新的数据
undo log:保存与执行的操作相反的操作,即记录某数据被修改前的值,可以用来在事务失败时进
行rollback
事务型存储引擎自行管理和使用,建议和数据文件分开存放
错误日志
mysqld启动和关闭过程中输出的事件信息
mysqld运行中产生的错误信息
event scheduler运行一个event时产生的日志信息
在主从复制架构中的从服务器上启动从服务器线程时产生的信息
通用日志:记录对数据库的通用操作,包括:错误的SQL语句
通用日志可以保存在:file(默认值)或 table(mysql.general_log表)
启动
默认在/var/log/mysql/error.log或/var/lib/mysql/{hostname}.err
慢查询日志
记录执行查询时长超出指定时长的操作
启动:
SET GLOBAL slow_query_log = ‘ON’;
SET GLOBAL slow_query_log_file = ‘/path/to/your/slow-query.log’;
SET GLOBAL long_query_time = 2; – 这里设置慢查询阈值为2秒
二进制日志(备份)
记录导致数据改变或潜在导致数据改变的SQL语句
记录已提交的日志
不依赖于存储引擎类型
功能:通过"重放"日志文件中的事件来生成数据副本
注意:建议二进制日志和数据文件分开存放
启动
SET GLOBAL binary_log = ‘ON’;
SET GLOBAL binary_log_file = ‘/path/to/your/binary-log.log’;

13. 总结二进制日志的不同格式的使用场景。

二进制日志记录三种格式

基于"语句"记录:statement,记录语句,默认模式( MariaDB 10.2.3 版本以下 ),日志量较少
基于"行"记录:row,记录数据,日志量较大,更加安全,建议使用的格式,MySQL8.0默认格式
混合模式:mixed, 让系统自行判定该基于哪种方式进行,默认模式( MariaDB 10.2.4及版本以上)

14. 总结mysql备份类型,并基于mysqldump, xtrabackup完成数据库备份与恢复验证。

备份类型
完全备份,部分备份
完全备份:整个数据集
部分备份:只备份数据子集,如部分库或表
完全备份、增量备份、差异备份
增量备份
:仅备份最近一次完全备份或增量备份(如果存在增量)以来变化的数据,备份较快,还原复杂
差异备份:仅备份最近一次完全备份以来变化的数据,备份较慢,还原简单
增量和差异备份的基础和前提是完全备份
注意:二进制日志文件不应该与数据文件放在同一磁盘
冷、温、热备份
冷备:读、写操作均不可进行,数据库停止服务
温备:读操作可执行;但写操作不可执行
热备:读、写操作均可执行
MyISAM:温备,不支持热备
InnoDB:都支持
物理和逻辑备份
物理备份:直接复制数据文件进行备份,与存储引擎有关,占用较多的空间,速度快
逻辑备份:从数据库中"导出"数据另存而进行的备份,与存储引擎无关,占用空间少,速度慢,可
能丢失精度

**

mysqldump,备份

准备数据
在这里插入图片描述

备份数据并删除原表

root@Rocky8 ~]#mkdir /backupmysql
[root@Rocky8 ~]#mysqldump -uroot -p SLB testdb > /backupmysql/SLB.testdb.sql
Enter password:
在这里插入图片描述

恢复备份并查看结果

mysql -uroot -p testdb < /backupmysql/testdb.student.sql
Enter password:
在这里插入图片描述

cat 备份文件 | mysql -u -p 库

cat testdb.student.sql | mysql -uroot -p testdb
Enter password:

xtrabackup备份

15. 编写crontab,每天按表备份所有mysql数据。将备份数据放在以天为时间的目录下。基于xtrabackup,每周1,周5进行完全备份,周2到周4进行增量备份

xtrabackup备份暂未理解

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值