数据库
数据库管理系统
- Database:数据库数据的汇聚,以一定的组织形式存在介质中
- DBMS:管理数据库的软件,实现数据库的功能
- DBA:负责数据库的规划设置管理
- Application:应用程序,以数据库为核心的管理程序
基本功能
- 数据定义
- 数据处理
- 数据安全
- 数据备份
架构
- 单机架构
- 大型数据
- C/S架构
- 分布式
数据库管理系统
层次数据库
树状结构,一对多的关系。
网状数据库
多对多的关系,可能会比较乱。
RDBMS关系型数据库
关系统型数据库相关概念
- 关系:二维表包括行列。
- 行row:称之为记录
- 列column:表的列,称之属性,字段,域。
- 主键Primary key:PK 有复合主键,或者单列主键,唯一确定一个记录的字段,一张表只能有一个主键,且不能为空。
- 唯一键:一个或多个字段的组合,用于唯一确定一个记录的字段可以有多个也可以为空。
- 域:属性的取值范围。
关系型数据库理论
E-R图实体-联系模型
- 实体:客观存在的事务
- 属性:实体拥有的特征或者性质
- 联系:数据之间的关联集合,客观存在的。
-
- 实体内部的联系:组成实体实体之间的联系。
-
- 实体之间的联系,不同实体之间的联系
联系类型
- 一对一联系
- 一对多联系:外键的存在
- 多对多联系:通常增加第三张表
操作
增删改查(CURD)
数据库的规范化
数据库的规范化减少数据库的冗余,增加数据的一致性,范式级别越高冗余越低。
常用的范式:第一范式、第二范式、第三范式
遵循范式要求看业务是否需要,也不一定遵循
第一范式:1NF
没有重复的列出现,且一列中不能有多个值。
基础范式
第二范式:2NF
第二范式必须先满足第一范式,除主键外的所有属性必须依赖于主键,要求每个行且被区分,当主键为复合主键的时候必须依赖于所有的,不能是部分主键。
第三范式:3NF
必须满足第二范式,非主键属性不依赖其他非主键属性。非主键属性之间不能有从属关系。
SQL结构查询
SQL:解释器:将SQL语句解释机器语言
基本概念
- 约束:表中的数据遵循的限制
- 主键:一个或者多个字段的组合,填入的数据能在表中唯一标识,一个表只能有一个,不能为NULL。
- 唯一键:一个或者多个字段的组合,且有唯一记录,允许为NULL一个表可以存在多个。
- 外键:一个表中的数据取决于另一个表的主键或者已存在的数据
- 检查:字段值在一定范围内
- 索引:将表中的一个或者多个字段数据复制一份,按照特定排序存储
MYSQL
分支
- mysql
- mariadb
- percona Server
特性
- 开源免费
- 插件式存储引擎:
MyISAM ==> Aria
InnoDB ==> XtraDB - 单进程,多线程
- 诸多扩展和新特性
- 提供了较多的测试组件
安装方法
- 安装包程序包管理器
- 源代码编译安装
- 二进制格式的程序包,展开特定路径,简单配置后使用
RPM包安装Mysql
步骤
1、修改yum仓库
[ 12:16:03 root@CentOS7zhangbo ~]#vim /etc/yum.repos.d/mysql.repo
[mysql]
name=mysql5.7
baseurl=https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-5.7-community-el7-x86_64/
gpgcheck=0
2、然后查看安装的包
[ 12:21:05 root@CentOS7zhangbo ~]#yum list|grep mysql
3、安装包
[ 12:23:22 root@CentOS7zhangbo ~]#yum -y install mysql-community-server
4、启动mysql
[ 12:24:41 root@CentOS7zhangbo ~]#systemctl enable --now mysqld
5、查看端口号
[ 12:25:40 root@CentOS7zhangbo ~]#ss -ntl
LISTEN 0 80 [::]:3306 [::]:* #3306端口打开
6、连接数据库5.7版本会生成一个随机密码,mysql8.0以上为空密码,再5.7中再日志中生成随机密码。
查找随机密码
[ 12:29:39 root@CentOS7zhangbo ~]#grep password /var/log/mysqld.log
2021-01-28T04:25:37.914943Z 1 [Note] A temporary password is generated for root@localhost: 8sgho:/q#%S4
2021-01-28T04:27:13.622039Z 2 [Note] Access denied for user 'root'@'localhost' (using password: NO)
2021-01-28T04:27:25.839556Z 3 [Note] Access denied for user 'root'@'localhost' (using password: YES)
7、登录用随机密码登录
#注意登录进去先要求改密码
[ 12:31:15 root@CentOS7zhangbo ~]#mysql -u root -p'8sgho:/q#%S4'
#修改密码,注意分号结尾
mysql> ALTER USER root@'localhost' identified by 'Zb739182.';
或者
[ 17:12:15 root@CentOS7zhangbo ~]#mysqladmin -uroot -p'Zb739182.' password 'Zb739182@'
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.
初始化脚本提高安全性
范例:针对mysql5.6之前版本的安全加固
运行脚本:mysql_secure_installation
设置数据库管理员root口令
禁止root远程登录
删除那些anonymous账号
删除test数据库
MySQL组成
- 客户端程序
- 服务器端程序
- 用户账号
客户端程序
- mysql:交互式或者非交互式
- mysqldump:数据库备份工具
- mysqladmin:管理工具
- mysqlimport:数据导入工具
服务器端程序
- mysql_safe
- mysqld
- mysqld_multi:多实例
用户账号
mysql的用户账号由用户和主机组成
'username'@'host'
host可以限制此用户可以通过那些远程主机登录mysql服务器,且支持通配符。
% 匹配任意长度的任意字符,相当于shell中的*,例如172.16.%.%或者172.16.0.0/16
_ 匹配任意单个字符相当于shell中的?
mysql的客户端命令
- 客户端命令:本地执行,每个命令都完整或者简写。
- 服务器端命令:通过mysql协议发送并得到结果,例如得到用户,但是每个命令末尾加上;
实例:修改命令提示符
#临时修改mysql提示符
[ 18:41:50 root@CentOS7zhangbo ~]#mysql -uroot -pzb739182 --prompt="\\r:\\m:\\s> "
#持久修改提示符
#存到文件里面去/etc/my.cnf
[ 18:45:46 root@CentOS7zhangbo ~]#vim /etc/my.cnf
[mysql]
prompt=(\\u@\\h) [\\d]>\\_
实例:免用户名密码登录
[ 18:46:31 root@CentOS7zhangbo ~]#vim /etc/my.cnf
#添加一下内容,只针对mysql如果相对所有客户端使用[client]
[mysql]
user=root
password=zb739182
prompt=(\\u@\\h) [\\d]>\\_
#针对有所客户端
[client]
user=root
password=zb739182
[mysql]
prompt=(\\u@\\h) [\\d]>\\_
支持标准输入,所有可以source文件
mysqladmin
#查看myql服务是否正常如果正提示alive
[ 18:55:41 root@CentOS7zhangbo ~]#mysqladmin -uroot -pzb739182 ping
Warning: Using a password on the command line interface can be insecure.
mysqld is alive
#关闭mysql服务,
[ 18:55:50 root@CentOS7zhangbo ~]#mysqladmin -uroot -pzb739182 shutdown
#创建数据库testdb
mysqladmin -uroot -pzb739182 creat testdb
#删除数据库testdb:drop
mysqladmin -uroot -pzb739182 drop testdb
#修改root密码
mysqladmin -uroot -pzb739182 password 'Zb739182'
#日志滚动,生成新的文件flush-logs
mysqladmin -uroot -pzb739182 flush-logs
服务器配置
服务器端工作特性配置方式
1、命令行选项
2、配置文件:集中式配置文件。
配置文件:
- /etc/my.cnf #常用
- /etc/mysql/my.cnf
- ~/.my.cnf文件
文件格式
[mysqld]:服务器的配置
[mysqld_safe]
[mysql]:客户端的配置
[mysqldump]
[server]:所有服务器端
[client]:所有客户端
格式:
parameter=value
在配置文件中:
_和 - 相同
ON,TRUE 1 都是真
0,OFF,FALSE都是假意义相同,不区分大小写
关闭mysqld网络连接
实例:只能本地客户端连接,远程不等连接
[ 19:19:46 root@CentOS7zhangbo ~]#vim /etc/my.cnf
skip-networking=1
systemctl restart mysqld