数据库介绍与数据库安装

一、课前介绍

数据要想永久保存,都是保存于文件中,毫无疑问,一个文件仅仅只能存在于某一台机器上。
如果我们暂且忽略直接基于文件来存取数据的效率问题,并且假设程序所有的组件都运行在一台机器上,那么用文件存取数据,并没有问题。很不幸,这些假设都是你自己意淫出来的,上述假设存在以下几个问题。。。。。。

1、程序所有的组件就不可能运行在一台机器上

因为这台机器一旦挂掉则意味着整个软件的崩溃,并且程序的执行效率依赖于承载它的硬件,而一台机器机器的性能总归是有限的,受限于目前的硬件水平,就一台机器的性能垂直进行扩展是有极限的。于是我们只能通过水平扩展来增强我们系统的整体性能,这就需要我们将程序的各个组件分布于多台机器去执行。

2、数据安全问题

#根据1的描述,我们将程序的各个组件分布到各台机器,但需知各组件仍然是一个整体,言外之意,所有组件的数据还是要共享的。但每台机器上的组件都只能操作本机的文件,这就导致了数据必然不一致。
#于是我们想到了将数据与应用程序分离:把文件存放于一台机器,然后将多台机器通过网络去访问这台机器上的文件(用socket实现),即共享这台机器上的文件,共享则意味着竞争,会发生数据不安全,需要加锁处理。。。。

3、并发

根据2的描述,我们必须写一个socket服务端来管理这台机器(数据库服务器)上的文件,然后写一个socket客户端,完成如下功能:
1.远程连接(支持并发)
2.打开文件
3.读写(加锁)
4.关闭文件

总结:

我们在编写任何程序之前,都需要事先写好基于网络操作一台主机上文件的程序(socket服务端与客户端程序),于是有人将此类程序写成一个专门的处理软件,这就是mysql等数据库管理软件的由来,但mysql解决的不仅仅是数据共享的问题,还有查询效率,安全性等一系列问题,总之,把程序员从数据管理中解脱出来,专注于自己的程序逻辑的编写。

二、数据库概述

1、什么是数据(Data)

数据库从字面上的理解就是数据的仓库,其实我们平时说的数据库是指数据库管理系统(Database Management System),它是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称DBMS。严格来说数据库是数据库管理系统的实例,一个数据库管理系统可以有多个数据库实例。
数据库系统(Database System),是由数据库及其管理软件组成的系统。
数据库系统是为适应数据处理的需要而发展起来的一种较为理想的数据处理系统,也是一个为实际可运行的存储、维护和应用系统提供数据的软件系统,是存储介质 、处理对象和管理系统的集合体。

2、基本定义

数据库系统DBS(Data Base System,简称DBS)通常由软件、数据库和数据管理员组成。其软件主要包括操作系统、各种宿主语言、实用程序以及数据库管理系统。数据库由数据库管理系统统一管理,数据的插入、修改和检索均要通过数据库管理系统进行。数据管理员负责创建、监控和维护整个数据库,使数据能被任何有权使用的人有效使用。数据库管理员一般是由业务水平较高、资历较深的人员担任。

数据库系统有大小之分,大型数据库系统有SQL Server、Oracle、DB2等,中小型数据库系统有Foxpro、Access、MySQL。

数据库构成

数据库系统一般由4部分组成:
1.数据库(database,DB)是指长期存储在计算机内的,有组织,可共享的数据的集合。数据库中的数据按一定的数学模型组织、描述和存储,具有较小的冗余,较高的数据独立性和易扩展性,并可为各种用户共享。

2.硬件:构成计算机系统的各种物理设备,包括存储所需的外部设备。硬件的配置应满足整个数据库系统的需要。

3.软件:包括操作系统、数据库管理系统及应用程序。数据库管理系统(database management system,DBMS)是数据库系统的核心软件,是在操作系统的支持下工作,解决如何科学地组织和存储数据,如何高效获取和维护数据的系统软件。其主要功能包括:数据定义功能、数据操纵功能、数据库的运行管理和数据库的建立与维护。

4.人员:主要有4类。第一类为系统分析员和数据库设计人员:系统分析员负责应用系统的需求分析和规范说明,他们和用户及数据库管理员一起确定系统的硬件配置,并参与数据库系统的概要设计。数据库设计人员负责数据库中数据的确定、数据库各级模式的设计。第二类为应用程序员,负责编写使用数据库的应用程序。这些应用程序可对数据进行检索、建立、删除或修改。第三类为最终用户,他们利用系统的接口或查询语言访问数据库。第四类用户是数据库管理员(data base administrator,DBA),负责数据库的总体信息控制。DBA的具体职责包括:具体数据库中的信息内容和结构,决定数据库的存储结构和存取策略,定义数据库的安全性要求和完整性约束条件,监控数据库的使用和运行,负责数据库的性能改进、数据库的重组和重构,以提高系统的性能。

数据库特点

1 数据结构化(如上图odboy_stu)
2 数据共享,冗余度低,易扩充
3 数据独立性高
4 数据由DBMS统一管理和控制
  a:数据的安全性保护
  b:数据的完整性检查
  c:并发控制
  d:数据库恢复

三、数据库分类

关键词
MySQL:The world’s most popular open source database(全世界最流行的开源数据库)
postgresql: The World’s Most Advanced Open Source Relational Database(全世界最先进的开源数据库)

热度排行
数据库种类很多,我们平时接触最多的恐怕就是Oracle数据库,或者MySQL数据。两者是应用最广泛的关系型数据。如图1是2020年12月份使用情况排名,从排名也可以看出上述两个数据库分别排第一名和第二名

数据库管理软件分类

分两大类:
  关系型:如sqllite,db2,oracle,access,sql server,MySQL,注意:sql语句通用
  非关系型:mongodb,redis,memcache

关系型数据库
字段:表的标题
记录:文件中的一行内容
表:文件
库:文件夹
数据库管理软件:本质就是一个socket软件
数据库服务器:运行数据库管理软件服务端的计算机
这种类型的数据库是最古老的数据库类型,关系型数据库模型是把复杂的数据结构归结为简单的二元关系(即二维表格形式), 如图2是一个二维表的实例。通常该表第一行为字段名称,描述该字段的作用,下面是具体的数据。在定义该表时需要指定字段的名称及类型。
在这里插入图片描述
在关系型数据库中,对数据的操作几乎全部建立在一个或多个关系表格上。在大型系统中通常有多个表,且表之间有各种关系。实际使用就是通过对这些关联的表格分类、合并、连接或选取等运算来实现数据库的管理。

键值存储数据库:
键值数据库是一种非关系数据库,它使用简单的键值方法来存储数据。键值数据库将数据存储为键值对集合,其中键作为唯一标识符。
在这里插入图片描述
如图是某公有云的键值存储示意图,其中键包含分区键和排序键,而值包含更多的实际信息。比如实际使用是可以以学号为键,姓名、性别、年龄和班级等信息为值进行存储。实际存储形式很灵活,是业务需求自行定义即可。

列存储数据库:

列式存储(column-based)是相对于传统关系型数据库的行式存储(Row-basedstorage)来说的。简单来说两者的区别就是对表中数据的存储形式的差异。
如图是传统行数据库和列数据库表中数据在磁盘上的存储形式的差异对比。对于行存储数据库,表中的数据是以行为单位逐行存储在磁盘上的;而对于列存储数据库,表中的数据则是以列为单位逐列存储在磁盘中。

列存储解决的主要问题是数据查询问题。我们知道,平时的查询大部分都是条件查询,通常是返回某些字段(列)的数据。对于行存储数据,数据读取时通常将一行数据完全读出,如果只需要其中几列数据的情况,就会存在冗余列,出于缩短处理时间的考量,消除冗余列的过程通常是在内存中进行的。而列存储,每次读取的数据是集合的一段或者全部,不存在冗余性问题。这样,通过这种存储方式的调整,使得查询性能得到极大的提升。

面向文档数据库:
此类数据库可存放并获取文档,可以是XML、JSON、BSON等格式,这些文档具备可述性(self-describing),呈现分层的树状结构(hierarchical tree data structure),可以包含映射表、集合和纯量值。数据库中的文档彼此相似,但不必完全相同。文档数据库所存放的文档,就相当于键值数据库所存放的“值”。文档数据库可视为其值可查的键值数据库。

图形数据库:
图形数据库顾名思义,就是一种存储图形关系的数据库。图形数据库是NoSQL数据库的一种类型,它应用图形理论存储实体之间的关系信息。关系型数据用于存储明确关系的数据,但对于复杂关系的数据存储却有些力不从心。如图这种人物之间的关系,如果用关系型数据库则非常复杂,用图形数据库将非常简单。在这里插入图片描述
搜索引擎存储:
搜索引擎数据库是应用在搜索引擎领域的数据存储形式,由于搜索引擎会爬取大量的数据,并以特定的格式进行存储,这样在检索的时候才能保证性能最优。

不同类型数据库常用软件(了解)

关系型数据库:
关系型数据库最为经典的开源软件就是MySQL,它是最流行的开源关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。
在这里插入图片描述
SUN被甲骨文收购后,MySQL 的原创人员有拉出另外一个分支,命名MariaDB 。该数据库被维基百科,Facebook 甚至 Google 等技术巨头使用。 MariaDB 是一种可为 MySQL 提供插件替换功能的数据库服务器。开发人员的首要关注点是安全性,在每个版本发布时,开发人员还会合并所有 MySQL 的安全修补程序,并在需要时对其进行增强。

除此之外,还有很多开源的关系型数据库,比如经典的文件数据库SQLite和针对Web服务进行优化的CUBRID 等。

键值存储数据库
键值数据库目前应用最多的应该是Redis,Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。Redis通常最为普通关系型数据库的缓存层,用于降低数据库的访问压力,提升系统性能。
在这里插入图片描述

列存储数据库:
列存储数据库中最为出名的恐怕就是HBase了,HBase是 BigTable 的开源 java 版本。是建立在 HDFS 之上,提供高可靠性、高性能、列存储、 可伸缩、实时读写 NoSQL 的数据库系统。

面向文档数据库:
文档数据库种类繁多,包括MongoDB、CouchDB、 Terrastore、RavenDB和OrientDB等多大十几个。其中MongoDB是目前最为流行的文档数据库,其介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。其最大的特点是分布式部署,可以随着负载的增大动态扩容,从而满足企业业务增长的需求。
在这里插入图片描述
图形数据库:
图形种类很多,比如Neo4J、ArangoDB、OrientDB、FlockDB、GraphDB、InfiniteGraph、Titan和Cayley等。其中Neo4j 是目前最流行的图形数据库,支持完整的事务,在属性图中,图是由顶点(Vertex),边(Edge)和属性(Property)组成的,顶点和边都可以设置属性,顶点也称作节点,边也称作关系,每个节点和关系都可以由一个或多个属性。Neo4j创建的图是用顶点和边构建一个有向图,其查询语言cypher已经成为事实上的标准。
在这里插入图片描述
搜索引擎存储:
搜索引擎数据库最近比较火的包括Solr和Elasticsearch等。Solr是Apache 的一个开源项目,基于业界大名鼎鼎的java开源搜索引擎Lucene。在过去的十年里,solr发展壮大,拥有广泛的用户群体。solr提供分布式索引、分片、副本集、负载均衡和自动故障转移和恢复功能。如果正确部署,良好管理,solr就能够成为一个高可靠、可扩展和高容错的搜索引擎。

Elasticsearch构建在Apache Lucene库之上,同是开源搜索引擎。Elasticsearch在Solr推出几年后才面世的,通过REST和schema-free的JSON文档提供分布式、多租户全文搜索引擎。并且官方提供Java,Groovy,PHP,Ruby,Perl,Python,.NET和Javascript客户端。目前Elasticsearch与Logstash和Kibana配合,部署成日志采集和分析,简称ELK,它们都是开源软件。最近新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash。

不同类型数据库的区别以及特点

MySQL和Redis的对比

1)从数据存储格式上:

例如学生信息:
张三   性别:男    年龄:23   籍贯:上海   手机:1234567890

mysql存储格式:
uid	  姓名	sex    age    home     phone
001	  张三     男	   23     上海    1234567890   

Redis存储格式:
name001:zhangsan
sex001:男
age001:23
home001:上海
phone001:1234567890

2)从分类上

MySQL是关系型数据库,主要用于存放持久化数据,将数据存储在硬盘中,读取速度较慢。

Redis是NOSQL,即非关系型数据库,也是缓存数据库,即将数据存储在缓存中,缓存的读取速度快,能够大大的提高运行效率,但是保存时间有限。

3)从运行机制上

mysql作为持久化存储的关系型数据库,相对薄弱的地方在于每次请求访问数据库时,都存在着I/O操作,如果反复频繁的访问数据库。第一:会在反复链接数据库上花费大量时间,从而导致运行效率过慢;第二:反复的访问数据库也会导致数据库的负载过高,那么此时缓存的概念就衍生了出来。

缓存就是数据交换的缓冲区(cache),当浏览器执行请求时,首先会对在缓存中进行查找,如果存在,就获取;否则就访问数据库。缓存的好处就是读取速度快。
redis数据库就是一款缓存数据库,用于存储使用频繁的数据,这样减少访问数据库的次数,提高运行效率。

4)从存储介质上

mysql用于持久化的存储数据到硬盘,功能强大,但是速度较慢。
redis用于存储使用较为频繁的数据到缓存中,读取速度快。

5)需求上

MySQL和Redis因为需求的不同,一般都是配合使用。
Redis存储在内存中,如果存储在内存中,存储容量肯定要比磁盘少很多,那么要存储大量数据,只能花更多的钱去购买内存,造成在一些不需要高性能的地方是相对比较浪费的,所以目前基本都是MySQL() + Redis(),在需要性能的地方使用Redis,在不需要高性能的地方使用MySQL,好钢用在刀刃上。
MySQL支持sql查询,可以实现一些关联的查询以及统计.

Redis对内存要求比较高,在有限的条件下不能把所有数据都放在Redis.

MySQL偏向于存数据,Redis偏向于快速取数据,但Redis查询复杂的表关系时不如MySQL,所以可以把热门的数据放Redis,MySQL存基本数据。

MySQL与mongdb对比

MySQL与MongoDB都是开源的常用数据库,但是MySQL是传统的关系型数据库,MongoDB则是非关系型数据库,也叫文档型数据库,是一种NoSQL的数据库。它们各有各的优点,关键是看用在什么地方。所以我们所熟知的那些SQL语句就不适用于MongoDB了,因为SQL语句是关系型数据库的标准语言。

(一)关系型数据库-MySQL
1、在不同的引擎上有不同的存储方式。
2、查询语句是使用传统的sql语句,拥有较为成熟的体系,成熟度很高。
3、开源数据库的份额在不断增加,mysql的份额也在持续增长。
4、缺点就是在海量数据处理的时候效率会显著变慢。

(二)非关系型数据库-MongoDB
非关系型数据库(nosql ),属于文档型数据库。先解释一下文档的数据库,即可以存放xml、json、bson类型系的数据。这些数据具备自述性,呈现分层的树状数据结构。数据结构由键值(key=>value)对组成。
1、存储方式:虚拟内存+持久化。
2、查询语句:是独特的MongoDB的查询方式。
3、适合场景:事件的记录,内容管理或者博客平台等等。
4、架构特点:可以通过副本集,以及分片来实现高可用。
5、数据处理:数据是存储在硬盘上的,只不过需要经常读取的数据会被加载到内存中,将数据存储在物理内存中,从而达到高速读写。
6、成熟度与广泛度:新兴数据库,成熟度较低,Nosql数据库中最为接近关系型数据库,比较完善的DB之一,适用人群不断在增长。

(三)MongoDB优势与劣势
优势:
1、在适量级的内存的MongoDB的性能是非常迅速的,它将热数据存储在物理内存中,使得热数据的读写变得十分快。
2、MongoDB的高可用和集群架构拥有十分高的扩展性。
3、在副本集中,当主库遇到问题,无法继续提供服务的时候,副本集将选举一个新的主库继续提供服务。
4、MongoDB的Bson和JSon格式的数据十分适合文档格式的存储与查询。
劣势:
1、 不支持事务操作。MongoDB本身没有自带事务机制,若需要在MongoDB中实现事务机制,需通过一个额外的表,从逻辑上自行实现事务。
2、 应用经验少,由于NoSQL兴起时间短,应用经验相比关系型数据库较少。
3、MongoDB占用空间过大。
(四)对比

数据库MongoDBMySQL
数据库模型非关系型关系型
存储方式以类JSON的文档的格式存储不同引擎有不同的存储方式
查询语句MongoDB查询方式(类似JavaScript的函数)SQL语句
数据处理方式基于内存,将热数据存放在物理内存中,从而达到高速读写不同引擎有自己的特点
成熟度新兴数据库,成熟度较低成熟度高
广泛度NoSQL数据库中,比较完善且开源,使用人数在不断增长开源数据库,市场份额不断增长
事务性仅支持单文档事务操作,弱一致性支持事务操作
占用空间占用空间大占用空间小
join操作MongoDB没有joinMySQL支持join
(五)企业选型

关系型数据库适合存储结构化数据,如用户的帐号、地址:
1)这些数据通常需要做结构化查询,比如join,这时候,关系型数据库就要胜出一筹
2)这些数据的规模、增长的速度通常是可以预期的
3)事务性、一致性

NoSQL适合存储非结构化数据,如文章、评论:
1)这些数据通常用于模糊处理,如全文搜索、机器学习
2)这些数据是海量的,而且增长的速度是难以预期的,
3)根据数据的特点,NoSQL数据库通常具有无限(至少接近)伸缩性
4)按key获取数据效率很高,但是对join或其他结构化查询的支持就比较差

四、DBA介绍

数据库管理员(Database Administrator,简称DBA),是从事管理和维护数据库管理系统(DBMS)的相关工作人员的统称,属于运维工程师的一个分支,主要负责业务数据库从设计、测试到部署交付的全生命周期管理。
DBA的核心目标是保证数据库管理系统的稳定性、安全性、完整性和高性能。

主要职责

据库管理员的主要职责有以下几个方面:
1.设计:
数据库设计,包括字段、表和关键字段;资源在辅助存储设备上是怎样使用的,怎样增加和删除文件及记录,以及怎样发现和补救损失。

2.监控
监控数据库的警告日志,定期做备份删除。

3.备份
对数据库的备份监控和管理数据库的备份至关重要,对数据库的备份策略要根据实际要求进行更改,数据的日常备份情况进行监控。

4.SQL语句
对SQL语句的书写规范的要求一个SQL语句,如果写得不理想,对数据库的影响是很大的。所以,每一个程序员或相应的工作人员在写相应的SQL语句时,应该严格按照《SQL书写规范》一文,最后要有DBA检查才可以正式运行。

5.最终用户服务和协调
数据库管理员规定用户访问权限和为不同用户组分配资源。如果不同用户之间互相抵触,数据库管理员应该能够协调用户以最优化安排。

6.数据库安全
数据库管理员能够为不同的数据库管理系统用户规定不同的访问权限,以保护数据库不被未经授权的访问和破坏。例如,允许一类用户只能检索数据,而另一类用户可能拥有更新数据和删除记录的权限。

五、数据库部署安装

源码安装

数据库官网下载地址 https://downloads.mysql.com/archives/community/

1.源码安装数据库(自定义目录安装)

下载途径:进入官网—>点击download----->MySQL Community (GPL) Downloads----->MySQL Community Server------>Archives---->选择自己想要的版本即可
1)上传或下载代码包
[root@db01 ~]# rz mysql-5.6.46.tar.gz

2)安装依赖
[root@db01 ~]# yum install -y ncurses-devel libaio-devel gcc gcc-c++ glibc cmake autoconf openssl openssl-devel

3)解压
[root@db01 ~]# tar xf mysql-5.6.46.tar.gz

4)创建目录
[root@db01 ~]# mkdir /service

5)生成cmake
[root@db01 ~]# cd mysql-5.6.46/
[root@db01 ~]# cmake . -DCMAKE_INSTALL_PREFIX=/service/mysql-5.6.46
-DMYSQL_DATADIR=/service/mysql-5.6.46/data
-DMYSQL_UNIX_ADDR=/service/mysql-5.6.46/tmp/mysql.sock
-DDEFAULT_CHARSET=utf8
-DDEFAULT_COLLATION=utf8_general_ci
-DWITH_EXTRA_CHARSETS=all
-DWITH_INNOBASE_STORAGE_ENGINE=1
-DWITH_FEDERATED_STORAGE_ENGINE=1
-DWITH_BLACKHOLE_STORAGE_ENGINE=1
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1
-DWITH_ZLIB=bundled
-DWITH_SSL=system
-DENABLED_LOCAL_INFILE=1
-DWITH_EMBEDDED_SERVER=1
-DENABLE_DOWNLOADS=1
-DWITH_DEBUG=0

#程序存放位置
cmake . -DCMAKE_INSTALL_PREFIX=/service/mysql-5.6.46
#数据存放位置
-DMYSQL_DATADIR=/service/mysql-5.6.46/data
#socket文件存放位置
-DMYSQL_UNIX_ADDR=/service/mysql-5.6.46/tmp/mysql.sock
#使用utf8字符集
-DDEFAULT_CHARSET=utf8
#校验规则
-DDEFAULT_COLLATION=utf8_general_ci
#使用其他额外的字符集
-DWITH_EXTRA_CHARSETS=all
#支持的存储引擎
-DWITH_INNOBASE_STORAGE_ENGINE=1
-DWITH_FEDERATED_STORAGE_ENGINE=1
-DWITH_BLACKHOLE_STORAGE_ENGINE=1
#禁用的存储引擎
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1
#启用zlib库支持(zib、gzib相关)
-DWITH_ZLIB=bundled
#启用SSL库支持(安全套接层)
-DWITH_SSL=bundled
#启用本地数据导入支持
-DENABLED_LOCAL_INFILE=1
#编译嵌入式服务器支持
-DWITH_EMBEDDED_SERVER=1
#mysql5.6支持了google的c++mock框架了,允许下载,否则会安装报错。
-DENABLE_DOWNLOADS=1
#禁用debug(默认为禁用)
-DWITH_DEBUG=0

5)编译 make
[root@db01 mysql-5.6.46]# make

6)安装 make install
[root@db01 mysql-5.6.46]# make install

7)做软连接
[root@db01 ~]# ln -s /service/mysql-5.6.46 /service/mysql

8)创建数据库用户
[root@db01 ~]# useradd mysql -s /sbin/nologin -M

9)拷贝配置文件和启动文件
#1.进入配置文件和脚本的目录
[root@db01 ~]# cd /service/mysql/support-files/
#2.拷贝配置文件
[root@db01 support-files]# cp my-default.cnf /etc/my.cnf

10)配置system管理MySQL服务
#1.配置system管理MySQL
[root@db01 ~]# vim /usr/lib/systemd/system/mysql.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=https://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/service/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000

#2.重新加载启动文件列表
[root@db01 ~]# systemctl daemon-reload

11)初始化数据库
#1.进入初始化目录
[root@db01 support-files]# cd /service/mysql/scripts/
#2.执行初始化命令
[root@db01 scripts]# ./mysql_install_db --user=mysql --basedir=/service/mysql --datadir=/service/mysql/data

12)创建socket文件目录(二进制安装没有)
#先创建tmp目录
[root@db01 ~]# mkdir /service/mysql/tmp

13)授权数据库目录
[root@db01 ~]# chown -R mysql.mysql /service/mysql
[root@db01 ~]# chown -R mysql.mysql /service/mysql-5.6.46

14)system管理启动MySQL
[root@db01 ~]# systemctl start mysql
[root@db01 ~]# ps -ef | grep [m]ysql
mysql 23509 1 3 22:36 ? 00:00:01 /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
[root@db01 ~]# netstat -lntp | grep 3306
tcp6 0 0 :::3306 ::😗 LISTEN 23509/mysqld

15)配置环境变量直接使用mysql
[root@db01 ~]# vim /etc/profile.d/mysql.sh
export PATH=/service/mysql/bin:$PATH
[root@db01 ~]# source /etc/profile

16)修改root用户密码
[root@db01 ~]# mysql -u root -p #默认root用户密码为空,有多种方式重置root密码
第一种:
MySQL > SET PASSWORD=PASSWORD(‘123456’);
Query OK, 0 rows affected (0.00 sec)

第二种:
MySQL > grant all privileges on . to root@‘%’ identified by ‘oldboy’;
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
注意:两种重置密码方式有区别。

2.二进制安装(自定义安装目录)

二进制包下载:进入官网----->download----->MySQL Community (GPL) Downloads------>Download Archives------>MySQL Community Server------>选择自己对应的版本即可
1)上传二进制包
[root@db01 ~]# rz mysql-5.7.33-linux-glibc2.12-x86_64.tar.gz

2)安装依赖
[root@db01 ~]# yum install -y ncurses-devel libaio-devel gcc gcc-c++ glibc cmake autoconf

3)解压安装包
[root@db01 ~]# tar xf mysql-5.7.33-linux-glibc2.12-x86_64.tar.gz

4)创建自定义目录
[root@db01 ~]# mkdir /service

5)移动目录并改名
[root@db01 ~]# mv mysql-5.7.33-linux-glibc2.12-x86_64 /service/mysql-5.6.46

6)做软连接
[root@db01 ~]# ln -s /service/mysql-5.7.33 /service/mysql

7)创建数据库用户
[root@db01 ~]# useradd mysql -s /sbin/nologin -M

8)拷贝配置文件和启动文件
#1.进入配置文件和脚本的目录
[root@db01 ~]# cd /service/mysql/support-files/
#2.拷贝配置文件
[root@db01 support-files]# cp my-default.cnf /etc/my.cnf
cp: overwrite ‘/etc/my.cnf’? y
#3.拷贝启动脚本
[root@db01 support-files]# cp mysql.server /etc/init.d/mysqld

9)初始化数据库
#1.进入初始化目录
[root@db01 support-files]# cd /service/mysql/scripts/
#2.执行初始化命令
[root@db01 scripts]# ./mysql_install_db --user=mysql --basedir=/service/mysql --datadir=/service/mysql/data

10)启动数据库
[root@db01 scripts]# /etc/init.d/mysqld start
/etc/init.d/mysqld: line 244: my_print_defaults: command not found
/etc/init.d/mysqld: line 264: cd: /usr/local/mysql: No such file or directory
Starting MySQL ERROR! Couldn’t find MySQL server (/usr/local/mysql/bin/mysqld_safe)

11)如果是二进制安装到自定义目录下需要修改脚本目录
[root@db01 scripts]# sed -i ‘s#/usr/local#/service#g’ /etc/init.d/mysqld /service/mysql/bin/mysqld_safe

12)授权数据库目录
[root@db01 ~]# chown -R mysql.mysql /service/mysql
[root@db01 ~]# chown -R mysql.mysql /service/mysql-5.7.33

13)再次启动
[root@db01 scripts]# /etc/init.d/mysqld start
Starting MySQL.Logging to ‘/service/mysql/data/db04.err’.
SUCCESS!
[root@db01 scripts]#

14)检查进程和端口
[root@db01 scripts]# ps -ef | grep [m]ysql
root 23083 1 0 20:36 pts/0 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/data --pid-file=/usr/local/mysql/data/db02.pid
mysql 23191 23083 0 20:36 pts/0 00:00:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=db02.err --pid-file=/usr/local/mysql/data/db02.pid
[root@db01 scripts]# netstat -lntp | grep 3306
tcp6 0 0 :::3306 ::😗 LISTEN 23191/mysqld
[root@db01 scripts]#

15)配置system管理MySQL服务
#1.配置system管理MySQL
[root@db01 ~]# vim /usr/lib/systemd/system/mysql.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=https://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/service/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000
#2.重新加载启动文件列表
[root@db01 ~]# systemctl daemon-reload

16)system管理启动mysql
#1.system管理启动MySQL
[root@db01 ~]# systemctl start mysql
[root@db01 ~]# ps -ef | grep [m]ysql
#一定是启动失败的,因为不只有启动脚本里面指定了/usr/local,很多都有
[root@db01 scripts]# grep -r ‘/usr/local’ /service/mysql/*
#怎么办?一个一个修改吗?

17)查看MySQL配置文件检索顺序
[root@db01 mysql]# /service/mysql/bin/mysql --help|grep ‘my.cnf’
order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf

18)配置my.cnf
#1.配置指定数据库安装目录与数据目录
[root@db01 scripts]# vim /etc/my.cnf
[mysqld]
basedir=/service/mysql
datadir=/service/mysql/data
#2.再次启动
[root@db01 scripts]# systemctl start mysql
#3.一定成功

19)配置环境变量直接使用mysql
[root@db01 ~]# vim /etc/profile.d/mysql.sh
export PATH=/service/mysql/bin:$PATH
[root@db01 ~]# source /etc/profile

YUM安装

下载下列rpm包----》上传-----》输入以下命令
yum install -y MySQL-devel-5.6.42-1.el7.x86_64.rpm
yum install -y MySQL-client-5.6.42-1.el7.x86_64.rpm
yum install -y MySQL-server-5.6.42-1.el7.x86_64.rpm

记yum的时候出现的一个小坑

 yum install -y MySQL-server-5.6.42-1.el7.x86_64.rpm 产生如下报错

Transaction check error:
  file /usr/share/mysql/charsets/README from install of MySQL-server-5.6.42-1.el7.x86_64 conflicts with file from package mariadb-libs-1:5.5.68-1.el7.x86_64
  file /usr/share/mysql/czech/errmsg.sys from install of MySQL-server-5.6.42-1.el7.x86_64 conflicts with file from package mariadb-libs-1:5.5.68-1.el7.x86_64
  file /usr/share/mysql/danish/errmsg.sys from install of MySQL-server-5.6.42-1.el7.x86_64 conflicts with file from package mariadb-libs-1:5.5.68-1.el7.x86_64
  file /usr/share/mysql/dutch/errmsg.sys from install of MySQL-server-5.6.42-1.el7.x86_64 conflicts with file from package mariadb-libs-1:5.5.68-1.el7.x86_64

原因:是因为maria-lib与mysql环境冲突了
解决方式:yum remove -y mariadb-libs.x86_64

数据库管理技术的发展历程(了解)

一、人工管理阶段
20世纪50年代中期以前,计算机主要用于科学计算。
当时的硬件水平:外存只有纸带、卡片、磁带,没有磁盘等直接存取的存储设备
当时的软件状况:没有操作系统,没有管理数据的软件,数据的处理方式是批处理。
人工管理数据具有以下特点:
1 数据不保存:计算机主要用于科学计算,数据临时用,临时输入,不保存
2 应用程序管理数据:数据要有应用程序自己管理,应用程序需要处理数据的逻辑+物理结构,开发负担很重
3 数据不共享:一组数据只对应一个程序,多个程序之间涉及相同数据时,必须各自定义,造成数据大量冗余
4 数据不具有独立性:数据的逻辑结构或物理结构发生变化后,必须对应用程序做出相应的修改,开发负担进一步加大

在这里插入图片描述
二、文件系统阶段
20世纪50年代后期到60年代中期
硬件水平:有了磁盘、磁鼓等可直接存取的存储设备
软件水平:有了操作系统,并且操作系统中已经有了专门的数据管理软件,即文件系统;处理方式上不仅有了批处理,而且能够联机实时处理
文件系统管理数据具有以下优点:
1 数据可以长期保存:计算机大量用于数据处理,因而数据需要长期保存,进行增删改查操作
2 由文件系统管理数据:文件系统这个软件,把数据组织成相对独立的数据文件,利用按文件名,按记录进行存取。实现了记录内的结构性,但整体无结构。并且程序与数据之间由文件系统提供存取方法进行转换,是应用程序与数据之间有了一定的独立性,程序员可以不必过多考虑物理细节。
文件系统管理数据具有以下缺点:
1 数据共享性差,冗余度大:一个文件对应一个应用程序,不同应用有相同数据时,也必须建立各自的文件,不能共享相同的数据,造成数据冗余,浪费空间,且相同的数据重复存储,各自管理,容易造成数据不一致性
2 数据独立性差:一旦数据的逻辑结构改变,必须修改应用程序,修改文件结构的定义。应用程序的改变,也将引起文件的数据结构的改变。因此数据与程序之间缺乏独立性。可见,文件系统仍然是一个不具有弹性的无结构的数据集合,即文件之间是孤立的,不能反映现实世界事物之间的内存联系。

三、数据系统阶段

20世纪60年代后期以来,计算机用于管理的规模越来越大,应用越来越广泛,数据量急剧增长,同时多种应用,多种语言互相覆盖地共享数据结合要求越来越强烈
硬件水平:有了大容量磁盘,硬件价格下降
软件水平:软件价格上升(开发效率必须提升,必须将程序员从数据管理中解放出来),分布式的概念盛行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值