数据库的安装

<center><font face="黑体" size=10><strong>版本控制</strong></font></center>

**文档信息**

| 文档类别 | 正式文档 |
| --- | --- |
| 文档编号 | MySQL 1.1-001 |
| 版本  | 1.1 |
| 文档名称 | MySQL DBA高级应用实战 |
| 编写负责人/编写时间 | xxx/2020 年 7 月 1 日 |
| 审核负责人/审核时间 | 年 月 日 |
| 批准人/批准时间 | 年 月 日 |
| **变更记录** |     |

| 日期  | 版本号 | 变更内容 | 修订者 |
| --- | --- | --- | --- |
| 2022.10.09 | V2.0版 | 更新MySQL为基础课程 | 刘建宏 |
|     |     |     |     |
|     |     |     |     |
|     |     |     |     |
|     |     |     |     |

# 一、数据库简介

# 第一章 数据库-理论基础

## 1.1 什么是数据库

数据: 描述事物的符号记录, 可以是数字、 文字、图形、图像、声音、语言等,数据有多种形式,它们都可以经过数字化后存入计算机。

**数据库**: 存储数据的仓库,是**长期存放在计算机内、有组织、可共享**的大量数据的集合。数据库中的数据按照一定数据模型组织、描述和存储,具有较小的冗余度,较高的独立性和易扩展性,并为各种用户共享,总结为以下几点:

* 数据结构化
* 数据的共享性高,冗余度低,易扩充
* 数据独立性高
* 数据由 DBMS 统一管理和控制(安全性、完整性、并发控制、故障恢复)

## 1.2 数据库管理系统(DBMS)

1. 数据库系统成熟的标志就是数据库管理系统的出现。**数据库管理系统**(DataBase ManagermentSystem,简称DBMS)是管理数据库的一个软件,它充当所有数据的知识库,并对它的存储、安全、一致性、并发操作、恢复和访问负责。是对数据库的一种完整和统一的管理和控制机制。数据库管理系统不仅让我们能够实现对数据的快速检索和维护,还为数据的安全性、完整性、并发控制和数据恢复提供了保证。数据库管理系统的核心是一个用来存储大量数据的数据库。

DBMS是所有数据的知识库,并对数据的存储、安全、一致性、并发操作、恢复和访问负责。

DBMS有一个数据字典(有时被称为系统表),用于贮存它拥有的每个事物的相关信息,例如名字、结构、位置和类型,这种关于数据的数据也被称为元数据(metadata)

![image20200918145314138](https://ljh-1258460726.cos.ap-nanjing.myqcloud.com//typora-pic/image-20200918145314138.png)

## 1.3 数据库与文件系统的区别

文件系统: 文件系统是操作系统用于明确存储设备(常见的是磁盘)或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。

**数据库系统**: 数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称 DBMS。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。

**对比区别:**

1. **管理对象不同**: 文件系统的管理对象是文件,并非直接对数据进行管理,不同的数据结构需要使用不同的文件类型进行保存(举例: txt 文件和 doc 文件不能通过修改文件名完成转换) ;而数据库直接对数据进行存储和管理
  
2. **存储方式不同**:文件系统使用不同的文件将数据分类(.doc/.mp4/.jpg) 保存在外部存储上;数据库系统使用**标准统一的数据类型**进行数据保存(字母、 数字、符号、时间)
  
3. **调用数据的方式不同**:文件系统使用不同的软件打开不同类型的文件;数据库系统由 DBMS 统一调用和管理。
  

![image20200918145452764](https://ljh-1258460726.cos.ap-nanjing.myqcloud.com//typora-pic/image-20200918145452764.png)

**优缺点总结:**

* 由于 DBMS 的存在,用户不再需要了解数据存储和其他实现的细节,**直接通过 DBMS 就能获取数据**,为数据的使用带来极大便利。
* 具有以数据为单位的共享性,具有**数据的并发访问**能力。 DBMS 保证了在并发访问时数据的一致性。
* **低延时访问**,典型例子就是线下支付系统的应用,支付规模巨大的时候,数据库系统的表现远远优于文件系统。
* 能够较为频繁的对数据进行修改,在需要频繁修改数据的场景下,数据库系统可以依赖 DBMS 来对数据进行操作且对**性能的消耗相比文件系统比较小**。
* 对事务的支持。 **DBMS 支持事务**,即一系列对数据的操作集合要么都完成, 要么都不完成。在DBMS上对数据的各种操作都是原子级的。

## 1.4 数据库的发展史

初始阶段-----人工管理:人力手工整理存储数据

萌芽阶段-----文件系统:使用磁盘文件来存储数据

初级阶段-----第一代数据库:出现了网状模型、层次模型的数据库

中级阶段-----第二代数据库:关系型数据库和结构化查询语言

高级阶段------新一代数据库:NOSQL型数据库

## 1.5 常见数据库

### 1.5.1 关系型数据库

关系数据库是建立在关系模型基础上的数据库,**借助于集合代数等数学概念和方法来处理数据库中的数据**。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。 简单说,关系型数据库是由多张能互相联接的二维行列表格组成的数据库。

关系模型就是指二维表格模型, 因而一个关系型数据库就是由二维表及其之间的联系组成的一个数据组织。当前主流的关系型数据库有**Oracle、DB2、Microsoft SQL Server、MicrosoftAccess、MySQL、浪潮K-DB 、武汉达梦、南大通用、人大金仓**等。

实体关系模型简称 E-R 模型,是一套数据库的设计工具,他运用真实世界中事物与关系的观念,来解释数据库中的抽象的数据架构。实体关系模型利用图形的方式(实体-关系图)来表示数据库的概念设计,有助于设计过程中的构思及沟通讨论。

### 1.5.2 非关系型数据库

非关系型数据库: 又被称为 NoSQL(Not Only SQL ),意为不仅仅是 SQL, 是一种轻量、开源、不兼容 SQL 功能的数据库, 对 NoSQL 最普遍的定义是“非关联型的”,强调 **Key-Value** 存储和文档数据库的优点,而不是单纯地反对 RDBMS(关系型数据库管理系统)。

## 1.6 DBMS支持的数据模型

![image20200918145820428](https://ljh-1258460726.cos.ap-nanjing.myqcloud.com//typora-pic/image-20200918145820428.png)

**层次模型**

若用图来表示,层次模型是一棵倒立的树。在数据库中,满足一下条件的数据模型称为层次模型:

* 有且仅有一个节点无父节点,这个节点称为根节点
* 其他节点有且仅有一个父节点。桌面型的关系模型数据库

![image20200918145916171](https://ljh-1258460726.cos.ap-nanjing.myqcloud.com//typora-pic/image-20200918145916171.png)

**网状模型**

在现实世界中,事物之间的联系更多的是非层次关系的,用层次模型表示非树型结构是很不直接的,网状模型则可以克服这一弊病。网状模型是一个网络。在数据库中,满足以下两个条件的数据模型称为网状模型。**A.允许一个以上的节点无父节点;B.一个节点可以有多于一个的父节点。**

从以上定义看出,网状模型构成了比层次结构复杂的网状结构,适宜表示多对多的联系。

![image20200918150006131](https://ljh-1258460726.cos.ap-nanjing.myqcloud.com//typora-pic/image-20200918150006131.png)

**关系模型**

以**二维表的形式表示实体和实体之间联系的数据模型**称为关系数据模型。从模型的三要素角度看,关系模型的内容为:

**数据结构**:一张二维表格。

**数据操作**:数据表的定义、检索、维护、计算等。

**数据约束条件**:表中列的取值范围即域值的限制条件。

![image20200918150047205](https://ljh-1258460726.cos.ap-nanjing.myqcloud.com//typora-pic/image-20200918150047205.png)

**概念模型:**基于客户的想法和观点所形成的认识和抽象。

实体(Entity):**客观存在的、可以被描述的事物**。例如员工、部门。

属性(Attribute):用于描述实体所具有的特征或特性。如使用**编号、姓名、工资**等来属性来描述员工的特征。

关系(Relationship):**实体之间的联系**。

一对一: 人 和 身份证

一对多: 班级 和 学生

多对多: 学生 和 课程

**数据模型:**也叫关系模型,是实体、属性、关系在数据库中的具体体现。

**关系数据库**:用于存储各种类型数据的”仓库”,是二维表的集合。

**表**:实体的映射

**行和列**:行代表一个具体的实体的数据。也叫一条记录。列是属性的映射,用于描述实体的。

主键和外键。

![image20200918150245538](https://ljh-1258460726.cos.ap-nanjing.myqcloud.com//typora-pic/image-20200918150245538.png)

## 1.7 运维对数据库的要求

### 程序员对数据库要求

基本的SQL操作、CRUD操作

多表连接查询、分组查询和子查询。

常用数据库的的单行函数。

常用数据库的基本命令。

常用数据库的开发工具。

事务概念。

索引、视图、存储过程和触发器。

### 运维对数据库要求

部署环境

数据库安装、参数配置、权限分配

备份/还原

监控

故障处理

性能优化

容灾

升级/迁移

系统用户反馈的数据库问题

### 数据库运维工作总原则

1、能不给数据库做的事情不要给数据库,数据库只做数据容器。

2、**对于数据库的变更必须有记录,可以回滚**。

## 1.8 MySQL简介

MySQL是一个小型关系数据库管理系统,开发者为瑞典MySQL AB公司。在2008年1月16号被sun公司10亿美金收购。2009年,SUN又被Oracle以74亿美金收购。

目前MySQL被广泛地应用在Internet上的中小型网站中。由于**体积小、速度快、总体拥有成本低**,尤其是**开放源代码**这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。

### 1.8.1 MySQL的特性

1. 使用**C和C++编写**,并使用了多种编译器进行测试,保证源代码的可移植性。
2. 支持AIX、BSDi、FreeBSD、HP-UX、Linux、Mac OS、Novell Netware、NetBSD、OpenBSD、OS/2 Wrap、Solaris、SunOS、Windows等多种操作系统。
3. **为多种编程语言提供了API**。这些编程语言包括C、C++、C#、Delphi、Eiffel、Java、Perl、PHP、Python、Ruby和Tcl等。
4. **支持多线程**,**充分利用CPU资源**,**支持多用户**。
5. **优化的SQL查询算法**,**有效地提高查询速度。**
6. **既能够作为一个单独的应用程序应用在客户端服务器网络环境**中,**也能够作为一个库而嵌入**到其他的软件中。
7. **提供多字符集支持,常见的编码如中文的GB 2312**、BIG5,日文的Shift_JIS等都可以用作数据表名和数据列名。
8. **提供TCP/IP、ODBC和JDBC**等多种数据库连接途径。
9. **提供用于管理、检查、优化数据库操作的管理工具**。
10. **可以处理拥有上千万条记录的大型数据库**。

## 1.9 MySQL获取

**版本介绍:**

Alpha版:开发版,公司内部使用

Beta版:完成开发后,用户体验版

RC版:生产环境发布之前的一个小版本或称候选版

GA版:正式发布版本

**MySQL官网地址:**http://www.mysql.com/

从官方网站下载安装包

从官方网站下载源代码包

从官方网站下载二进制包

从发行版本光盘中获取安装包

**MySQL 常见版本:**

MySQL Community Server 社区版本,开源免费,但不提供官方技术支持。

MySQL Enterprise Edition 企业版本,需付费,可以试用 30 天。

MySQL Cluster 集群版,开源免费。可将几个 MySQL Server 封装成一个 Server。

MySQL Cluster CGE 高级集群版,需付费

## 1.10 MySQL在企业中应用

数据库排名:http://db-engines.com/en/ranking

![image20200918151122735](https://ljh-1258460726.cos.ap-nanjing.myqcloud.com//typora-pic/image-20200918151122735.png)

**适用场景:**

互联网公司web网站系统、数据仓库系统、日志记录系统、嵌入式系统

**MySQL典型用户:**

google、雅虎、腾讯、北电、思科、YouTube、SecondLife 百度、优酷网、新浪、中国电子科学研究院

数商3.0、一大把、哈票网、短信网关、IP通讯

![image20200918151212602](https://ljh-1258460726.cos.ap-nanjing.myqcloud.com//typora-pic/image-20200918151212602.png)

MySQL在云中获得普遍采用:

![image20200918151231144](https://ljh-1258460726.cos.ap-nanjing.myqcloud.com//typora-pic/image-20200918151231144.png)

## 1.11 MySQL体系结构

Mysql是由**SQL接口,解析器,优化器,缓存,存储引擎**组成的

Connectors指的是不同语言中与SQL的交互

Management Serveices & Utilities: 系统管理和控制工具

Connection Pool:连接池。管理缓冲用户连接,线程处理等需要缓存的需求

SQL Interface:SQL接口,接受用户的SQL命令,并且返回用户需要查询的结果。比如select from就是调用SQL Interface

Parser: 解析器。SQL命令传递到解析器的时候会被解析器验证和解析。

Optimizer:查询优化器。SQL语句在查询之前会使用查询优化器对查询进行优化。

Cache和Buffer: 查询缓存。如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据.

Engine:存储引擎。存储引擎是MySql中具体的与文件打交道的子系统。

![image20200918151417236](https://ljh-1258460726.cos.ap-nanjing.myqcloud.com//typora-pic/image-20200918151417236.png)

![image20200918151425769](https://ljh-1258460726.cos.ap-nanjing.myqcloud.com//typora-pic/image-20200918151425769.png)

    -- 查看最大连接数
    show variables like '%max_connections%';

![image20200918151455542](https://ljh-1258460726.cos.ap-nanjing.myqcloud.com//typora-pic/image-20200918151455542.png)

    # 查询缓存配置情况
    show variables like '%query_cache%';

![image20200918151515909](https://ljh-1258460726.cos.ap-nanjing.myqcloud.com//typora-pic/image-20200918151515909.png)

![image20200918151528021](https://ljh-1258460726.cos.ap-nanjing.myqcloud.com//typora-pic/image-20200918151528021.png)

**一条SQL语句执行流程:**

    连接层
     (1)提供连接协议:TCP/IP 、SOCKET
     (2)提供验证:用户、密码,IP,SOCKET
     (3)提供专用连接线程:接收用户SQL,返回结果
     通过以下语句可以查看到连接线程基本情况
     mysql> show processlist;
     
    SQL层
      (1)接收上层传送的SQL语句
      (2)语法验证模块:验证语句语法,是否满足SQL_MODE
      (3)语义检查:判断SQL语句的类型
       DDL :数据定义语言
       DCL :数据控制语言
       DML :数据操作语言
       DQL: 数据查询语言
       ...
      (4)权限检查:用户对库表有没有权限
      (5)解析器:对语句执行前,进行预处理,生成解析树(执行计划),说白了就是生成多种执行方案.
      (6)优化器:根据解析器得出的多种执行计划,进行判断,选择最优的执行计划
         代价模型:资源(CPU IO MEM)的耗损评估性能好坏
      (7)执行器:根据最优执行计划,执行SQL语句,产生执行结果
     执行结果:在磁盘的xxxx位置上
      (8)提供查询缓存(默认是没开启的),会使用redis tair替代查询缓存功能
      (9)提供日志记录(日志管理章节):binlog,默认是没开启的。
    
    存储引擎层(类似于Linux中的文件系统)
        负责根据SQL层执行的结果,从磁盘上拿数据。
         将16进制的磁盘数据,交由SQL结构化化成表,
         连接层的专用线程返回给用户。

# 第二章 MySQL 安装部署

MySQL数据库存在多种版本,不同的版本在不同的平台上(OS,也就是操作系统上)安装方式可能有所不同,因此安装时一定要参考官方文档进行安装。https://dev.mysql.com/doc/

![image20200918152058594](https://ljh-1258460726.cos.ap-nanjing.myqcloud.com//typora-pic/image-20200918152058594.png)

选择需要的MySQL官方提供的不同版本,点击后在选择MySQL对应版本的,就可以找到安装教程,如意MySQL5.7为例:https://dev.mysql.com/doc/refman/5.7/en/installing.html

![image20200918152230107](https://ljh-1258460726.cos.ap-nanjing.myqcloud.com//typora-pic/image-20200918152230107.png)

可以选择平台对应的安装方式。

## 2.1 window安装MySQL

window一般我们在开发时需要安装MySQL进行软件的开发,官方提供了两种安装方式:.msi和zip方式。

### 2.1.1 安装包方式

安装方式如下:

**1、下载安装包**

官网下载对应的安装包,根据需要下载对应的版本即可: 8.0:https://cdn.mysql.com//Downloads/MySQLInstaller/mysql-installer-community-8.0.18.0.msi 5.7:https://cdn.mysql.com//Downloads/MySQLInstaller/mysql-installer-community-5.7.28.0.msi

当然也可以选择自己需要的版本:https://downloads.mysql.com/archives/installer/

**2、安装过程**

![image20200918153023381](https://ljh-1258460726.cos.ap-nanjing.myqcloud.com//typora-pic/image-20200918153023381.png)

![image20200918153036669](https://ljh-1258460726.cos.ap-nanjing.myqcloud.com//typora-pic/image-20200918153036669.png)

![image20200918153103330](https://ljh-1258460726.cos.ap-nanjing.myqcloud.com//typora-pic/image-20200918153103330.png)

![image20200918153129754](https://ljh-1258460726.cos.ap-nanjing.myqcloud.com//typora-pic/image-20200918153129754.png)

![image20200918153139557](https://ljh-1258460726.cos.ap-nanjing.myqcloud.com//typora-pic/image-20200918153139557.png)

![image20200918153150122](https://ljh-1258460726.cos.ap-nanjing.myqcloud.com//typora-pic/image-20200918153150122.png)

![image20200918153158538](https://ljh-1258460726.cos.ap-nanjing.myqcloud.com//typora-pic/image-20200918153158538.png)

![image20200918153207428](https://ljh-1258460726.cos.ap-nanjing.myqcloud.com//typora-pic/image-20200918153207428.png)

![image20200918153219274](https://ljh-1258460726.cos.ap-nanjing.myqcloud.com//typora-pic/image-20200918153219274.png)

![image20200918153229294](https://ljh-1258460726.cos.ap-nanjing.myqcloud.com//typora-pic/image-20200918153229294.png)

![image20200918153241830](https://ljh-1258460726.cos.ap-nanjing.myqcloud.com//typora-pic/image-20200918153241830.png)

![image20200918153256899](https://ljh-1258460726.cos.ap-nanjing.myqcloud.com//typora-pic/image-20200918153256899.png)

![image20200918153306872](https://ljh-1258460726.cos.ap-nanjing.myqcloud.com//typora-pic/image-20200918153306872.png)

![image20200918153322636](https://ljh-1258460726.cos.ap-nanjing.myqcloud.com//typora-pic/image-20200918153322636.png)

安装包的方式比较简单,安装提示对应的完成操作即可(不同的版本可能有所区别,但是都大同小异),这种方式适合于新手使用,一般开发者都建议使用压缩包的方式完成。

如果需要配置文件,则在MySQL主目录下创建my.ini:

    [mysqld]
    # skip_grant_tables
    # 设置3306端口
    port=3306
    # 设置mysql的安装目录
    basedir=D:\\tools\mysql-8.0.11-winx64
    # 设置mysql数据库的数据的存放目录
    datadir=D:\\tools\mysql-8.0.11-winx64\data
    # 允许最大连接数
    max_connections=200
    # 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
    max_connect_errors=10
    # 服务端使用的字符集默认为UTF8
    character-set-server=utf8mb4
    # 创建新表时将使用的默认存储引擎
    default-storage-engine=INNODB
    # 默认使用“mysql_native_password”插件认证
    default_authentication_plugin=mysql_native_password
    
    [client]
    #password = your_password
    # 设置mysql客户端连接服务端时默认使用的端口
    port=3306
    default-character-set=utf8mb4
    
    [mysql]
    # 设置mysql客户端默认字符集
    default-character-set=utf8mb4

### 2.1.2 压缩包方式

压缩包的方式在5.7之前和之后不太一样

**zip版(5.5、5.6):**

1、解压到非中文、非特殊字符路径下

2、将bin目录配置到环境变量中

3、在主目录下复制一个xx.ini,修改为my.ini,修改其中的basedir和datadir

​ basedir=mysql主目录​ datadir=mysql主目录/data

4、以管理员身份打开cmd,将路径切换到bin中,执行命令 mysqld install 新服务名 # 安装mysql服务器到系统

5、启动服务: 可以手动启动服务 也可以使用net start mysql 命令启动

6、测试 cmd中执行命令 mysql -uroot -p

**zip版(5.7及8.0):**

1. 下载位置:mysql下载位置
  
2. 解压缩后位置:D:\mysql-8.0.15-winx64
  
3. 在主目录下复制一个xx.ini,修改为my.ini,修改其中的basedir和datadir
  
  ​ basedir=mysql主目录​ datadir=mysql主目录/data
  
4. 初始化命令(记录控制台给出的随机密码,一定记住):
  
  mysqld --initialize --console
  
5. 然后先给mysql服务创建名称(方便到时候建立多个mysql服务时不冲突)
  
  mysqld --install mysql8
  
6. 启动服务:
  
  net start mysql8
  
7. 登陆旧密码登陆(第3步中的密码):
  
  mysql -u root -p
  
8. 修改密码:
  
      ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';
      
      # 之后键入修改密码的命令:
      ALTER USER root@localhost IDENTIFIED  BY 'root'
  

9. 使用新密码登陆:
  
  mysql -u root -p 新密码
  

卸载MySQL:

​ 停止服务:net stop mysql

​ 删除服务:mysqld --remove

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值