第一章 数据库概述
1.数据库是什么
现如今,我们可以看到很多的数据库软件 ,比如mysql,oracle,pgsql等很多,这里呢,我们就不一一列举出来。但实际上他们本身更多的是一个数据库管理系统,简称DBMS(database manager system), 而我们说的数据库更多的应该是database(DB)。从电脑诞生开始,数据的存放就是一个问题。早期的数据比较少,因此都是基于文件系统进行存储,我们将数据存储于文件中,读取时将整个文件加载进内存。但是呢,之后伴随着业务的增长,数据量发生了很大程度的增长,单个文件存储数据无论是对于我们的查询还是修改都变得非常困难,很有可能我们需要遍历整个文件的所有内容才能找到需要的内容。对于上面这种情况,我们就需要一种新的数据存储方式,数据库也就应运而生。由于数据库本身设计出来就是为了存储小而多的数据,因此对于一些大的文件并不适合存储在数据库中。
当我们的数据存储在数据库之后呢,为了使用数据库里面的数据,我们就必须要一个专门能够管理 数据库的软件,通常而言这个软件就是DBMS,也就是数据库管理系统,像我们平时所说的mysql,oracle,pgsql都是数据库管理系统。现在的数据库根据我们的需要总体上可以分成两大类,一类是关系型数据库,另一类是非关系型数据库。非关系型数据库是为了补足关系型数据库的缺点而诞生的,因为通常而言,磁盘的读取速度是远远低于内存的,那么从磁盘加载数据本身就会浪费大量的时间,那么使用内存存储数据之后,数据的加载速度就会变得非常之快。大多数的非关系型数据库都是将数据存储在内存的,这样就可以快速的加载数据,通常我们用非关系型数据库进行缓存,另外就是存储一些需要快速加载的,但又不是非常重要的数据。真正重要的数据都是存放在关系型数据库的。 我们通过这个网站https://hellogithub.com/report/db-engines/ 进行查看一些数据库的使用量。

2.mysql历史
1979年:TcX公司 Monty Widenius使用BASIC设计了一个报表工具Unireg
1985年,瑞典的几位志同道合小伙子(以David Axmark 为首) 成立了一家公司,这就是 MySQL AB的前身。
1996年:发布MySQL1.0,Solaris版本,Linux版本
1999年:MySQL AB公司,瑞典
2003年:MySQL 5.0版本,提供视图、存储过程等功能
2008年:Sun 10亿美元收购MySQL
2009年:Oracle 75亿美元收购Sun
2009年:Monty成立MariaDB
Mysql.5.5.18. Oracle 对MySQL版本重新进行了划分,分成了社区版和企业版

3.MySQL 的三大主要分支
mysql
mariadb percona Server
官方网址
https://www.mysql.com/ http://mariadb.org/ https://www.percona.com
官方文档
https://dev.mysql.com/doc/
https://mariadb.com/kb/en/ https://www.percona.com/software/mysql-database/percona-server

4.数据库系统
数据( Data)是观察事物的结果,是对事物的性质、状态及相互关系进行的物理组合。数据不仅可以是狭义上的数字,而且可以是具有一定意义的文本、数字符号等。图形、图像、视频、音频,也是对客观事物的属性、数量、位置及其相互关系的抽象表示,也属于数据。例如,“0,1,2,…”“阴、气温下降”“学生的档案记录”“货物的运输情况”等都是数据。在计算机科学中,数据是所有能输入计算机并被计算机程序处理的数字、字母、符号和模拟量等的总称。现代计算机存储和处理的对象十分广泛,表示这些对象的数据也随之变得越来越复杂。信息与数据既有联系又有区别。数据是信息的表现形式和载体,而信息是数据的内涵。信息加载于数据之上,对数据有解释的作用。数据和信息是不可分离的,信息依赖数据来表达,数据则生动具体地表达出信息。数据是符号,是物理性的;信息是对数据进行加工处理的结果,会对决策产生影响,是逻辑性和观念性的。

5.数据存储单元------服务器
人们在购物网站挑选商品,用手机预约酒店和查看当地天气,在家预约挂号,数据中心有数以万计的服务器将信息汇总,通过电子设备呈现到用户面前,这些服务器构成庞大的数据库系统,将资源整合连接。数据库系统( Database System)是由数据库及其管理软件组成的系统。用户可将数据库视为电子化的书柜(存储电子书籍的地方),可以对书柜中的数据进行增加、删除、修改、查找等操作。服务器是数据中心的基本单元,每台服务器都有独立的 CPU 和内存用来接收上传和下载请求,衡量服务器大小的单位是 U,常见的尺寸有 1U、 2U 和 4U。 1U 表示服务器的高度约为 4.445cm,服务器越高能装的硬盘就越多。机柜的高度一般为 42U,可以并排放下 16 台 1U 的服务器。除此之外,机柜剩下的空间要留给供电单元和网络接收单元。每 100m2 大约可以放下 20 台机柜。以百度云计算(阳泉)中心为例,一期的总建筑面积达 12 万 m2,数据存储规模、计算能力和环保节能三方面都处于亚洲一流水平。百度云计算(阳泉)中心数据存储量超过 4000PB,机房满载可提供约 6000 个 40A机柜、承载超过 16 万台服务器,可存储的信息量相当于 20 多万个国家图书馆的藏书总量。

6.数据库系统构成
数据库系统主要由存储单元、硬件、软件和人员这四部分构成,如图所示
图片 1.png
1.存储单元,数据库中的数据按一定的数学模型组织、描述和存储,具有极小的冗余、较高的数据独立性和易扩展性,并可为各种用户共享。
2.硬件,数据库系统的硬件组成包括构成计算机系统的各种物理设备,像CPU、内存和磁盘这些必要的硬件设施,当然,空调、应急电源、传感器等也都包括在系统之内。硬件的配置应满足整个数据库系统的需求。
3.软件,数据库系统的软件包括操作系统、数据库管理系统及应用程序。数据库管理系统( DatabaseManagement System, DBMS)是数据库系统的核心软件,在操作系统的支持下工作,科学地组织和存储数据,高效获取和维护数据。其主要功能包括数据定义、数据操纵、数据库的运行管理和数据库的建立与维护。
4.人员,数据库系统的正常运行离不开人员的维护和优化,数据库系统只有在专业人员的手中才能发挥其出色的性能。根据不同的数据库岗位职责,人员可划分为三类。系统分析员和数据库设计人员,负责应用系统的需求分析和规范说明,确定系统的硬件配置,并参与数据库系统的概要设计;应用程序员,负责编写使用数据库的应用程序,这些应用程序可对数据进行检索、建立、删除或修改;数据库管理员,负责数据库的总体信息控制,管理数据库中的信息内容和结构,决定数据库的存储结构和存取策略,定义数据库的安全性要求和完整性约束条件,监控数据库的使用和运行,负责数据库性能改进、数据库的重组和重构,以提高系统的性能。

7.数据库系统的特点
数据库系统的结构化使数据管理更加方便,同时数据库系统丰富的接口可以与外界应用进行数据沟通与交换。
数据库系统的特点如下:
1.实现数据共享,数据共享是指所有用户可以同时存储和读取数据库中的数据,也是指用户可以使用各种方式通过接口来调用数据库。
2.减少系统和数据的冗余,和文件系统相比,数据库系统实现了数据共享,从而避免了由用户各自建立应用文件造成的大量数据重复和系统冗余,保持了数据的一致性,性能更加稳定。
3.数据实现集中控制,相对于文件系统中数据处于分散状态,同一用户或不同用户在处理数据过程中,文件之间无关系的管理方式,数据库系统可对数据进行集中控制和管理,并通过数据模型来表示各种数据和组织之间的联系。
4.保持数据的安全、完整和并发,数据库系统可以实现安全性控制(防止数据丢失、错误更新和越权使用)、完整性控制(保证数据的正确性、有效性和相容性)、并发控制(既能在同一时间周期内允许对数据实现多路存取,又能防止用户之间的不正常交互)。
5.故障恢复,数据库管理系统可以实现数据的监控和定期备份,可及时发现故障和修复故障,从而防止数据被破坏。即使在数据丢失的情况下,也可以将备份的数据恢复到相邻的备份节点,减少经济损失。

8.数据库模型
数据模型是科学研究的一种重要方法,模型可以形象直观地反映出事物的结构与特点,方便理解与记忆。将客观事物抽象为数据模型,是一个逐步抽象转化的过程。计算机领域常见的数据模型有以下四种。
1.层次模型
数据库层次模型就像一棵树,主干上有着不同的分支,描述一对多的层次关系非常自然直观,容易理解。这种模型为数据库系统提供了良好的完整性支持。层次模型的主要缺点:对于非层次关系,如多对多关系、一个节点具有多个父节点等,使用层次模型表示容易出现关系混乱;对插入和删除操作的限制比较多;查询子节点必须经过父节点,容易造成查询时间延长从而影响性能。
图片 2.png
2.网状模型
在实际开发中,事物之间的联系更多的是非层次关系,用层次模型表示很不直接,网状模型则可以解决这一弊端。网状模型就像是一张蜘蛛网,各个节点相互连接。在数据库中,满足以下两个条件的数据模型称为网状模型。(1)允许一个以上的节点无父节点;(2)一个节点可以有多于一个的父节点。从以上定义可以看出,网状模型具有比层次模型更复杂的网状结构。
图片 3.png
3.关系型模型
虽然网状模型和层次模型已经可以很好地解决数据的集中和共享问题,但它们在数据独立和抽象级别上仍有很大欠缺。关系型模型可以解决它们在数据库存取时仍然需要明确数据的存储结构、指出存取路径等问题。在关系型数据库中,对数据的操作几乎全部建立在一个或多个关系表格上,通过表格分类、合并、连接或选取等运算来实现数据的管理。
图片 4.png
4.面向对象模型
面向对象模型是一种新兴的数据模型,它以对象为单位,每个对象包含对象的属性和方法,具有类和继承等特点。与传统的数据库(如层次数据库、 网状数据库或关系型数据库)不同,面向对象数据库适合存储不同类型的数据,如图像、音频、视频、文本、数字等。面向对象模型具有强大的语义表达能力,能够精确地描述数据、数据之间的联系和完整性约束条件,这使得面向对象模型在数据库和数据集成中的应用越来越广泛。
图片 5.png

9.关系型数据库
关系型数据库是指采用关系型模型来组织数据的数据库。关系型数据库采用了关系对应的表现形式,以行和列的形式存储数据,就像是一组二维表格,便于用户理解。每一列代表着不同的选项,每一行代表着不同的数据。行与列组成的区域被称为表,一组表组成了数据库。用户可以通过 SQL语句或者索引等方式来查询、检索数据库中的数据。
1.关系型数据库特点
关系型数据库的特点体现在以下几个方面。
(1)存储结构
关系型数据库按照结构化的方法存储数据,每个数据表的行列都必须对应相应的字段(也就是先定义好表的结构),再根据表的结构存入数据。因为数据的形式和内容在存入之前就已经定义好了,所以整个数据表的可靠性和稳定性都比较高。事先定义表结构也带来了相应的问题,就是一旦存入数据,再要修改数据表的结构就会十分困难。
(2)扩展方式
由于关系型数据库将数据存储在数据表中,因此数据操作的瓶颈就出现在多张数据表的操作中,而且数据表越多问题越严重。要缓解这个问题,只能提高处理能力,也就是选择速度更快、性能更高的计算机,但拓展空间显然非常有限,也就是说,关系型数据库只具备纵向扩展能力。
(3)查询方式
关系型数据库采用结构化查询语言( Structured Query Language, SQL)来对数据库进行查询。SQL 早已获得了各个数据库厂商的支持,成为数据库行业标准,它支持数据的增加、查询、更新、删除操作,具有非常强大的功能。 SQL可以采用类似索引的方法来加快查询操作。
(4)事务性
关系型数据库强调 ACID 规则:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。它可以满足对事务性要求较高或者需要进行复杂数据查询的任务需求,而且可以充分满足数据库操作的高性能和操作稳定性的要求。 关系型数据库强调数据的强一致性,可以控制事务原子性细粒度,并且一旦操作有误或者有需要,可以回滚事务。
(5)读写性能
关系型数据库十分强调数据的一致性,并为此降低读写性能,付出了巨大的代价。虽然关系型数据库存储数据和处理数据的可靠性很不错,但一旦面对海量数据的处理,效率就会变得很低,特别是遇到高并发读写的时候,性能会下降得非常厉害。关系型数据库诞生已有40多年了,从理论产生到实现产品,一直有很多厂商在开发自己的关系型数据库。
2.关系型数据库产品
(1)Oracle 数据库
1979 年,Oracle(甲骨文, 前身叫 SDL)公司引入了第一个商用 SQL 关系数据库管理系统。 Oracle公司是最早开发关系型数据库的厂商之一,其产品支持最广泛的操作系统平台。目前 Oracle 关系型数据库产品占有很大市场比例,Oracle 数据库主要应用在传统大企业、政府机构、金融机构、证券机构等。
图片 7.png
(2)SQL Server 数据库
Microsoft SQL Server 是微软公司开发的大型关系型数据库系统。 SQL Server 可以与 Windows 操作系统紧密集成,不论是应用程序开发速度还是系统事务处理运行速度,都能得到较大的提升。对于在 Windows 平台上开发的各种企业级信息管理系统来说,不论是 C/S(客户机/服务器)架构还是B/S(浏览器/服务器)架构,SQL Server 都是一个很好的选择。 SQL Server 的缺点是只能在 Windows系统下运行。SQL Server数据库主要应用在部分电商和使用 Windows 服务器平台的企业。
图片 8.png
(3)Access 数据库
Access 是入门级小型桌面数据库, 性能和安全性都很一般, 可供个人管理或小型网站使用。Access不是数据库语言,只是一个数据库程序。Access 数据库早期应用于小型程序系统 ASP + Access、系统留言板、校友录等。
图片 9.png

10.非关系型数据库
非关系型数据库也被称为 NOSQL( Not Only SQL)数据库。它的产生并不是要彻底否定关系型数据库,而是作为传统数据库的一个有效补充。非关系型数据库的数据存储不需要固定的表结构,一般情况下也不存在对数据的连续操作。相对于关系型数据库,非关系型数据库在大数据存取上具备无法比拟的性能优势。
常见的非关系型数据库产品有以下 3 种。
1.Memcached
Memcached 是一个开源的、高性能的、具有分布式内存对象的缓存系统。通过它可以减轻数据库负载,加速动态的 Web 应用Memcached的最初版本由 LiveJounal 的布拉德·菲茨帕特里克( Brad Fitzpatrick)在 2003 年开发完成。目前全球有非常多的用户在使用它来构建自己的大负载网站或提高自己的高访问网站的响应速度。
图片 10.png
2.Redis
Redis与Memcached类似,也是一个高性能的键值(Key-Value)存储数据库系统。为了保证效率,Redis的数据都缓存在内存中。与 Memcached 的区别是,Redis会周期性地把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了主从(Master-Slave)同步。 Redis 的出现,很大程度上补偿了 Memcached 这类键值存储的不足,在部分场合可以对关系型数据库起到很好的补充作用。它提供了 Python、 Ruby、 Erlang、 PHP客户端,使用很方便,支持主从集群与分布式,支持队列等特殊功能。
图片 11.png
3.mongoDB
mongoDB 是介于关系型数据库和非关系型数据库之间的产品,也是非关系型数据库中功能最丰富的一种产品,支持存储比较复杂的数据类型。mongoDB 最大的特点是支持强大的数据查询语言,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系型数据库单表查询的绝大部分功能。mongoDB 同时支持对数据建立索引和Python、Java、C++、PHP等多种计算机语言。
图片 12.png

11.为什么使用MySQL
MySQL 属于中小型关系型数据库管理系统,目前被广泛地应用到互联网上的大、中、小型网站中,相比于其他数据库产品,其特点如下:(1)与 Oracle 相比,MySQL由于体积小、安装成本低、易于维护、速度快、总体拥有成本低、开放源码且无版权制约,成为商业数据库的首选。(2)可以使用SQL访问与管理 MySQL 数据库。(3) MySQL历史悠久,社区及用户非常活跃,遇到问题可以寻求帮助。(4)品牌口碑效应使得企业无须考虑就直接使用LAMP、 LNMP流行架构。(5) MySQL同时提供多种应用程序编程接口(Application Programming Interface,API),支持多种操作系统,并支持多种开发语言,特别对流行的 PHP 语言有很好的支持。

12.MySQL的发展简史
1.初次见面
迈克尔· 维德纽斯( Michael “Monty” Widenius)于 1962 年出生于芬兰赫尔辛基,是开源MySQL 的创始人和 MySQL 第一行代码的作者, 独自完成了初期 MySQL 服务器端 95%的代码撰写。Monty 有一个女儿,名叫 My,因此他将自己开发的数据库命名为 MySQL。 Monty 还有一个儿子,名为 Max,在 2003 年 SAP 公司与 MySQL 公司建立合作伙伴关系后, Monty 又将与 SAP 合作开发的数据库命名为 MaxDB。而现在的 MariaDB 中的 Maria 是 Monty 小孙女的名字。 MySQL 的海豚标志是通过用户命名竞赛选出的。
2.蓬勃发展
随着业务的发展, MySQL 的版本也在不断地更新,为了满足客户的需求加入了许多新的功能。
1995 年 5 月 23 日, MySQL 的第一个内部版本发行了,次年, MySQL 官方正式发行版( MySQL3.11.1)对外公布。
1998 年 MySQL 3.22 发布,此版本仍然不支持事务操作、子查询、外键、存储过程和视图等功能。
1999 年的冬天,独立商业公司 MySQL AB 在瑞典的中部城市乌普萨拉( Uppsala)成立,并于同年发布了包含事务型存储引擎 BDB 的 MySQL 3.23。
2003 年 MySQL 4.1 推出,第一次支持子查询,支持 unicode 和预编译 SQL 等功能。为了适应日益苛刻的市场需求,不久后,公司又开发出了 MySQL 5.0。这个新版本包含有史以来 MySQL 最大的变化,添加了存储过程、服务端游标、触发器、查询优化及分布式事务等。
2008 年 2 月, Sun Microsystems 公司动用 10 亿美元收购了 MySQL,造就了开源软件的收购最高价。 MySQL 被收购之后, MySQL 图标停止使用,取而代之的是 Sun/MySQL 图标。公司合并后推出了 MySQL 5.1 GA( GA 即 General Availability,可以用于生产环境的版本,经过了 bug 的修复与测试)和 MySQL 5.4 Beta。
2009 年, Oracle 公司以 74 亿美元的价格,将 Sun Microsystems 和 MySQL 通盘收购于旗下。至此,数据库之间的商业竞争以 Oracle 公司的胜利宣告结束。
2018 年, MySQL 8.0 问世,据官方介绍, MySQL 8.0 的速度比 MySQL 5.7 快两倍

13.MySQL的版本分类与发展
目前 MySQL 官方网站上有四个版本,分别是 GA 版、 DMR 版、 RC 版和 Beta 版。一般情况下,生产环境或者测试环境要选择 GA 版。针对不同的用户群体与需求,现在的 MySQL 主要有社区版服务器和企业版服务器,两者的特点如下。
MySQL Community Server(社区版服务器): 完全开源免费,应用较为广泛,支持 GPL 协议。MySQL 流行后,随着时代对数据处理要求的不断提高,其版本也在不断更新。其缺点是官方不提供技术支持,只能靠社区维护。社区版服务器主要用于个人网站和小型企业。
MySQL Enterprise Server(企业版服务器):主要供大、中型企业使用,官方提供保障以及补丁服务,并收取相关的费用,但可以免费试用 30 天。
目前企业中主要使用的 MySQL 版本如表所示。
图片 6.png
MySQL 8.0关键的改进包括OpenSSL安全性、新的默认身份验证、 SQL 角色、分解超级特权、密码强度等,同时增加了资源组功能,通过将用户线程映射到 CPU,为用户提供一个选项,以针对特定硬件上的特定工作负载进行优化。MySQL 8.0还加入了开发者功能,使开发人员可以更好地调试与运行。数据类型也得到了改进,在BINARY数据类型上进行了按位操作, 并且改进了IPv6和UUID功能。
MySQL使用由3个数字和1个可选的后缀组成的版本名称,如 mysql-5.7.1 m1。第一个数字(5)是主版本号。第二个数字(7)是次版本号,主版本和次版本一起构成版本系列号,描述的是一套稳定的功能。第三个数字(1)是修订号,随每个新 bug 被修复而递增。大多数情况下,系列中最新版本是最佳选择。
版本名称还可以包含后缀以指示版本的稳定性级别,有以下 3 种情况。
(1)mN( m1,m2,m3…)表示里程碑编号。 MySQL 开发使用里程碑模型,其中每个里程碑都引入了一小部分经过全面测试的功能。从一个里程碑到下一个里程碑,根据试用早期版本的社区成员提供的反馈,功能界面可能会发生变化,甚至可能会删除功能。里程碑版本中的功能可被视为具有预生产质量。(2)RC 表示候选发布。通过 MySQL 的所有内部测试后,候选发布版本被认为是稳定的。 RC版本可能仍会引入新功能,但重点转移到修复错误以稳定早期功能。(3)GA 表示一般可用性或生产版本。 GA 版本是稳定的,已成功通过早期阶段,并且被认为是可靠的,没有严重的错误,适用于生产环境。
MySQL 的开发始于里程碑版本,随后是 RC 版本,最后达到 GA 版本。

14.企业中如何选择MySQL版本
在生产环境下,数据库是非常重要的,因此在部署 MySQL 的时候一定要慎重选择,需要从以下方面考虑。
1.从更新角度,追求稳定
目前互联网企业中常用的 MySQL 版本为 MySQL 5.5 和 MySQL 5.6,建议选择发布前后几个月没有较大漏洞修复的版本,避开大量修复的版本。对企业中核心的应用应部署稳定版本的数据库,切勿追求新颖体验而去升级更换。
2.从企业实际情况角度,追求合适
作为一名合格的运维人员,在部署时还需要考虑到开发人员在开发程序时使用的版本是否与程序兼容的问题,应事先与开发人员沟通。搭建新版本的数据库时,应先测试运行几个月。

源码安装部署mariadb数据库
1.安装MariaDB之前,首先添加一个mariadb的yum源,随后使用yum或者rpm安装相关依赖包。
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# vim mariadb.repo 
[root@localhost yum.repos.d]# cat mariadb.repo 
# MariaDB 10.6 CentOS repository list - created 2022-02-06 17:52 UTC
# https://mariadb.org/download/
[mariadb]
name = MariaDB
baseurl = https://mirrors.aliyun.com/mariadb/yum/10.6/centos8-amd64
module_hotfixes=1
gpgkey=https://mirrors.aliyun.com/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1
[root@localhost yum.repos.d]# cd
[root@localhost ~]# dnf  -y install wget bison zlib-devel libcurl-devel boost-devel gcc gcc-c++ \
> cmake ncurses-devel gnutls-devel libxml2-devel openssl-devel libevent-devel libaio-devel make
上次元数据过期检查:0:00:28 前,执行于 2022年02月06日 星期日 12时53分49秒。
软件包 wget-1.19.5-10.el8.x86_64 已安装。
依赖关系解决。
========================================================
 软件包                  架构       版本                    仓库           大小
========================================================
安装:
 bison  x86_64   3.0.4-10.el8     appstream     688 k
 boost-devel  x86_64  1.66.0-10.el8  appstream  10 M
............省略
  ncurses-c++-libs-6.1-9.20180224.el8.x86_64
  ncurses-devel-6.1-9.20180224.el8.x86_64
  nettle-devel-3.4.1-7.el8.x86_64
  openssl-devel-1:1.1.1k-5.el8_5.x86_64
  p11-kit-devel-0.23.22-1.el8.x86_64
  pcre2-devel-10.32-2.el8.x86_64
  pcre2-utf16-10.32-2.el8.x86_64
  pcre2-utf32-10.32-2.el8.x86_64 
  xz-devel-5.2.4-3.el8.x86_64
  zlib-devel-1.2.11-17.el8.x86_64
完毕!
[root@localhost ~]# 
2.MariaDB官网复制源码包链接地址
[root@localhost ~]# wget -c https://mirrors.aliyun.com/mariadb/mariadb-10.6.7/source/mariadb-10.6.7.tar.gz
--2022-02-10 07:28:21--  https://mirrors.aliyun.com/mariadb/mariadb-10.6.7/source/mariadb-10.6.7.tar.gz
正在解析主机 mirrors.aliyun.com (mirrors.aliyun.com)... 58.49.193.194, 58.49.193.195, 182.105.147.118, ...
正在连接 mirrors.aliyun.com (mirrors.aliyun.com)|58.49.193.194|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:85868754 (82M) [application/octet-stream]
正在保存至: “mariadb-10.6.7.tar.gz”
mariadb-10.6.7.tar.gz 100%[========================>]  81.89M  11.3MB/s  用时 7.4s    
2022-02-10 07:28:28 (11.0 MB/s) - 已保存 “mariadb-10.6.7.tar.gz” [85868754/85868754])
[root@localhost ~]# 
3.解压下载的源码包
[root@localhost ~]# tar -xvf mariadb-10.6.7.tar.gz -C /usr/local/
mariadb-10.6.7/
mariadb-10.6.7/VERSION
mariadb-10.6.7/BUILD-CMAKE
............省略
mariadb-10.6.7/vio/viosocket.c
mariadb-10.6.7/vio/viotest.cc
mariadb-10.6.7/config.h.cmake
mariadb-10.6.7/CREDITS
mariadb-10.6.7/configure.cmake
[root@localhost ~]# 
4.进入解压后的源码包文件夹,随后进行编译
[root@localhost ~]# cd /usr/local/mariadb-10.6.7/
[root@localhost mariadb-10.6.7]# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mariadb  \
> -DMYSQL_DATADIR=/data/mariadb/  \
> -DSYSCONFDIR=/usr/local/mariadb  \
> -DMYSQL_USER=mysql -DMYSQL_TCP_PORT=3306  \
> -DWITHOUT_TOKUDB=1  \
> -DMYSQL_UNIX_ADDR=/tmp/mysql.sock  \
> -DDEFAULT_CHARSET=utf8  \
> -DDEFAULT_COLLATION=utf8_general_ci
-- The C compiler identification is GNU 8.5.0
-- The CXX compiler identification is GNU 8.5.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
............省略
-- The following OPTIONAL packages have not been found:
 * Git
 * Java (required version >= 1.6)
 * JNI
 * PMEM
 * Judy
   Required for the OQGraph storage engine
-- Configuring done
-- Generating done
-- Build files have been written to: /usr/local/mariadb-10.6.7
[root@localhost mariadb-10.6.7]# 
5.进行编译make安装(安装时长差不多在半小时左右,具体根据自己设备情况定)
[root@localhost mariadb-10.6.7]# make && make install
[  0%] Building C object wsrep-lib/wsrep-API/CMakeFiles/wsrep_api_v26.dir/v26/wsrep_gtid.c.o
[  0%] Building C object wsrep-lib/wsrep-API/CMakeFiles/wsrep_api_v26.dir/v26/wsrep_dummy.c.o
[  0%] Building C object wsrep-lib/wsrep-API/CMakeFiles/wsrep_api_v26.dir/v26/wsrep_loader.c.o
[  0%] Built target INFO_SRC
[  0%] Building C object extra/readline/CMakeFiles/readline.dir/readline.c.o
................省略
-- Installing: /usr/local/mariadb/support-files/policy/apparmor/usr.sbin.mysqld.local
-- Installing: /usr/local/mariadb/support-files/policy/selinux/mariadb.pp
-- Installing: /usr/local/mariadb/lib/pkgconfig/mariadb.pc
-- Installing: /usr/local/mariadb/share/aclocal/mysql.m4
-- Installing: /usr/local/mariadb/support-files/mysql.server
[root@localhost mariadb-10.6.7]# 
6.配置启动文件及权限
[root@localhost mariadb-10.6.7]# cd /usr/local/mariadb/
[root@localhost mariadb]# useradd -r -s /sbin/nologin -d /data/mariadb mysql
[root@localhost mariadb]# cp support-files/mysql.server /etc/init.d/mysqld
[root@localhost mariadb]# chmod +x /etc/init.d/mysqld
[root@localhost mariadb]# mkdir -p /data/mariadb/
[root@localhost mariadb]# chown -R mysql. /data/mariadb
[root@localhost mariadb]# chown -R mysql:mysql /usr/local/mariadb/
[root@localhost mariadb]# 
7.配置mariadb
[root@localhost mariadb]# vim /usr/local/mariadb/my.cnf
[root@localhost mariadb]# cat /usr/local/mariadb/my.cnf
[mysqld]
basedir=/usr/local/mariadb/
datadir=/data/mariadb/
port=3306
pid-file=/data/mariadb/mysql.pid
socket=/tmp/mysql.sock

[mysqld_safe]
log-error=/data/mariadb/mysql.log

[client]
port=3306
socket=/tmp/mysql.sock
default-character-set=utf8
[root@localhost mariadb]# 
8.初始化mariadb
[root@localhost mariadb]# /usr/local/mariadb/scripts/mariadb-install-db --datadir=/data/mariadb/ 
Installing MariaDB/MySQL system tables in '/data/mariadb/' ...
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system


Two all-privilege accounts were created.
One is root@localhost, it has no password, but you need to
be system 'root' user to connect. Use, for example, sudo mysql
The second is root@localhost, it has no password either, but
you need to be the system 'root' user to connect.
After connecting you can set the password, if you would need to be
able to connect as any of these users with a password and without sudo

See the MariaDB Knowledgebase at https://mariadb.com/kb or the
MySQL manual for more instructions.

You can start the MariaDB daemon with:
cd '.' ; ./bin/mysqld_safe --datadir='/data/mariadb/'

You can test the MariaDB daemon with mysql-test-run.pl
cd './mysql-test' ; perl mysql-test-run.pl

Please report any problems at https://mariadb.org/jira

The latest information about MariaDB is available at https://mariadb.org/.
You can find additional information about the MySQL part at:
https://dev.mysql.com
Consider joining MariaDB's strong and vibrant community:
https://mariadb.org/get-involved/

[root@localhost mariadb]# 
9.更改目录权限
[root@localhost mariadb]# chown -R root. /usr/local/mariadb/
[root@localhost mariadb]#  chown -R mysql:mysql /data/mariadb/
[root@localhost mariadb]# 
10.启动并登录mariadb
[root@localhost mariadb]#  /etc/init.d/mysqld start
Reloading systemd:                                    [  确定  ]
正在启动 mysqld (via systemctl):                       [  确定  ]
[root@localhost mariadb]#  chkconfig --add mysqld
[root@localhost mariadb]#  /usr/local/mariadb/bin/mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 4
Server version: 10.6.7-MariaDB Source distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> 
MariaDB [(none)]> exit
Bye
[root@localhost mariadb]# 
11.数据安全配置
[root@localhost mariadb]# /usr/local/mariadb/bin/mysql_secure_installation 

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none): 
OK, successfully used password, moving on...

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n] y
Enabled successfully!
Reloading privilege tables..
 ... Success!


You already have your root account protected, so you can safely answer 'n'.

Change the root password? [Y/n] y
New password: 
Re-enter new password: 
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] n
 ... skipping.

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!
[root@localhost mariadb]# 
12.配置环境变量
[root@localhost mariadb]# echo "export PATH=/usr/local/mariadb/bin:$PATH" >/etc/profile.d/mariadb.sh
[root@localhost mariadb]# . /etc/profile.d/mariadb.sh 
[root@localhost mariadb]# mysql -uroot -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 14
Server version: 10.6.7-MariaDB Source distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.001 sec)

MariaDB [(none)]> exit
Bye
[root@localhost mariadb]# 
数据库DNF安装
1.配置本地软件仓库
[root@localhost ~]# mount /dev/sr0  /mnt/
mount: /mnt: WARNING: device write-protected, mounted read-only.
[root@localhost ~]# vim /etc/yum.repos.d/redhat.repo 
#
# Certificate-Based Repositories
# Managed by (rhsm) subscription-manager
#
# *** This file is auto-generated.  Changes made here will be over-written. ***
# *** Use "subscription-manager repo-override --help" if you wish to make changes. ***
#
# If this file is empty and this system is subscribed consider
# a "yum repolist" to refresh available repos
#
[AppStream]
name=AppStream
baseurl=file:///mnt/AppStream
enabled=1
gpgcheck=0
[BaseOS]
name=BaseOS
baseurl=file:///mnt/BaseOS
enabled=1
gpgcheck=0
:wq!
[root@localhost ~]#
[root@localhost ~]# dnf clean all
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
12 文件已删除
[root@localhost ~]# dnf makecache 
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
AppStream                                       205 MB/s | 5.8 MB     00:00    
BaseOS                                          250 MB/s | 2.3 MB     00:00    
元数据缓存已建立。
[root@localhost ~]#
2.搜索mariadb软件,并安装
[root@localhost ~]# dnf search mariadb
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
上次元数据过期检查:0:07:47 前,执行于 2021年01月12日 星期二 22时58分53秒。
========================================== 名称 精准匹配:mariadb ===========================================
mariadb.x86_64 : A very fast and robust SQL database server
======================================== 名称 和 概况 匹配:mariadb =========================================
mariadb-embedded.x86_64 : MariaDB as an embeddable library
mariadb-server.x86_64 : The MariaDB server and related files
mariadb-test.x86_64 : The test suite distributed with MariaDB
mariadb-oqgraph-engine.x86_64 : The Open Query GRAPH engine for MariaDB
mariadb-connector-c.i686 : The MariaDB Native Client library (C driver)
mariadb-connector-c.x86_64 : The MariaDB Native Client library (C driver)
mariadb-devel.x86_64 : Files for development of MariaDB/MySQL applications
mariadb-connector-c-devel.i686 : Development files for mariadb-connector-c
mariadb-connector-c-devel.x86_64 : Development files for mariadb-connector-c
mariadb-connector-odbc.x86_64 : The MariaDB Native Client library (ODBC driver)
mariadb-embedded-devel.x86_64 : Development files for MariaDB as an embeddable library
mariadb-server-utils.x86_64 : Non-essential server utilities for MariaDB/MySQL applications
mariadb-java-client.noarch : Connects applications developed in Java to MariaDB and MySQL databases
============================================ 名称 匹配:mariadb =============================================
mariadb-backup.x86_64 : The mariabackup tool for physical online backups
mariadb-common.x86_64 : The shared files required by server and client
mariadb-errmsg.x86_64 : The error messages files required by server and embedded
mariadb-gssapi-server.x86_64 : GSSAPI authentication plugin for server
mariadb-server-galera.x86_64 : The configuration files and scripts for galera replication
mariadb-connector-c-config.noarch : Configuration files for packages that use /etc/my.cnf as a configuration
                                  : file
[root@localhost ~]#
[root@localhost ~]# dnf -y install mariadb*
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
上次元数据过期检查:1:56:09 前,执行于 2021年01月12日 星期二 23时10分36秒。
依赖关系解决。
===========================================================
 软件包             架构       版本                      仓库           大小
===========================================================
安装:
 mariadb  x86_64  3:10.3.17-1.module+el8.1.0+3974+90eded84  AppStream     6.1 M
 mariadb-backup x86_64 3:10.3.17-1.module+el8.1.0+3974+90eded84 AppStream   6.0 M
。。。。。。。。。。。。。。。。。。。。。。。。。。。。省略                                                                  
  perl-Time-HiRes-1.9758-1.el8.x86_64                                                                        
  tzdata-java-2019c-1.el8.noarch                                                                             
  unixODBC-2.3.7-1.el8.x86_64                                                                                
  zlib-devel-1.2.11-13.el8.x86_64                                                                            

完毕!
[root@localhost ~]#
3.启动mariadb服务
[root@localhost ~]# systemctl restart mariadb.service 
[root@localhost ~]# systemctl  enable mariadb.service 
Created symlink /etc/systemd/system/mysql.service → /usr/lib/systemd/system/mariadb.service.
Created symlink /etc/systemd/system/mysqld.service → /usr/lib/systemd/system/mariadb.service.
Created symlink /etc/systemd/system/multi-user.target.wants/mariadb.service → /usr/lib/systemd/system/mariadb.service.
[root@localhost ~]# systemctl  stop firewalld.service 
[root@localhost ~]# setenforce 0
4.执行安全初始化脚本
[root@localhost ~]# mysql_secure_installation 

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none): 
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] y
New password: 
Re-enter new password: 
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!
[root@localhost ~]#
5.数据库登录
[root@localhost ~]# mysql -uroot -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 16
Server version: 10.3.17-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> 
MariaDB [(none)]> exit
Bye
[root@localhost ~]#
上一篇 下一篇