数据库应用:MySQL数据库基础

目录

一、理论

1.数据库管理系统

2.关系型数据库

3.数据库

4.MySQL数据库

5.MySQL部署

二、实验

1.yum安装MySQL

2.编译安装MySQL

3.配置MySQL数据库的Tab补全 

三、问题

1.数据库登录报错

2.数据库密码复杂度报错

3.数据库连接报错

四、总结


一、理论

1.数据库管理系统

(1)概念

数据库管理系统(Database Management System,DBMS)是实现对数据库资源有效组织、 管理和存取的系统软件。它在操作系统的支持下,支持用户对数据库的各项操作。DBMS 主 要包括以下功能。

数据库的建立和维护功能:包括建立数据库的结构和数据的录入与转换、数据库的 转储与恢复、数据库的重组与性能监视等功能。
数据定义功能:包括定义全局数据结构、局部逻辑数据结构、存储结构、保密模式 及信息格式等功能。保证存储在数据库中的数据正确、有效和相容,以防止不合语 义的错误数据被输入或输出。
数据操纵功能:包括数据查询统计和数据更新两个方面。
数据库的运行管理功能:这是数据库管理系统的核心部分,包括并发控制、存取控 制、数据库内部维护等功能。
通信功能:DBMS 与其他软件系统之间的通信,如 Access 能与其他 Office 组件进行 数据交换。

数据库应用:MySQL数据库基础_第1张图片

(2)功能

① 数据定义

② 数据处理

③ 数据安全

④ 数据备份

(3)架构

① 单机架构

② 大型主机/终端架构

③ 主从式架构(C/S)

④ 分布式架构

(4)分类

 ①层次数据库
层次模型数据库系统是最早研制成功的数据库系统,这种数据库最成功的典型是IMS。

IMS的全称时Information Management System,由IBM公司研制成功。

IMS于1969年投入运行,最早的版本有IMS/360-1和IMS/360-2。较近的版本有IMS/VS DL/1,它是在操作系统DOS/VS(Disk Operation System/Virtual Storage)支持下运行。


②网状数据库
网状数据库是采用网状原理和方法,以网状数据模型为基础建立的数据库。一般是指由网状数据库管理系统产生的网状数据库系统。网状数据模型是以记录类型为结点的网络结构,即一个结点可以有一个或多个下级结点,也可以有一个或多个上级结点,两个结点之间甚至可以有多种联系。

例如“教师”与“课程”两个记录类型,可以有“任课”和“辅导”两种联系,称之为复合链。两个记录类型之间的值可以是多对多的联系,例如一门课程被多个学生修读,一个学生选修多门课程。

③RDBMS 关系型数据库
Relational Database Management System,关系模型最初由IBM公司的英国计算机科学家埃德加·科德(Edgar F. Codd)于1969年描述,1974年,IBM开始开发系统R,这是一个开发RDBMS原型的研究项目。然而,第一个商业上可用的RDBMS是甲骨文,于1979年由关系软件(现为甲骨文公司)发布。
 

2.关系型数据库

(1)概念

关系型数据库组成:

表1 关系型数据库组成

组成 功能

关系Relational 

关系就是二维表,其中:表中的行、列次序并不重要
行row 表中的每一行,又称为一条记录record
列column 表中的每一列,称为属性,字段,域field
主键Primary key PK , 用于惟一确定一个记录的字段,一张表只有一个主键
域domain
 
属性的取值范围

(2)常用关系型数据库

常用关系型数据库如下:

表2 常用关系型数据库

类型 特点

MySQL(甲骨文公司收购)

免费、开源、体积小

SQL Server(微软公司产品)

面向Windows操作系统

简单、易用

Oracle(甲骨文公司产品)

面向所有主流平台安全、完善,操作复杂

DB2(IBM公司产品)

面向所有主流平台大型、安全、完善

PostgreSQL(加州大学计算机系开发的POSTGRES)

简称为pgsql,EnterpriseDB

(3)关系型数据库三要素

关系型数据库三要素:

表3 关系型数据库三要素

要素 功能

实体

也称为实例,对应现实世界中可区别于其他对象的“事件”或“事物”

属性

实体所具有的某一特性,一个实体可以有多个属性

联系

实体集之间的对应关系称为联系,也称为关系

(4)关系型数据库与非关系型数据库

①关系型数据库

关系数据库系统是基于关系模型的数据库系统,它的数据结构使用简单易懂的二维数据表,可用简单的“实体-关系”(E-R)图来表示,E-R图中包含了实体(数据对象)、关系和属性三个要素。

存储结构:

关系型数据库的存储结构是二维表格,在每个二维表中,每一行称为一条记录,用来描述一个对象的信息,每一列称为一个字段,用来描述对象的一个属性。

②非关系型数据库

非关系数据库也被称作NoSQL(Not Only SQL),存储数据不以关系模型为依据,不需要固定的表格式。

数据库应用:MySQL数据库基础_第2张图片

优点:

1) 数据库可高并发读写

2)对海量数据高效率存储与访问

3)数据库具有高扩展性与高可用性

③ 对比

表5 对比

类型 关系数据库 非关系型数据库
优点 易于维护:都是使用表结构,格式一致; 2、使用方便:SQL语言通用,可用于复杂查询; 3、复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询。  格式灵活:存储数据的格式可以是key,value形式、文档形式、图片形式等等,文档形式、 图片形式等等,使用灵活,应用场景广泛,而关系型数据库则只支持基础类型。 2、速度快:nosql可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘; 3、高扩展性与高可用性; 4、成本低:nosql数据库部署简单,基本都是开源软件。
 
缺点 读写性能比较差,尤其是海量数据的高效率读写; 2、固定的表结构,灵活度稍欠; 3、高并发读写需求,传统关系型数据库来说,硬盘I/O是一个很大的瓶颈。 不提供sql支持,学习和使用成本较高; 2、无事务处理; 3、数据结构相对复杂,复杂查询方面稍欠。

3.数据库

(1)数据

数据用来描述事物的符号记录,包括数字,文字、图形、图像、声音、档案记录等,以“记录”形式按统一的格式进行存储。

数据库应用:MySQL数据库基础_第3张图片

(2)表

表将不同的记录组织在一起,用来存储具体数据。

(3)数据库

表的集合是存储数据的仓库,以一定的组织方式存储的相互有关的数据集合。

(4)数据库访问流程

数据库应用:MySQL数据库基础_第4张图片

4.MySQL数据库

(1)概念

一款深受欢迎的开源关系型数据库,Oracle旗下的产品,遵守GPL协议,可以免费使用与修改。

官网:MySQL

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L05hbl9GZW5nNzI2,size_16,color_FFFFFF,t_70

(2)特点

 表6 MySQL特点

特点 功能
 可靠性高
MYSQL是严格遵循ACID(原子性、一致性、隔离性、持久性)规范的关系型数据库,因此保证了数据的可靠性。
免费开源
MYSQL是免费开源的数据库系统,其代码完全公开,可以随意使用、修改和分发。
跨平台兼容性好
MYSQL可以运行在各种操作系统上,如Linux、Windows、Mac OS等,且支持各种编程语言接口,如PHP、Java等,实现了与其他应用程序的兼容性。
可扩展性强
MYSQL可以实现多台服务器的集群部署,提高了数据库性能和可靠性。
功能丰富
MYSQL拥有完善的数据类型支持、事务处理、查询处理、存储过程等丰富的功能。
性能高效
MYSQL采用了高效的存储引擎,如InnoDB、MyISAM等,提高了系统的性能,且支持水平扩展、垂直扩展等多种优化策略。
 安全性高
MYSQL提供了完善的安全功能,如用户权限管理、访问控制等,可以有效保护数据的安全。

(3)分类

MySQL主要分为:mysql、mariadb、percona Server 

数据库应用:MySQL数据库基础_第5张图片

(4)组成

表7 MySQL组成

类别 功能
客户端程序

mysql: 交互式的CLI工具

mysqladmin:基于mysql协议管理mysqld

mysqlimport:数据导入工具

MyISAM存储引擎的管理工具:

myisamchk:检查MyISAM库

myisampack:打包MyISAM表,只读

服务器端程序

mysqld_safe

mysqld

mysqld_multi 多实例 

5.MySQL部署

(1)编译安装MySQL数据库

 安装相关依赖包

yum -y install gcc gcc-c++ cmake bison bison-devel zlib-devel libcurl-devel libarchive-devel boost-devel   ncurses-devel gnutls-devel libxml2-devel openssl-devel libevent-devel libaio-devel

②下载并压缩源码包

#切换目录,上传压缩包
cd /opt
rz -E
 
#解压
tar xf  mysql-boost-5.7.20.tar.gz

③编译安装 

1. #切换目录
cd mysql-5.7.20/
 
2. #编译
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8  \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=boost \
-DWITH_SYSTEMD=1
 
3. #安装
make -j2 && make install
 
#############模块解释#####################
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
#指定mysql的安装路径
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
#指定mysql进程监听套接字文件(数据库连接文件)的存储路径
-DSYSCONFDIR=/etc \
#指定配置文件的存储路径
-DSYSTEMD_PID_DIR=/usr/local/mysql \
#指定进程文件的存储路径
-DDEFAULT_CHARSET=utf8  \
#指定默认使用的字符集编码,如utf8
-DDEFAULT_COLLATION=utf8_general_ci \
#指定默认使用的字符集校对规则
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
#安装INNOBASE存储引擎
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
#安装ARCHIVE存储引擎
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
#安装BLACKHOLE存储引擎
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
#安装FEDERATED存储引擎
-DMYSQL_DATADIR=/usr/local/mysql/data \
#指定数据库文件的存储路径
-DWITH_BOOST=boost \
#指定boost的路径,
-DWITH_SYSTEMD=1
#生成便于systemctl管理的文件

④数据库目录进行权限调整、改变属主属组

useradd -s /sbin/nologin mysql
chown -R mysql:mysql /usr/local/mysql/
chown mysql:mysql /etc/my.cnf

⑤调整配置文件

vim /etc/my.cnf
--------------------------内容如下
[client]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock
 
[mysql]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock
 
[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
character_set_server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket = /usr/local/mysql/mysql.sock
server-id = 1
 
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES

⑥设置环境变量

#配置环境变量
echo 'PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile
echo 'export PATH' >> /etc/profile
 
#刷新
source /etc/profile
 
#查看是否成功
echo $PATH

⑦初始化数据库

#切换目录
cd /usr/local/mysql/
 
#初始化
bin/mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
 
cp usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/

⑧数据库开启自启、关闭、状态

systemctl enable mysqld        #设置开机自启
systemctl start mysqld         #开启
systemctl stop mysqld          #关闭
systemctl start mysqld         #开启
systemctl status mysqld        #查看状态
ss -anpt | grep 3306           #过滤端口验证是否开启

⑨设置MySQL密码

#修改密码为123123 开始初始密码为空  回车即可
mysqladmin -u root -p password "123123"

⑩登录、登出MySQL 

#登录
mysql -u root -p
 
#授予root用户可以在所有终端远程登录,使用的密码是123123,并对所有数据库和所有表有操作权限
grant all privileges on *.* to 'root'@'%' identified by '123123';
 
#退出
quit

(2)yum安装MySQL数据库

1. #创建mysql源
cd /etc/yum.repos.d/
vim 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. #安装服务mysql-community-server
yum install mysql-community-server -y 
 
3. #启动服务
systemctl start mysqld
ss -ntap |grep 3306
 
4. #登入数据库,但是密码是默认的,需要查看
mysql -u root -p
grep password /var/log/mysqld.log
mysql -u root -p'默认的密码'
#特殊符号用单引号引起来
 
5. #登入数据库后必须修改密码
alter user root@'localhost' identified by 'Admin@123';
#alter user root@'主机名' identified by '新密码';

grant all privileges on *.* to root@"%" identified by "Admin@123" with grant option;
flush privileges;
 
#可以使用mysql> \h查看帮助

(3)配置MySQL数据库的Tab补全 

①yum安装的自动补全

vim /etc/my.cnf
--------------------添加
[mysql]
prompt=(mysql) [\\d]>\\_
auto-rehash

② 安装mycli 插件

需要先修改配置文件安装自动补全功能

vim /etc/my.cnf
--------------------添加
[mysql]
prompt=(mysql) [\\d]>\\_
auto-rehash

安装

1. #安装依赖包
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel
 
2. #压缩安装包
cd /opt
rz -E
tar zxvf Python-3.8.0_.tgz
 
3 #切换目录编译安装
cd Python-3.8.0/
./configure --prefix=/usr/local/Python-3.8.0/
make -j2 && make install
 
4. #做软链接
ln -s  /usr/local/Python-3.8.0/bin/python3.8  /usr/bin/python38
ln -s /usr/local/Python-3.8.0/bin/pip3.8 /usr/bin/pip38
pip38 install mycli -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com
ln -s /usr/local/Python-3.8.0/bin/mycli /usr/bin/mycli
 
5. #登录
mycli -u root -p 123123

二、实验

1.yum安装MySQL

(1)配置MySQL源

d520e66973b04df0875c7b120bfd9c88.png

数据库应用:MySQL数据库基础_第6张图片

 (2)安装396e7d645d304866b2e9a9978c93527a.png

 (3)启动并监听服务

43442c37736e47a09df4cc31fd96a60f.png

2.编译安装MySQL

(1)下载MySQL相关安装包➝ 服务器

(2)登录到服务器安装MySQL相关依赖包和函数库

(3)解压MySQL安装进行安装


(4)编译安装➝切换到MySQL解包路径下➝安装路径以及模块

数据库应用:MySQL数据库基础_第7张图片

(5)编译安装

(6)创建普通用户管理

(7)更改管理主/组

chown mysql:mysql /etc/my.cnf

 
(8)配置MySQL文件➝my.cnf

数据库应用:MySQL数据库基础_第8张图片

(9)设置环境变量,申明/宣告MySQL 命令便于系统识别

(10)初始化数据库

数据库应用:MySQL数据库基础_第9张图片

(11)为了启动服务方便,MySQL 启动服务加入到systemd系统管理➝可使用service或systemctl进行管理

(12)检查MySQL监听端口

(13)测试数据库

数据库应用:MySQL数据库基础_第10张图片

 数据库应用:MySQL数据库基础_第11张图片

 

3.配置MySQL数据库的Tab补全 

(1)修改配置文件安装自动补全功能

7547fc52d94747dfa768a1f15dd6b724.png

数据库应用:MySQL数据库基础_第12张图片

(2)安装依赖包

9be48957242041cebe3d18517aea4c4c.png

 (3)解压

11a71aa48d67438ba2e73d8ffed41a09.png

 (4)编译安装

3bd2932fe04342b19ea8f97c62b5bc79.png

83763ef0ffbc407cb2f32b200565d772.png

fa58b44c3d4b4120878baaf4031f46fc.png

 (5)做软链接

查看

682cef0e6bba419fb66a787aade09007.png

ln -s  /usr/local/Python-3.8.0/bin/python3.8  /usr/bin/python38
ln -s /usr/local/Python-3.8.0/bin/pip3.8 /usr/bin/pip38
pip38 install mycli -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com

查看

fb5eeda04b4c4c2096a5d19d5f8dd671.png


ln -s /usr/local/Python-3.8.0/bin/mycli /usr/bin/mycli

(6)登录验证

可以自动补全

数据库应用:MySQL数据库基础_第13张图片

三、问题

1.数据库登录报错

(1) 报错

1045(28000):用户'root'@'localhost'(使用密码:YES)拒绝访问

首先解析此英文:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES);
解析的地方有两处:Access denied(拒绝访问);using password:NO/YES

a055551bb50247e193442c10143414d0.png

(2) 原因分析

① mysql的服务器停止:
  若MySQL已经没有启动,重启MySQL服务器:systemctl restart mysqld
② 用户的端口号或者IP导致:
  若用户的端口号与IP(3306/3307)不一致,打开my.ini文件进行编辑。全部编辑替换为: port=X
③ mysql的配置文件错误----my.ini等文件:
  my.ini文件误输入无效内容,不知道到何处。复制替换该文件;有人已经对my.ini文件进行解释以及注释
④ root用户的密码错误(后面解决)

(3)解决方法

vim /etc/my.cnf文件;
在[mysqld]后添加skip-grant-tables(登录时跳过权限检查)

27114f0f3077449fbd911d9475aad459.png

793fcbca11d24a139ff6547dc3072281.png

 重启MySQL服务:sudo systemctl restart mysqld

752c3815a1374f7989a1df7739f22417.png

输入:set password for ‘root’@‘localhost’=password(‘123456’);

如果报:ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement

 输入:flush privileges;

再次输入:set password for ‘root’@‘localhost’=password(‘123456’);

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'IDENTIFIED BY '123456' WITH GRANT OPTION;

flush privileges;

如果还不行,修改命令

update mysql.user set authentication_string=password('123456') where user='root='root'and Host ='localhost';
数据库应用:MySQL数据库基础_第14张图片

2.数据库密码复杂度报错

 (1)报错

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

c2c88c1824dc46059913cdba8afb8879.png

(2)原因分析

mysql 初始化时,使用临时密码,修改自定义密码时,由于自定义密码比较简单,就出现了不符合密码策略的问题。

(3)解决方法

查看 mysql 初始的密码策略,
输入语句 show variables like 'validate_password%';
进行查看,如下:

数据库应用:MySQL数据库基础_第15张图片

首先需要设置密码的验证强度等级,设置 validate_password_policy 的全局参数为 LOW 即可,
输入设值语句 set global validate_password_policy=LOW;  进行设值,如下:

数据库应用:MySQL数据库基础_第16张图片

 当前密码长度为 8 ,如果不介意的话就不用修改了,按照通用的来讲,设置为 4位的密码,设置 validate_password_length 的全局参数为 6即可,
输入设值语句 “ set global validate_password_length=6; ” 进行设值,

数据库应用:MySQL数据库基础_第17张图片

3.数据库连接报错

 (1)报错

 (2)原因分析

 my.cnf 配置文件中设置了 [mysqld] 的参数 socket ,而没有设置[client]的参数socket。

(3)添加 [client] 配置项,如下所示

数据库应用:MySQL数据库基础_第18张图片

 登录成功数据库应用:MySQL数据库基础_第19张图片

 

四、总结

关系数据库和非关系数据库区别:数据一致性不同、数据存储方式不同、扩展方式不同、对事务性的支持不同。

关系型数据库三要素:实体、属性、联系。

你可能感兴趣的:(数据库,mysql,oracle)