第六周作业

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

    关系 Relational :关系就是二维表,表中的行、列次序并不重要

    行 row :表中的每一行,又称为一条记录record

    列 column :表中的每一列,称为属性,字段,域field

    主键 Primary key :PK ,一个或多个字段的组合,用于惟一确定一个记录的字段,一张表只有一个主键,主键字段不能为空NULL

    唯一键 Unique key :一个或多个字段的组合,用于惟一确定一个记录的字段,一张表可以有多个UK,而且UK字段可以为NULL

    域 domain :属性的取值范围,如:性别只能是’男’和’女’两个值,人类的年龄只能0-150

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

    1对1:一个表中的一个记录对应另一个表中的一个主键记录,相当于一个名字对应一个身份证号码

    1对多:一个记录对应另一表中多个记录,相当于公司和员工的关系,一个公司有多个员工

    多对多:增加第三张关系表,关系表就是存放了存在多对多关系的两张表的外键

  3. 总结mysql设计范式

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

    说明:第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据 库

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

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

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

    安装方式:

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

    安全加固:初始化脚本提高安全性;运行脚本:mysql_secure_installation;设置数据库管理员root口令;禁止root远程登录;删除anonymous用户帐号;删除test数据库

    mysql配置文件:

    /etc/mysql/my.cnf
    配置文件格式:
    [mysqld]
    [mysqld_safe]
    [mysqld_multi]
    [mysql]
    [mysqladmin]
    [mysqldump]
    [server]
    [client]

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

      server
      vim /etc/my.cnf
      [mysqld]
      character-set-server=utf8mb4
      
      client
      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等)

    Type ‘help;’ or ‘\h’ for help

    mysql> create database testdb character set utf8 collate utf8_bin;
    Query OK, 1 row affected, 2 warnings (0.02 sec)
    mysql> use testdb
    mysql> create table host (
        -> id int unsigned auto_increment primary key,
        -> host varchar(20),
        -> ip varchar(15),
        -> cname varchar(20)
        -> );
    Query OK, 0 rows affected (0.02 sec)
    
  6. 根据表扩展出几个语句,完成总结DDL, DML的用法,并配上示例。

    DDL

    表:二维关系

    设计表:遵循规范

    定义:字段,索引

    字段:字段名,字段数据类型,修饰符

    约束,索引:应该创建在经常用作查询条件的字段上

    DML: INSERT, DELETE, UPDATE

    新建数据库
    mysql> create database yu
        -> ;
    Query OK, 1 row affected (0.01 sec)
    
    修改数据库
    mysql> ALTER DATABASE yu character set utf8 COLLATE utf8_bin;
    Query OK, 1 row affected, 2 warnings (0.01 sec)
    
    删除数据库
    mysql> drop database yu;
    Query OK, 0 rows affected (0.02 sec)
    
    新建表
    mysql> use yu;
    Database changed
    mysql> create table student ( id int primary key, name varchar(20) not null);
    Query OK, 0 rows affected (0.02 sec)
    
    修改表
    mysql> alter table student rename st;
    Query OK, 0 rows affected (0.02 sec)
    
    删除表
    mysql> drop table st;
    Query OK, 0 rows affected (0.01 sec)
    
    INSERT 语句
    mysql> insert student values(1,'yuwan');
    Query OK, 1 row affected (0.01 sec)
    
    DELETE语句
    mysql> delete from student where name='yuwan';
    Query OK, 1 row affected (0.00 sec)
    
    UPDATE语句
    mysql> update student set name='yu' where name='yuwan';
    Query OK, 1 row affected (0.00 sec)
    Rows matched: 1  Changed: 1  Warnings: 0
    
  7. 总结mysql架构原理

    第一层:连接层。所包含的服务并不是MySQL所独有的技术。它们都是服务于C/S程序或者是这些程序所需要的 :连接处理,身份验证,安全性等等。

    第二层:核心服务层 。这是MySQL的核心部分。通常叫做 SQL Layer。在 MySQL据库系统处理底层数据之前的所有工作都是在这一层完成的,包括权限判断, sql解析,行计划优化, query cache 的处理以及所有内置的函数(如日期,时间,数学运算,加密)等等。各个存储引擎提供的功能都集中在这一层,如存储过程,触发器,视图等。

    第三层:存储引擎层。通常叫做StorEngine Layer ,也就是底层数据存取操作实现部分,由多种存储引擎共同组成。它们负责存储和获取所有存储在MySQL中的数据。就像Linux众多的文件系统 一样。每个存储引擎都有自己的优点和缺陷。服务器是通过存储引擎API来与它们交互的。这个接口隐藏 了各个存储引擎不同的地方。对于查询层尽可能的透明。这个API包含了很多底层的操作。如开始一个事 物,或者取出有特定主键的行。存储引擎不能解析SQL,互相之间也不能通信。仅仅是简单的响应服务器 的请求。

    第四层:数据存储层。主要是将数据存储在运行于裸设备的文件系统之上,并完成与存储引擎的交互。

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

    MyISAM 引擎特点

    不支持事务

    表级锁定

    读写相互阻塞,写入不能读,读时不能写

    只缓存索引

    不支持外键约束

    不支持聚簇索引

    读取数据较快,占用资源较少

    不支持MVCC(多版本并发控制机制)高并发

    崩溃恢复性较差

    MySQL5.5.5 前默认的数据库引擎

    InnoDB引擎特点

    行级锁

    支持事务,适合处理大量短期事务

    读写阻塞与事务隔离级别相关

    可缓存数据和索引

    支持聚簇索引

    崩溃恢复性更好

    支持MVCC高并发

    从MySQL5.5后支持全文索引

    从MySQL5.5.5开始为默认的数据库引擎

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

    mysql索引作用:

    索引可以降低服务需要扫描的数据量,减少了IO次数

    索引可以帮助服务器避免排序和使用临时表

    索引可以帮助将随机I/O转为顺序 I/O

    以下查询不会使用到索引

    索引列参与计算,不走索引

    索引列使用函数,可能不走索引

    索引列使用 like 语句,可能不走索引

    数据类型隐式转换**,字符串列与数字直接比较,**不走索引

    尽量避免 OR 操作,只要有一个字段没有索引,该语句就不走索引

    where id !=2 或者 where id <> 2,不走索引!

    is null,is not null也无法使用索引,不走索引!

    索引列使用 in 语句,可能不走索引

  10. 总结事务ACID事务特性

    ACID特性:

    • A:atomicity 原子性;整个事务中的所有操作要么全部成功执行,要么全部失败后回滚
    • C:consistency 一致性;数据库总是从一个一致性状态转换为另一个一致性状态
    • I:isolation 隔离性;一个事务所做出的操作在提交之前,是不能为其它事务所见;隔离有多种隔离级,实现并发
    • D:durability 持久性;一旦事务提交,其所做的修改会永久保存于数据库中
  11. 总结事务日志工作原理。

    redo log:记录某数据块被修改后的值,数据更新前先记录redo log( WALWrite Ahead Log ),可以

    用来恢复未写入data file的已成功事务更新的数据

    undo log:保存与执行的操作相反的操作,即记录某数据被修改前的值,可以用来在事务失败时进

    行rollback

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

    事务日志:transaction log事务日志的写入类型为"追加",因此其操作为"顺序IO";通常也被称为:预写式日志 write ahead logging

    事务日志文件: ib_logfile0, ib_logfile1

    错误日志error log

    通用日志general log

    慢查询日志 slow query log

    二进制日志 binary log

    中继日志reley log,在主从复制架构中,从服务器用于保存从主服务器的二进制日志中读取的事件

    启用日志: SET GLOBAL general_log = ‘ON’;

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

    基于"语句"记录:statement,记录语句,默认模式( MariaDB 10.2.3 版本以下 ),日志量较少

    基于"行"记录:row,记录数据,日志量较大,更加安全,建议使用的格式,MySQL8.0默认格式

    混合模式:mixed, 让系统自行判定该基于哪种方式进行,默认模式( MariaDB 10.2.4及版本以上

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

    • 完全备份,部分备份
      完全备份:整个数据集
      部分备份:只备份数据子集,如部分库或表
    • 完全备份、增量备份、差异备份
      增量备份:仅备份最近一次完全备份或增量备份(如果存在增量)以来变化的数据,备份较快, 还原复杂
      差异备份:仅备份最近一次完全备份以来变化的数据,备份较慢,还原简单
      增量和差异备份的基础和前提是完全备份
      注意:二进制日志文件不应该与数据文件放在同一磁盘
    • 冷、温、热备份
      冷备:读、写操作均不可进行,数据库停止服务
      温备:读操作可执行;但写操作不可执行
      热备:读、写操作均可执行
      MyISAM:温备,不支持热备
      InnoDB:都支持
    • 物理和逻辑备份
      物理备份:直接复制数据文件进行备份,与存储引擎有关,占用较多的空间,速度快
      逻辑备份:从数据库中"导出"数据另存而进行的备份,与存储引擎无关,占用空间少,速度慢,可 能丢失精度
    mysqldump备份
    [root@centos8 ~]mysqldump -uroot -pmagedu -A -F --single-transaction --masterdata=2 |gzip > /backup/all-`date +%F`.sql.gz
     
    还原
    [root@centos8 backup]dnf install mariadb-server
    [root@centos8 backup]gzip -d all-2023-11-30.sql.gz
    [root@centos8 ~]mysql
    MariaDB [(none)]> set sql_log_bin=off;
    MariaDB [(none)]> source /backup/all-2023-11-30.sql
    MariaDB [(none)]> set sql_log_bin=on;
    
    Xtrabackup备份
    [root@centos8 ~]mkdir /backup
    [root@centos8 ~]xtrabackup -uroot -pmagedu --backup --target-dir=/backup/base
    目标主机无需创建/backup目录,直接复制目录本身
    [root@centos8 ~]scp -r /backup/   目标主机:/
    [root@centos8 ~]yum -y install percona-xtrabackup-24-2.4.20-1.el8.x86_64.rpm
    [root@centos8 ~]xtrabackup --prepare --target-dir=/backup/base
    [root@centos8 ~]xtrabackup --copy-back --target-dir=/backup/base
    [root@centos8 ~]chown -R mysql:mysql /var/lib/mysql
    [root@centos8 ~]service mysqld start 
    
  15. 编写crontab,每天按表备份所有mysql数据。将备份数据放在以天为时间的目录下。基于xtrabackup,每周1,周5进行完全备份,周2到周4进行增量备份

#!/bin/bash
TIME=`date +%F_%H-%M-%S`
DIR=/backup
DB=hellodb
PASS=magedu
[ -d $DIR ] || mkdir $DIR
mysqldump -uroot -p "$PASS" -F -E -R --triggers --single-transaction --master-
data=2 --default-character-set=utf8 -q -B $DB | gzip >
${DIR}/${DB}_${TIME}.sql.gz

分库备份并压缩
[root@centos8 ~]#for db in `mysql -uroot -e 'show databases'|grep -Ewv
'^(Database|information_schema|performance_schema|sys)$'`;do mysqldump -B $db |
gzip > /backup/$db.sql.gz;done
[root@centos8 ~]#mysql -uroot -e 'show databases'|grep -Ewv
'^(Database|information_schema|performance_schema\sys)$'|while read db;do
mysqldump -B $db | gzip > /backup/$db.sql.gz;done
[root@centos8 ~]#mysql -uroot -e 'show databases'|grep -Ewv
'^(Database|information_schema|performance_schema|sys)$' | sed -rn 's#
(.*)#mysqldump -B \1 | gzip > /backup/\1.sql.gz#p' |bash
[root@centos8 ~]#mysql -uroot -e 'show databases'|sed -rn
'/^(Database|information_schema|performance_schema|sys)$/!s#(.*)#mysqldump -B \1
| gzip > /backup/\1.sql.gz#p' |bash
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值