1. MySQL 数据库

本章内容

关系型数据库基础

安装 MySQL

管理数据库和表

用户和权限管理

函数,存储过程,触发器和事件

MySQL 架构

存储引擎

服务器选项,系统和状态变量

优化查询和索引管理

锁和事务管理

日志管理

备份还原

MySQL 集群

压力测试

1)数据库原理

1.1)数据的时代

涉及的数据量大

数据不随程序的结束而消失

数据被多个应用程序共享

大数据

数据的分类:

结构化的数据:即有固定格式和有限长度的数据。

例如:填的 EXCEL 表格 就是结构化的数据

国籍:中华人民共和国

民族:汉

性别:男

这都叫 结构化数据

非结构化的数据:非结构化的数据越来越多,就是不定长、无固定格式的数据。

例如:网页,图片文件,有时候非常大,有时候很小;

例如:语音,视频。

都是 非结构化数据

半结构化数据:

比如:XML 或者 HTML 的格式的数据。

1.2)数据库的发展史

1.2.1)文件管理模式 的缺点

编写应用程序不方便

不支持对文件的并发访问

无安全控制功能

难以按用户视图表示数据

数据间联系弱

数据冗余不可避免

应用程序依赖性

1.2.2)数据库管理的发展阶段

萌芽阶段文件系统

使用磁盘文件来存储数据

初级阶段第一代数据库

出现了网状模型、层次模型的数据库

中级阶段第二代数据库

关系型数据库和结构化查询语言

高级阶段新一代数据库

"关系-对象" 型数据库

1.3)DBMS 数据库管理系统

Database:数据库是数据的汇集,它以一定的组织形式存于存储介质上。

DBMS:Database Management System,是管理数据库的系统软件,它实现数据库系统的各种功能。是数据库系统的核心。

DBA:Database Administrator,负责数据库的规划、设计、协调、维护和管理等工作。

Application:应用程序,指以数据库为基础的应用程序。

1.4)数据库管理系统的优点

程序与数据相互独立。

保证数据的安全、可靠。

最大限度地保证数据的正确性。

数据可以并发使用并能同时保证一致性。

相互关联的数据的集合。

较少的数据冗余。

1.5)数据库管理系统的基本功能

数据定义

数据处理

数据安全

数据备份

1.6)数据库系统的架构

单机式架构(Access)

大型主机/终端架构

主从式架构(C/S

分布式架构(TiDB

1.7)各种数据库管理系统

1.7.1)层次 数据库

参考:https://www.yuque.com/blogking/linux/ud18vxqsn6afzfy6

分层结构由 IBM 在 20 世纪 60 年代开发,并在早期大型机 DBMS 中使用。

记录的关系形成了一个树状模型。这种结构简单,但缺乏灵活性,因为这种关系仅限于一对多关系。

代表数据库:IBM IMS (信息管理系统)

优点:这是导航结构

优点:结构清晰,分类查询方便

缺点:有可能造成数据无效,如:无法区分是哪个 "李白"

1.7.2)网状 数据库

1964 年通用电气 GE 公司的 Charles Bachman 成功地开发出世界上第一个网状数据库 IDS ( 集成数据存储),IDS 具有数据模式和日志的特征,只能在 GE 主机运行。

特点

1、每个表都是独立的

2、通过关系字段将两个表连接起来

3、关系:两个表的公共字段

4、关系型数据库中多表联合查询效率低下。比如查询整个公司的四月的营业额( 张经理 + 李经理+xxx )。

1.7.3)RDBMS 关系型数据库

Relational Database Management System,关系模型最初由 IBM 公司的英国计算机科学家埃德加·科德(Edgar F. Codd)于 1969 年描述,1974 年,IBM 开始开发系统 R,这是一个开发 RDBMS 原型的研究项目。

然而,第一个商业上可用的 RDBMS 是甲骨文,于 1979 年由关系软件(现为甲骨文公司)发布。

特点

1、每个表都是独立的

2、通过关系字段将两个表连接起来

3、关系:两个表的公共字段

4、关系型数据库中多表联合查询效率低下。

1.7.3.1)关系统型数据库 相关概念

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

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

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

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

唯一性:主键值必须是唯一的,不允许重复

非空性:主键值不能为空,即不得为 NULL

独特性:每张表只能定义一个主键

不可变性:一旦记录被插入,主键值便不可被修改

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

 Domain:属性的 取值范围

如:性别只能是 男 和 女 两个值

如:人类的年龄只能 0-150。

1.7.3.2)常用 关系数据库

MySQL

MySQL

MariaDB

Percona Server

PostgreSQL:简称为 pgsql,EnterpriseDB

Oracle

MSSQL Server

DB2

1.7.3.3)数据库排名

DB-Engines Ranking - popularity ranking of database management systems

1.8)关系型数据库理论

1.8.1)实体-联系 模型( E-R 模型 )

E-R 模型 即 实体-关系模型 :E-R 模型就是描述数据库存储数据的结构模型

对于大型公司开发项目:需要根据产品经理的设计,先使用建模工具

如:power designer,db desinger 等这些软件来 画出实体-关系模型( E-R 模型)

实体 Entity:客观存在并可以相互区分的客观事物或抽象事件称为实体即表,在 E-R 图中用 矩形 表示实体,把实体名写在框内。( 类似 )

属性 Attribute:实体所具有的特征或性质,描述实体里面的单个信息, 使用 椭圆形 表示。( 类似字段 )

联系 Relationship:描述了实体的属性之间的关联规则。( 关系 )

实体内部的联系:指组成同一个实体内的各属性之间的联系。如职工实体中,职工号和部门经理号之间有一种关联关系

实体之间的联系:指不同实体之间的属性的联系。例:学生选课实体和学生基本信息实体之间

实体之间的联系用 菱形 框表示

E-R 模型 范例:

参考:开放平台

实体:类似数据库中的

属性:类似数据库表中的字段

联系:类似描述数据表之间的关系( 指实体之间的联系 )

(1)地址实体 包括 用户编号,省,市,地区,收件人,联系电话,是否默认地址。

(2)用户实体 包括 用户编号,用户名称,昵称,用户密码,手机号,邮箱,头像,用户级别

(3)购物车实体 包括 购物车编号,用户编号,商品编号,商品数量,图片文件 url

(4)订单实体 包括 订单编号,收货人,收件人电话,总金额,用户编号,付款方式,送货地址,下单时间

(5)订单详情实体 包括 订单详情编号,订单编号,商品名称,商品编号,商品数量。

总结

其实,任何一个基于数据库的应用项目,都可以通过这种先建立 ER 模型,再转换成数据表的方式,完成数据库的设计工作,创建ER模型不是目的,目的是把业务逻辑梳理清楚,设计出优秀的数据库。

我建议你不是为了建模而建模,要利用创建 ER 模型的过程来整理思路,这样创建 ER 模型才有意义。

1.8.2)联系类型( ER 模型的 3 个要素 )

一对一:指实体之间的关系是一一对应的,比如个人与身份证信息之间的关系就是一对一的关系。一个人只能有一个身份证信息,一个身份证也只属于一个人。

一对多:指一边的实体通过关系,可以对应多个另一边的实体。

相反另外一边的实体通过这个关系,则只能对应唯一的一边的实体。

比如说:我们新建一个班级表,而每个班级都有多个学生,每个学生则对应一个班级,班级对学生就是一对多的关系。

多对多:

指关系两边的实体都可以通过关系对应多个对方的实体。

比如在进货模块中,供货商与超市之间的关系就是多对多的关系,一个供货商可以给多个超市供货,一个超市也可以从多个供货商那里采购商品。

再比如一个选课表,有许多科目,每个科目有很多学生选,而每个学生又可以选择多个科目,这就是多对多的关系。

主键与外键 的区别与联系

参考:数据库外键主键_51CTO博客_数据库的主键和外键

主键  外键 是关系型数据库中非常重要的概念,用于描述表之间的关系。下面是它们的区别和联系:

主键 是数据表中的一列或一组列,用于唯一地标识每一行记录主键必须是唯一的,不能重复,并且不能为 NULL 。通常情况下,主键会自动递增,从而保证每一行记录的唯一性。主键可以由单个列或多个列组成,多列主键也称为复合主键。

外键 是一个表中的列,它指向另一个表的主键列,用于描述表之间的关系。外键可以为空,也可以有重复值。外键在建立表之间的关系时非常重要,它确保了表之间的数据完整性,同时也是查询和更新表之间数据的基础。

主键和外键之间的联系 在于外键关联到另一个表的主键上。外键通常是在一张表中,引用另一张表的主键,这样就能够建立表与表之间的关联关系。主键和外键都是用来维护表之间的关系的,主键作为表中每一行记录的唯一标识,而外键作为表与表之间的桥梁,建立了表之间的关联关系。

总的来说,主键和外键是非常重要的概念,它们在关系型数据库的设计和使用中起着至关重要的作用。主键和外键的建立需要根据具体的业务需求和数据库设计原则进行,以确保数据的完整性和一致性。

1.8.3)数据的操作( 增删改查 )

开发工程师 CRUD( 增加 Create、查询 Retrieve 或 Read、更新 Update、 删除 Delete)

数据提取:在数据集合中提取感兴趣的内容。SELECT

数据更新:变更数据库中的数据。INSERT、DELETE、UPDATE

1.8.4)数据库规划流程

参考:https://www.cnblogs.com/daniumeng/p/8715911.html

CDM 模型:概念数据库模型,建立在传统的ER图模型的理论上,主要的三大元素有实体型属性 联系

LDM 模型:在 CDM 的基础上,对于每个实体定义了主键和外键,需要进行范式化处理。LDM 是为了尽可能详细的描述数据,但是不考虑数据在物理上是如何实现的。

PDM 模型:主要涉及到的基本概念有: 表、列、试图、主键、候选键、储存过程、触发器、索引、完整性检查约束。

收集数据,得到字段

收集必要且完整的数据项

转换成数据表的字段

把字段分类,归入表,建立表的关联

关联:表和表间的关系

分割数据表并建立关联的优点

节省空间

减少输入错误

方便数据修改

规范化数据库

1.8.5)数据库的正规化分析

参考:

第一范式、第二范式、第三范式、BCNF范式详解-腾讯云开发者社区-腾讯云

数据库-第一范式、第二范式、第三范式、BC范式、第四范式简析-腾讯云开发者社区-腾讯云

数据库规范化,又称数据库或资料库的正规化、标准化,是数据库设计中的一系列原理和技术,以减少数据库中数据冗余,增进数据的一致性。

关系模型的发明者 埃德加·科德 最早提出这一概念,并于 1970 年代初定义了第一范式、第二范式和第三范式的概念。

设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,不同的规范要求被称为不同范式,各种范式呈递次规范,越高的范式数据库冗余越小。

目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴德斯科范式(BCNF)、第四范式 (4NF)和第五范式(5NF,又称完美范式)。

满足最低要求的范式是 第一范式(1NF)

在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。

规则是死的,人是活的,所以范式是否必须遵守,要看业务需要而定。

掌握范式的目的:是为了在合适的场景下违反范式。

参考:简单了解第一,二,三范式(图文详细)_第一范式-CSDN博客

什么是范式?

范式:范式是符合某一种级别的关系模式的集合,表示一个关系内部属性之间的联系何合理化程度。

粗略理解:就是一张数据表的表结构所符合的某种设计标准的级别

1.8.5.1)第一范式:1NF

概念:指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性

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

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

1.8.5.2)第二范式:2NF

概念:在第一范式(1NF)的基础上,实体的属性完全函数依赖于关键字(复合主键),不能存在部分依赖函数于主关键字(复合主键)

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

参考:mysql复合主键是什么意思-mysql教程-PHP中文网

什么是 复合主键

复合主键 是指 数据库表的主键含有一个以上的字段组成,即多字段主键;复合主键是主键的一种,与主键具有相同的功能和定义。

为什么会出现 复合主键?

因为数据表 name 字段可能出现重名的情况,所以要加上 id 字段来保证记录的唯一性。

1.8.5.3)第三范式:3NF

满足第三范式 必须先满足第二范式属性,非主键属性不依赖于其它非主键属性。

第三范式:要求一个数据表中不包含已在其它表中已包含的非主关键字信息,非 PK 的字段间不能有从属关系。

1.8.6)SQL 结构化查询语言简介

SQL:Structure Query Language,( 结构化查询语言 )是 1974 年由 Boyce 和 Chamberlin 提出的一个通用的、功能极强的关系性数据库语言。

SQL 解释器:将 SQL 语句解释成机器语言

数据存储协议:应用层协议,C/S

S:Server, 监听于套接字,接收并处理客户端的应用请求

C:Client

客户端程序接口

CLI

GUI

应用编程接口

ODBC:Open Database Connectivity

JDBC:Java Data Base Connectivity

1.8.7)数据约束

约束:Constraint,表中的数据在数据类型限定的基础上额外要遵守的限制

常见约束 如下:

非空 not null:此字段不允许填写空值

主键 primary key:一个或多个字段的组合,填入的数据必须能在本表中唯一标识本行;必须提供数据,即 NOT NULL,一个表只能有一个。

惟一键 unique:一个或多个字段的组合,填入的数据必须能在本表中唯一标识本行;允许为 NULL,一个表可以存在多个。

默认值 default:当不填写字段对应的值会使用默认值,如果填写时以填写为准。

外键 foreign key:一个表中的某字段可填入的数据取决于另一个表的主键或唯一键已有的数据。

检查:字段值在一定范围内,如年龄在 0 到 150 之间。

1.8.8)关系运算

选择:挑选出符合条件的行。( 类似 grep 命令 )

投影:挑选出需要的字段。( 类似 cut 命令 )

连接:表间字段的关联。

1.8.9)数据抽象

物理层:数据存储格式,即 RDBMS 在磁盘上如何组织文件。

逻辑层:DBA 角度,描述存储什么数据,以及数据间存在什么样的关系。

视图层:用户角度,描述 DB 中的部分数据。

1.8.10)关系模型的分类

关系模型

基于对象的关系模型

半结构化的关系模型:XML 数据

2)MySQL 安装和基本使用

2.1)MySQL 介绍

2.1.1)MySQL 历史

MySQL 的历史可以追溯到 1979 年,它的创始人 叫作 Michael Widenius,他在开发一个报表工具的时候,设计了一套 API,后来他的客户要求他的 API 支持 SQL 语句,他直接借助于 mSQL(当时比较牛)的代码,将它集成到自己的存储引擎中。但是他总是感觉不满意,萌生了要自己做一套数据库的想法。

直到 1996 年,MySQL 1.0 发布,Michael Widenius 的大女儿的简称就是 MY,Michael Widenius 大概也是把 MySQL 当成自己的女儿一样来对待,仅仅过了几个月的时间,1996 年 10 月 MySQL 3.11.1 当时发布了 Solaris 的版本,一个月后,Linux 的版本诞生,从那时候开始,MySQL 慢慢的被人所接受。

1999年,Michael Widenius 成立了 MySQL AB 公司,MySQL 由个人开发转变为团队开发,2000 年使用 GPL 协议开源。

2001 年,MySQL 生命中的大事发生了,那就是存储引擎 InnoDB 的诞生!Oracle 在 2005 年收购了 InnoDB,只不过 InnoDB 一直以来都只能作为第三方插件供用户选择。直到现在,MySQL 可以选择的众多存储引擎中,InnoDB 依然是第一选择。

2008 年 1 月,MySQL AB 公司被 Sun 公司以 10 亿美金收购,MySQL 数据库进入 Sun 时代。Sun 为 MySQL 的发展提供了绝佳的环境,2008 年 11 月,MySQL 5.1 发布,MySQL 成为了最受欢迎的小型数据库。

2009 年 4 月,Oracle 公司以 74 亿美元收购 Sun 公司,MySQL 也随之进入 Oracle 时代。

2010 年 12 月,MySQL 5.5 发布,Oracle 终于把 InnoDB 做成了 MySQL 默认的存储引擎,MySQL 从此进入了辉煌时代。

然而,从那之后,Oracle 对 MySQL 的态度渐渐发生了变化,Oracle 虽然宣称 MySQL 依然尊少 GPL 协议,但却暗地里把开发人员全部换成了 Oracle 自己人,开源社区再也影响不了 MySQL 发展的脚步,真正有心做贡献的人也被拒之门外,MySQL 随时都有闭源的可能……

看着自己辛苦养大的 MySQL 被 Oracle 搞成这样,Michael Widenius 非常失望,决定在 MySQL 走向闭源前,将 MySQL 进行分支化,依然是使用了自己小女儿的名字 MariaDB( 玛莉亚DB )。

MariaDB 数据库管理系统是 MySQL 的一个分支,主要由开源社区在维护,采用 GPL 授权许可 MariaDB 的目的是完全兼容 MySQL,包括 API 和命令行,使之能轻松成为 MySQL 的代替品。在存储引擎方面,使用 XtraDB 来代替 MySQL 的 InnoDB。

MariaDB 由 MySQL 的创始人 Michael Widenius 主导,由开源社区的大神们进行开发。因此,大家都认为,MariaDB 拥有比 MySQL 更纯正的 MySQL 血脉。

最初的版本更新与 MySQL 同步,相对 MySQL5 以后的版本,MariaDB 也有相应的 5.1~5.5 的版本。后来 MariaDB 终于摆脱了 MySQL ,它的版本号直接从 10.0 开始,以自己的步伐进行开发,当然,还是可以对 MySQL 完全兼容。

MySQL 大事记

1979 年:TcX 公司 Monty Widenius,Unireg

1996 年:发布 MySQL1.0,Solaris 版本,Linux 版本

1999 年:MySQL AB 公司,瑞典

2003 年:MySQL 5.0 版本,提供视图、存储过程等功能

2008 年:Sun 公司以 10 亿美元收购 MySQL

2009 年:Oracle 公司以 74 亿美元收购 Sun 公司

2009 年:Monty 成立 MariaDB

2.1.2)MySQL 系列

2.1.2.1)MySQL 的三大主要分支

MySQL

MariaDB

Percona Server

2.1.2.2)官方网址

MySQL

MariaDB Foundation - MariaDB.org

Open Source Database Software Support & Services | Percona

2.1.2.3)官方文档

MySQL :: MySQL Documentation

MariaDB Knowledge Base

Percona Server for MySQL - Open Source MySQL Server Alternative

2.1.2.4)版本演变

MySQL:5.1 --> 5.5 --> 5.6 --> 5.7 --> 8.0

MariaDB:5.1 -->5.5 --> 10.0--> 10.1 --> 10.2 --> 10.3 --> 10.4 --> 10.5 --> 10.6

MySQL 被 Sun 收购后, 搞了个过渡的 6.0 版本, 没多久就下线了, 后来被 Oracle 收购后, 终于迎来了像样的 5.6

 版本, 之后就是 5.7, 8.0 版本.

由于 6.0 版本号已被用过, 7.x 系列版本专用于 NDB Cluster, 因而新版本号从 8.0 开始.

2.1.3)MySQL 的特性

开源免费

插件式存储引擎:也称为 "表类型",存储管理器有多种实现版本,功能和特性可能均略有差别;用户可根据需要灵活选择,MySQL 5.5.5 开始 innoDB 引擎是 MYSQL 默认引擎

MyISAM ==> Aria

InnoDB ==> XtraDB

单进程,多线程

诸多扩展和新特性

提供了较多测试组件

2.2)MySQL 安装方式介绍和快速安装

2.2.1)安装方式介绍

程序包管理器管理的程序包

源代码编译安装

二进制格式的程序包:展开至特定路径,并经过简单配置后即可使用

2.2.2)RPM 包安装 MySQL

CentOS6 默认光盘镜像仓库 带有 MySQL 5.1 版本

CentOS7 默认光盘镜像仓库 不再包含 MySQL 软件,而存在 MariaDB 5.5 版本 。

CentOS8 默认光盘镜像仓库 即包含 MySQL 软件,也包含 MariaDB 10.3 软件。

[root@centos6 ~] yum info mariadb-server

[root@centos7 ~] yum info mariadb-server



[root@centos8 ~] yum info mysql-server

[root@centos8 ~] yum info mariadb-server

CentOS 安装光盘

项目官方:Download MariaDB Server - MariaDB.org

国内镜像:Index of /mariadb/yum/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

Index of /mysql/yum/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

CentOS 8:安装光盘直接提供

MySQL-Server:8.0

MariaDB-Server : 10.3.17

CentOS 7:安装光盘直接提供

MariaDB-Server:5.5 服务器包

MariaDB 客户端工具包

CentOS 6:

MySQL-Server:5.1 服务器包

MySQL:客户端工具包

默认可以直接基于 Yum 命令安装数据库软件

// "基于 YUM 源安装"

// "CentOS7" 默认可以安装 MariaDB    ( 光盘镜像仅包含 MariaDB )

// "CentOS8" 默认可以安装 MySQL      ( 光盘镜像两者都包含 )

[root@centos7 ~] yum install mariadb-server -y

[root@centos8 ~] yum install mysql-server -y



// "启用 数据库 服务"

[root@centos7 ~] systemctl enable --now mariadb

[root@centos8 ~] systemctl enable --now mysqld

"连接数据库"

// 使用 Yum 命令基于光盘镜像源安装的数据库服务

// 默认可以直接使用 mysql 客户端工具连接, 密钥为空 ( "不安全" )

[root@centos7 ~] mysql

[root@centos8 ~] mysql

演示:基于 MySQL 官网下载软件包( 自定义安装 MySQL 版本 )

下载 老版本

下载完成后,直接使用 rpm -ivh 安装即可

范例:

Linux 小技巧:CentOS 7 利用 Yum 源安装 MySQL5.7

// 清华源

[root@centos7 ~] tee /etc/yum.repos.d/mysql.repo <<EOF

[mysql]

name=mysql5.7

baseurl=https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-5.7-community-el7-x86_64/

gpgcheck=0

EOF

[root@centos7 ~] yum clean all

[root@centos7 ~] yum makecache



// 安装软件包     ( mysql-community 综合软件包 )

[root@centos7 ~] yum -y install mysql-community-server

[root@centos7 ~] systemctl enable --now mysqld

[root@centos7 ~] netstat -nltp



// 使用 mysql 客户端验证

[root@centos7 ~] mysql

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)



// 查看日志 ("过滤出临时密码")

[root@centos7 ~] cat /var/log/mysqld.log | grep password

2023-12-28T17:30:19.636282Z 1 [Note] A temporary password is generated for root@localhost: 9JuVv4/?tejN

2023-12-28T17:30:34.693639Z 2 [Note] Access denied for user 'root'@'localhost' (using password: NO)



// 修改初始密码方法 1

[root@centos7 ~] mysql -uroot -p'9JuVv4/?tejN'    ( 注意: 密码建议使用引号包含 )



// 注意: "使用初始密码登录无法执行操作, 需要修改密码后才可以!!!"

mysql> status

ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.



# 修改简单密码不符合密码策略

mysql> alter user root@'localhost' identified by '123456';

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements



# 修改为复杂密码

mysql> alter user root@'localhost' identified by 'P@ssw0rd123456';

Query OK, 0 rows affected (0.00 sec)



mysql> status

--------------

mysql  Ver 14.14 Distrib 5.7.44, for Linux (x86_64) using  EditLine wrapper



Connection id:3

Current database:

Current user:root@localhost

SSL:Not in use

Current pager:stdout

Using outfile:''

Using delimiter:;

Server version:5.7.44

Protocol version:10

Connection:Localhost via UNIX socket

Server characterset:latin1

Db     characterset:latin1

Client characterset:utf8

Conn.  characterset:utf8

UNIX socket:/var/lib/mysql/mysql.sock

Uptime:2 min 19 sec



Threads: 1  Questions: 11  Slow queries: 0  Opens: 107  Flush tables: 1  Open tables: 100  Queries per second avg: 0.079

--------------

mysql> exit



// 修改初始密码方法 2

[root@centos7 ~] mysqladmin -uroot -p'9JuVv4/?tejN' password 'P@ssw0rd123456'

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.

常用 MySQL 客户端命令( MySQL 客户端 内置命令

helpDisplay this help.

statusGet status information from the server.

systemExecute a system shell command.

sourceExecute an SQL script file. Takes a file name as an argument.

exitExit mysql. Same as quit.

mysql -uroot -p'P@ssw0rd123456'



// 注意事项

mysql> help             ( 'MySQL 客户端' 内置命令无需以分号结尾 )

mysql> show databases;  ( 'MySQL 服务端' 命令则需要使用分号结尾 )

查看 某个进程 是否为 多线程( 面试题 )

// 方法 1

// 主线程 + 次线程 = 线程总和

pstree -p | grep mysqld



// 方法 2

cat /proc/10538/status | grep Threads

范例:CentOS 7 利用 Yum 源安装 MariaDB

Download MariaDB Server - MariaDB.org

参考网站信息,配置 Yum 源

[root@centos7 ~] cat /etc/yum.repos.d/mariadb.repo

[mariadb]

name = MariaDB

baseurl = https://mirrors.nju.edu.cn/mariadb/yum/10.5/centos7-amd64

gpgkey = https://mirrors.nju.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB

gpgcheck = 1



[root@centos7 ~] yum install MariaDB-server -y

[root@centos7 ~] systemctl enable --now mariadb.service

[root@centos7 ~] mysql

MariaDB [(none)]> status

范例:Ubuntu 利用默认仓库安装 MySQL 5.7

[root@ubuntu1804 ~] apt install mysql-server

[root@ubuntu1804 ~] systemctl status mysql.service



[root@ubuntu1804 ~] mysql

mysql> status

2.2.3)初始化脚本 提高安全性

CentOS7 默认安装的  MariaDB 数据库 不安全

// CentOS7 默认安装的  MariaDB 数据库 "不安全"

mysql            ( 空密码登录 )

mysql -uxxx      ( 任意用户名可登录 )



su - wangj       

mysql -uadb      ( 普通用户任意登录 )

运行脚本:mysql_secure_installation

1. 设置数据库管理员 root 口令

2. 禁止 root 远程登录

3. 删除 anonymous 用户帐号

4. 删除 test 数据库

范例:针对 MySQL5.6 前版本 进行 安全加固( 重要 )

[root@centos7 ~] file `which mysql_secure_installation`

/usr/bin/mysql_secure_installation: POSIX shell script, ASCII text executable



// 执行数据库 "安全加固脚本"

[root@centos7 ~] mysql_secure_installation

回车

y

设置口令

重复口令

y

y

y

y

// "验证"

[root@centos7 ~] mysql

[root@centos7 ~] mysql -uxxx

[root@centos7 ~] mysql -uroot -p'P@ssw0rd123456'



MariaDB [(none)]> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mysql              |

| performance_schema |

+--------------------+

3 rows in set (0.00 sec)



MariaDB [(none)]> select user,host from mysql.user;

+------+-----------+

| user | host      |

+------+-----------+

| root | 127.0.0.1 |

| root | ::1       |

| root | localhost |

+------+-----------+

3 rows in set (0.00 sec)



MariaDB [(none)]> exit

Bye

2.3)MySQL 组成和常用工具

2.3.1)客户端程序

mysql:交互式或非交互式的 CLI 工具

mysqldump:备份工具,基于 mysql 协议向 mysqld 发起查询请求,并将查得的所有数据转换成 insert 等写操作语句保存文本文件中

mysqladmin:基于 mysql 协议管理 mysqld

mysqlimport:数据导入工具

MyISAM 存储引擎的管理工具:

myisamchk:检查 MyISAM 库

myisampack:打包 MyISAM 表,只读

2.3.2)服务器端程序

mysqld_safe

mysqld

mysqld_multi 多实例,示例:mysqld_multi --example

2.3.3)用户账号

MySQL 用户账号 两部分组成

'USERNAME'@'HOST'

wang@'10.0.0.100'

wang@'10.0.0.%'

说明:

HOST:限制此用户可通过哪些远程主机连接 MySQL 服务器( 重点 )

支持使用通配符:

注意:HOST 必须使用 ' ' 单引号包含

% 匹配任意长度的任意字符, 相当于 shell 中 *

示例: 172.16.0.0/255.255.0.0 或 172.16.%.%

_ 匹配任意单个字符,相当于shell中?

注意:如下三行信息 表示三个不同的用户,因为 MySQL 的 用户账号 是用 user@host 组合使用的。

root@127.0.0.1 表示 root 用户 只能在 MySQL 服务端 本机 进行登录 )

root@::1表示 root 用户 只能在 MySQL 服务端 本机 进行登录 )

root@localhost 表示 root 用户 只能在 MySQL 服务端 本进行登录 )

// 检索并显示 mysql.user 表中的 user 和 host 列的内容

# mysql 数据库

# user 数据表

MariaDB [(none)]> select user,host from mysql.user;



// 或者进入 mysql 数据库

// 然后查看 user 数据表

MariaDB [mysql]> use mysql;

MariaDB [mysql]> select user,host from user;

2.3.4)MySQL 客户端命令

2.3.4.1)MySQL 运行命令类型

客户端命令:本地执行,每个命令都有 完整形式 简写格式

mysql> \h, help

mysql> \u, use

mysql> \s, status

mysql> \!, system

服务端命令:通过 mysql 协议发往服务器执行并取回结果,命令末尾都必须使用 ; 命令结束符号,默认为 分号

// 示例:

mysql> SELECT VERSION();

2.3.4.2)MySQL 使用模式

交互模式

脚本模式

// 交互模式

mysql -uUSERNAME -pPASSWORD < /path/somefile.sql

cat /path/somefile.sql | mysql -uUSERNAME -pPASSWORD

// 脚本模式

mysql> source /path/from/somefile.sql

2.3.4.3)MySQL 命令使用格式

mysql [OPTIONS] [database]

MySQL 客户端 常用选项

-A, --no-auto-rehash         # 禁止补全

-u, --user=                  # 用户名, 默认为 root

-h, --host=                  # 服务器主机, 默认为 localhost

-p, --passowrd=              # 用户密码, 建议使用 -p, 默认为空密码

-P, --port=                  # 服务器端口

-S, --socket=                # 指定连接 socket 文件路径

-D, --database=              # 指定默认数据库

-C, --compress               # 启用压缩

-e  "SQL"                    # 执行 SQL 命令

-V, --version                # 显示版本

-v  --verbose                # 显示详细信息

--print-defaults             # 获取程序默认使用的配置

登录系统:

// 默认空密码登录

mysql -uroot -p

运行 MySQL 命令:

mysql> use mysql                            // 切换数据库

mysql> select database();                   // 查看当前所在数据库

mysql> select user();                       # 查看当前用户

mysql> SELECT User,Host,Password FROM user;

mysql> system clear                         # 清屏

mysql> ^D                                   # Ctrl + D 退出

Bye

范例:MySQL 的配置文件,修改提示符( Linux 小技巧:修改 MySQL 提示符 )

// 查看 MySQL 版本

[root@centos8 ~] mysql -V

mysql Ver 15.1 Distrib 10.3.11-MariaDB, for Linux (x86_64) using readline 5.1



// 临时修改 MySQL 提示符

[root@centos8 ~] mysql -uroot -pP@ssw0rd123456 --prompt="\\r:\\m:\\s(\\u@\\h) [\\d]>\\_"



// 临时修改 MySQL 提示符

[root@centos8 ~] export MYSQL_PS1="\\r:\\m:\\s(\\u@\\h) [\\d]>\\_"



// 持久修改 MySQL 提示符

[root@centos8 ~] vim /etc/my.cnf.d/mysql-clients.cnf

[mysql]

prompt="\\r:\\m:\\s(\\u@\\h) [\\d]>\\_"



[root@centos8 ~] mysql --print-defaults -v

[root@centos8 ~] mysql

10:29:30(root@localhost) [(none)]> use mysql;

10:29:34(root@localhost) [mysql]> exit

范例:配置 MySQL 客户端的 自动登录

[root@centos7 ~] vim /etc/my.cnf.d/client.cnf

[client]

user=root

password=P@ssw0rd123456



[mysql]

prompt=(\\u@\\h) [\\d]>\\_



[root@centos7 ~] mysql --print-defaults -v

[root@centos7 ~] mysql

2.3.4.4)mysqladmin 命令

mysqladmin 命令格式

// 查看 mysql 服务是否正常, 如果正常提示 mysqld is alive

mysqladmin -uroot -pP@ssw0rd123456 ping            ( 可以用来做探针监控数据库状态 )



// 关闭 mysql 服务 ( 但 mysqladmin 命令无法开启 )

mysqladmin -uroot -pP@ssw0rd123456 shutdown



// 开启 mysql 服务

systemctl start mariadb



// 创建数据库 testdb

mysqladmin -uroot -pP@ssw0rd123456 create testdb



// 删除数据库 testdb

mysqladmin -uroot -pP@ssw0rd123456 drop testdb



// 修改 root 密码

mysqladmin -uroot -pP@ssw0rd123456 password 'magedu'



// 日志滚动, 生成新文件 /var/lib/mysql/mariadb-bin.00000N

mysqladmin -uroot -pP@ssw0rd123456 flush-logs

2.3.4.5)mycliMySQL 花哨客户端工具 )

MyCLI 是 MySQL,MariaDB 和 Percona 的命令行界面

具有 自动补全命令 语法突出显示 功能

// CentOS 安装

[root@centos7 ~] yum -y install epel-release

[root@centos7 ~] yum -y install python-pip

[root@centos7 ~] yum -y install python-devel

[root@centos7 ~] yum clean all

[root@centos7 ~] pip install mycli

// Ubuntu 安装

[root@ubuntu1804 ~] apt -y install mycli

[root@ubuntu1804 ~] mycli -u root -S /var/run/mysqld/mysqld.sock

使用 Mycli

[root@centos7 ~] mycli -u root -p P@ssw0rd123456

[root@centos7 ~] mycli -u root -p P@ssw0rd123456 -S /var/run/mysqld/mysqld.sock

2.3.5)服务器端配置

2.3.5.1)服务器端配置文件

服务器端(mysqld):工作特性有多种配置方式

1、命令行选项:

2、配置文件:类ini格式,集中式的配置,能够为 mysql 的各应用程序提供配置信息

服务器端配置文件:

/etc/my.cnf       # Global 选项

/etc/mysql/my.cnf # Global 选项

~/.my.cnf         # User-specific 选项

cat /etc/my.cnf

持久修改 MySQL 提示符

// 持久修改 MySQL 提示符

[root@centos8 ~] vim /etc/my.cnf.d/mysql-clients.cnf

[mysql]

prompt="\\r:\\m:\\s(\\u@\\h) [\\d]>\\_"



[root@centos8 ~] mysql --print-defaults -v

[root@centos8 ~] mysql

10:29:30(root@localhost) [(none)]> use mysql;

10:29:34(root@localhost) [mysql]> exit

配置文件格式:

[mysqld]

[mysqld_safe]

[mysqld_multi]

[mysql]

[mysqldump]

[server]

[client]

格式:

parameter = value

说明:

_和- 相同

1, ON, TRUE意义相同, 0, OFF, FALSE 意义相同, 无区分大小写

2.3.5.2)socket 连接说明

官方说明:

https://dev.mysql.com/doc/mysql-port-reference/en/mysql-ports-reference-tables.html#mysql-client-server-ports

服务器监听的两种 socket 地址:

ip socket:监听在 tcp 的 3306 端口,支持远程通信 ,侦听 3306/tcp 端口可以在绑定有一个或全部接口 IP 上

unix sock:监听在 sock 文件上,仅支持本机通信,如:/var/lib/mysql/mysql.sock )

说明:host 为 localhost 时自动使用 unix sock

范例:MySQL 的端口

mysql> SHOW VARIABLES LIKE 'port';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| port          | 3306  |

+---------------+-------+

1 row in set (0.01 sec)



# MySQL8.0 增加了一个 33060/tcp 端口

# Port 33060 is the default port for the MySQL Database Extended Interface (the MySQL X Protocol).

mysql> SHOW VARIABLES LIKE 'mysqlx_port';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| mysqlx_port   | 33060 |

+---------------+-------+

1 row in set (0.00 sec)

2.3.5.3)关闭 mysqld 网络连接

只侦听本地客户端, 所有客户端和服务器的交互都通过一个 socket 文件实现,socket 的配置存放在 /var/lib/mysql/mysql.sock ) 可在 /etc/my.cnf 修改

范例:

vim /etc/my.cnf

[mysqld]

skip-networking=1

bind_address=127.0.0.1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/350407.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【星海随笔】unix 启动问题记录.

启动Ubuntu操作系统时&#xff0c;直接进入GRUB状态。 调试时候&#xff0c;曾显示 no bootable device no known filesystem detected 注意&#xff1a; 目前 GRUB 分成 GRUB legacy 和 GRUB 2。版本号是 0.9x 以及之前的版本都称为 GRUB Legacy &#xff0c;从 1.x 开始的就称…

软件功能测试如何确定测试需求?CMA、CNAS软件测试报告获取

软件功能测试是为了验证软件的功能是否按照设计要求正常工作的过程&#xff0c;可以确保软件的质量&#xff0c;提高用户体验&#xff0c;也是保证软件安全和可靠性的重要一环。我们需要从多个角度对软件的各个功能模块进行测试&#xff0c;确保每个功能都能正常运行&#xff0…

75 C++对象模型探索。C++关于 虚函数表指针位置分析。C++ 面向对象和基于对象的概念。

如果一个类中&#xff0c;有虚函数&#xff0c;针对这个类会产生一个虚函数表。 生成这个类对象的时候&#xff0c;会有一个虚函数表指针&#xff0c;这个指针会指向这个虚函数表的开始地址。 我们本节就研究这个vptr指针。注意&#xff0c;vptr指针在 类对象中的位置。 证明…

AI Agents系列—— 探究大模型的推理能力,关于Chain-of-Thought的那些事儿

一、写在前面&#xff1a;关于AI Agents与CoT 本文是2023.07.24发表在同名公众号「陌北有棵树」上的一篇文章&#xff0c;个人观点是基础理论的学习现在仍是有必要的&#xff0c;所以搬运过来。 今天要读的论文是《Chain-of-Thought Prompting Elicits Reasoning in Large La…

【C++】C++入门基础讲解(一)

&#x1f497;个人主页&#x1f497; ⭐个人专栏——C学习⭐ &#x1f4ab;点击关注&#x1f929;一起学习C语言&#x1f4af;&#x1f4ab; 导读 经过一段时间的C语言学习&#xff0c;我们以及基本掌握了C语言的知识&#xff0c;今天&#xff0c;我们就开始学习C&#xff0c;…

张维迎《博弈与社会》笔记(2)导论:个体理性与社会最优:协调与合作问题

有节选&#xff0c;相当于按照自己的方式将内容组织了下吧&#xff1f; 协调与合作问题 什么是一个社会面临的基本问题&#xff1f; 这似乎是一个我们每一个人都可以触摸得到但又难以说清的问题&#xff0c;因为在不同的语境下&#xff0c;“社会”一词的内涵有所差异。但其基…

如何阅读xml电子发票

xml电子发票是官方给出的电子存档的文件格式&#xff0c;本质是文本&#xff0c;所以文件很小&#xff0c;大量发票存储&#xff0c;能够更加凸显优势。 但是xml电子发票不方便阅读&#xff0c;因为里面是xml格式&#xff0c;对于财务人员来讲&#xff0c;看“代码”简直太难了…

网络安全防御保护实验(二)

一、登录进防火墙的web控制页面进行配置安全策略 登录到Web控制页面&#xff1a; 打开Web浏览器&#xff0c;输入防火墙的IP地址或主机名&#xff0c;然后使用正确的用户名和密码登录到防火墙的Web管理界面。通常&#xff0c;这些信息在防火墙设备的文档或设备上会有说明。 导…

【创建vue项目的两种方式】

Vue环境搭建 NodeJs安装包安装淘宝镜像 环境搭建webpack安装全局安装vue/cli查看模板创建项目1.webpack2. vue-cli NodeJs安装包 下载链接&#xff1a;官网链接 下载下来后&#xff0c;直接傻瓜式的安装即可。 通过在cmd控制台输入以下命令查看是否安装成功 node -v因为适配某…

如何使用WinSCP公网远程访问本地CentOS服务器编辑上传文件

文章目录 1. 简介2. 软件下载安装&#xff1a;3. SSH链接服务器4. WinSCP使用公网TCP地址链接本地服务器5. WinSCP使用固定公网TCP地址访问服务器 1. 简介 ​ Winscp是一个支持SSH(Secure SHell)的可视化SCP(Secure Copy)文件传输软件&#xff0c;它的主要功能是在本地与远程计…

利用ADS建立MIPI D-PHY链路仿真流程

根据MIPI D-PHY v1.2规范中对于互连电气参数的定义,本次仿真实例中,需要重点关注如下的设计参数: 1. 差分信号的插入损耗Sddij和回拨损耗Sddii; 2. 模式转换损耗Sdcxx、Scdxx; 3. 数据线与时钟线之间的串扰耦合(远、近端)。 设计者还可以结合CTS中的补充…

Mediasoup Demo-v3笔记(五)——Mediasoup 的启动

Mediasoup是由两部分组成的&#xff0c;一部分是js的控制模块&#xff0c;一部分是c的传输模块&#xff0c;在这里我们用mediasoup demo的代码开始&#xff0c;分析整个进程的启动过程 1、在mediasoup-demo-3的server.js中&#xff0c;调用启动方法 mediasoup-demo-3是一个dem…

快乐学Python,DataFrame的基本操作

在上一篇文章中&#xff0c;我们了解了如何使用 pandas 的函数来从多种数据源&#xff1a;csv、excel 和 html 网页。其中不管是哪一种数据读取的方式&#xff0c;最终返回的都是一个 DataFrame 对象。 对于 DataFrame 对象&#xff0c;我们只是简单将其打印出来&#xff0c;这…

四、MyBatis 动态语句

本章概要 动态语句需求和简介if 和 where 标签set 标签trim 标签(了解)choose/when/otherwise 标签foreach 标签sql 片段 4.1 动态语句需求和简介 经常遇到很多按照很多查询条件进行查询的情况&#xff0c;比如智联招聘的职位搜索等。其中经常出现很多条件不取值的情况&#…

【Linux】Linux进度条小程序(包含色块实现)

我们再将Linux常用工具与命令都学会了之后&#xff0c; 设计进度条这个小程序可以比较好的帮助我们进行一定程度练习与巩固 目录 预备知识&#xff1a;回车换行&#xff1a;缓冲区&#xff1a; 进度条&#xff1a;准备工作&#xff1a;主题思路&#xff1a;代码实现&#xff1a…

腾讯云服务器上发送邮件连接超时

腾讯云会将服务器25端口禁用&#xff08;腾讯云默认禁用&#xff09;&#xff0c;开启后发送正常 https://console.cloud.tencent.com/secctrl 参考 腾讯云服务器上发送邮件连接超时&#xff08;无法发送&#xff09;的相关问题

spring-boot-starter-validation常用注解

文章目录 一、使用二、常用注解三、Valid or Validated &#xff1f;四、分组校验1. 分组校验的基本概念2. 定义验证组3. 应用分组到模型4. 在控制器中使用分组5. 总结 一、使用 要使用这些注解&#xff0c;首先确保在你的 Spring Boot 应用的 pom.xml 文件中添加了 spring-bo…

使用EtherNET转Profinet网关配置EtherNET/IP地址说明

EtherNET转Profinet网关配置EtherNET/IP地址是将两种网络之间的连接进行设置和调整&#xff0c;以便实现数据的传输和信息的交互。这个过程中&#xff0c;需要对EtherNET/IP地址进行配置&#xff0c;以确保数据能够正确地在网络之间传递。通过配置EtherNET/IP地址&#xff0c;可…

vue2(Vuex)、vue3(Pinia)、react(Redux)状态管理

vue2状态管理Vuex Vuex 是一个专为 Vue.js应用程序开发的状态管理模式。它使用集中式存储管理应用的所有组件的状态&#xff0c;以及规则保证状态只能按照规定的方式进行修改。 State&#xff08;状态&#xff09;:Vuex 使用单一状态树&#xff0c;即一个对象包含全部的应用层…

sql管理工具archery简介

在平时的工作过程中&#xff0c;我们肯定会遇到使用sql平台的场景&#xff0c;业内也有很多工具&#xff0c;类似阿里云的dms&#xff0c;但是这个是和云厂商绑定的&#xff0c;我们可能一般没有用到阿里云组件就比较困难了&#xff0c;那还有什么选项了&#xff0c;经过调研&a…