背景
MySQL 是一个开源的关系型数据库管理系统(RDBMS),最初由瑞典公司 MySQL AB 开发,后被 Oracle 公司收购。MySQL 使用标准 SQL 进行查询和管理数据,并支持多种操作系统。它是最流行的开源数据库之一,被广泛用于Web应用程序开发。
目录
一、基本介绍
1. 基本概念
2. 数据库管理系统(DBMS)
3. 数据库系统及DBMS工作模式
3.1 数据库系统概述
3.2 DBMS工作模式
3.3 图示
4. 数据库的发展史
5. 关系数据库与非关系数据库
5.1 关系数据库
5.1.1 概述与组成
5.1.2 优缺点
5.1.3 示例图示
5.2 非关系数据库
5.2.1概述
5.2.2优缺点
5.3 区别
6. 产品版本功能性迭代
二、部署
1. 安装编译依赖
2. 编译安装
3. 创建普通用户管理mysql
4. 修改核心配置文件
5. 设置环境变量
6. 初始化数据库
7. 给root账号设置密码
8. 登录mysql数据库
一、基本介绍
1. 基本概念
数据库是用来存储和管理数据,是各种表的集合,或者存放行和列的信息,即表中存放各类数据。三者是包含和包含于的关系。以下是数据库的基本介绍:
① 数据(data):描述事物的符号记录,包括数字,文字、图形、图像、声音、档案记录等,以
“记录”形式按统一的格式进行存储
② 表(table):由记录和字段(属性)组成,分别对应行和列;将不同的记录组织在一起,用来存储具体数据
③ 数据库(database):表的集合,是存储数据的仓库,以一定的组织方式存储的相互有关的数据集合
2. 数据库管理系统(DBMS)
DBMS是一种软件工具,实现对数据库资源的有效组织、管理和存取。功能如下:
① 数据库的建立和维护功能(定义蓝图,维修保养)
② 数据定义功能(字段、结构等)
③ 数据操纵功能(增删改查等)
④ 数据库的运行管理功能(软件的状态、操作等)
⑤ 通信功能(与外界对接联系)
3. 数据库系统及DBMS工作模式
3.1 数据库系统概述
一个人去管理一个系统,一般由硬件、操作系统、数据库、DBMS、应用软件和数据库用户(如管理员)组成,用户可以通过DBMS操作数据库,也可以通过应用程序来操作。
3.2 DBMS工作模式
① 接受应用程序的数据请求和处理请求
② 将用户的数据请求(高级指令)转换为复杂机器代码(低层指令)
③ 实现对数据库的操作
④ 从数据库的操作中接受查询结果
⑤ 对查询结果进行处理(格式转换)
⑥ 将处理结果返回给用户
3.3 图示
4. 数据库的发展史
第一代:层次模型与网状模型的数据库系统,如:图书馆、档案库
第二代:关系型数据库,如:公安系统查询个人会生成家庭其他成员关系
第三代:组合型,即关系型数据库+非关系型数据库(作数据缓冲),可以提高抗高并发能力,完成海量数据处理
5. 关系数据库与非关系数据库
5.1 关系数据库
5.1.1 概述与组成
关系数据库是基于关系模型的数据库,数据以表格的形式存储,每个表格包含多个行和列。每一行代表一个记录,每一列代表一个字段。关系数据库使用结构化查询语言(SQL)进行数据检索和操作。它是所有实体之间联系的集合,存储结构是二维表格。常见的关系数据库有:Oracle、MySQL、SQLServerde等。相关概念如下:
① 实体:实体是关系数据库中的一个基本单位,它可以是一个具体的对象,也可以是一个抽象的概念。在关系数据库中,实体通常对应于一个表,表中的每一行就是一个实体。(如:银行客户、账户等)
② 属性:属性是实体的特征或者描述,它用于描述实体的各种特性。属性通常对应于表中的列,列中的每一个值就是一个属性。(如:姓名、电话等)
③ 联系:是实体之间的关联,它用于描述实体之间的关系。在关系数据库中,联系通常对应于表之间的关联,关联的建立通常需要使用外键。(如下图的“储蓄”关系)
其他常用关系型数据库:
mariadb:时序数据库,该数据查询只能往后看,如天气信息
postgrsql:支持高并发的后端数据库,如在线游戏数据的处理
5.1.2 优缺点
优点:
- 数据结构为二维数据表,易于维护
- 结构化SQL查询语句,使用方便
- 可用于复杂查询
缺点:
- 存储在硬盘,海量存储读写性能较差
- 固定的二维数据库表,不够灵活、可扩展性较低
- 由于硬盘I/O瓶颈,抗高并发能力弱
5.1.3 示例图示
根据“银行客户表”和“银行储蓄表”得到关系数据表“储蓄关系表”
5.2 非关系数据库
5.2.1概述
非关系数据库(NoSQL)是指那些不使用关系模型的数据库、不需要固定的数据格式,它们的数据存储和检索方式更加灵活。在这种模型中,数据被存储为键值对(类似于变量),其中键是唯一的,而值可以是任何类型的数据,包括字符串、数字、列表、集合等。它存放在内存中,常见的非关系数据库有:Redis(占额约85%)、Memcached、mongoDB、HBase等。
5.2.2优缺点
优点:
- 数据结构无固定格式,可以是key,value形式、文档形式、图片形式等
- 存放内存中,速度快
- 高扩展性、有高可用性,可以处理大量数据
- 成本低,nosql数据库部署简单,基本都是开源软件
缺点:
- 针对特定的数据模型特定的查询语句,查询较为复杂
- 数据存放在内存中,容易丢失,关系数据库的安全性可能不如关系数据库
- 如果一个操作失败,可能会导致数据的不一致,不支持事务处理
- 不提供sql支持,学习和使用成本较高
5.3 区别
类型 | 关系型数据库 | 非关系型数据库 |
数据结构 | 固定的二维数据库表 | 无固定格式 |
查询语句 | 结构化SQL查询语句,可复杂查询 | 特定的查询语句 |
存储位置 | 硬盘、安全性高、速度较慢 | 内存、安全性低、速度较快 |
6. 产品版本功能性迭代
5.0-5.1版本,早期产品
5.4-5.7版本,整合了MySQL提高性能,常用5.7版本
6.0-7.1版本,就是MySQLCluster版本为适应新时代对数据库的集群需求而开发,各种bug,目前大厂一般选择8.1
二、部署
MySQL安装方式通常有:yum、二进制编译安装、下载二进制包安装,综合考虑,在生产环境中我们一般选择编译安装,具体步骤如下:
1. 安装编译依赖
yum install -y gcc gcc-c++ ncurses ncurses-devel bison cmake
yum -y install \
gcc \ #是GNU C编译器,用于编译和链接C程序。
gcc-c++ \ #是GNU C++编译器,用于编译和链接C++程序
ncurses \ #字符终端下图形互动功能的动态库
ncurses-devel \ #ncurses开发包
bison \ #语法分析器
cmake #mysql需要用cmake编译安装
2. 编译安装
准备源代码包:
mysql-5.7.17.tar.gz 是 MySQL 数据库的源代码压缩包: 下载地址:MySQL :: MySQL 下载
boost_1_59_0.tar.gz 是 Boost C++ 库的源代码压缩包,下载地址:Download boost_1_59_0.tar.gz (Boost C++ Libraries)
[root@localhost opt]# ls
boost_1_59_0.tar.gz mysql-5.7.17.tar.gz
[root@localhost opt]# tar zxvf mysql-5.7.17.tar.gz -C /opt #解压
[root@localhost opt]# tar zxvf boost_1_59_0.tar.gz -C /usr/local/
[root@localhost opt]# mv /usr/local/boost_1_59_0 /usr/local/boost
[root@localhost opt]# cd /opt/mysql-5.7.17/
cmake \
-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_EXTRA_CHARSETS=all \ #指定支持其他字符集编码
-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=/usr/local/boost \ #指定boost的路径,若使用mysql-boost集成包安装则-DWITH_BOOST=boost
-DWITH_SYSTEMD=1 #生成便于systemctl管理的文件
[root@localhost mysql-5.7.17]# make -j 4 && make install
#4核心编译,并将执行文件及相关依赖拷贝指定目录安装
3. 创建普通用户管理mysql
useradd -s /sbin/nologin mysql #创建普通用户管理mysql
chown -R mysql:mysql /usr/local/mysql/ #更改安装目录属主属组
chown mysql:mysql /etc/my.cnf #更改核心配置文件属主属组
4. 修改核心配置文件
vim /etc/my.cnf #删除原配置项,再重新添加下面内容
[client] #客户端设置
port = 3306
socket=/usr/local/mysql/mysql.sock
[mysqld] #服务全局设置
user = mysql #设置管理用户
basedir=/usr/local/mysql #指定数据库的安装目录
datadir=/usr/local/mysql/data #指定数据库文件的存储路径
port = 3306 #指定端口
character-set-server=utf8 #设置服务器字符集编码格式为utf8
pid-file = /usr/local/mysql/mysqld.pid #指定pid 进程文件路径
socket=/usr/local/mysql/mysql.sock #指定数据库连接文件
bind-address = 0.0.0.0 #设置监听地址,0.0.0.0代表允许所有,如允许多个IP需空格隔开
skip-name-resolve #禁用DNS解析
max_connections=2048 #设置mysql的最大连接数
default-storage-engine=INNODB #指定默认存储引擎
max_allowed_packet=16M #设置数据库接收的数据包大小的最大值
server-id = 1 #指定服务ID号
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
sql_mode常用值如下:
NO_ENGINE_SUBSTITUTION
# 如果需要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认的存储引擎替代,并抛出一个异常
STRICT_TRANS_TABLES
# 在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作,对非事务表不做限制
NO_AUTO_CREATE_USER
# 禁正GRANT创建密码为空的用户
NO_AUTO_VALUE_ON_ZERO
# mysql中的自增长列可以从O开始。默认情况下自增长列是从1开始的,如果你插入值为0的数据会报错
NO_ZERO_IN_DATE
# 不允许日期和月份为零
NO_ZERO_DATE
# mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告
ERROR_FOR_DIVISION_BY_ZERO
# 在INSERT或UPDATE过程中,如果数据被零除,则产生错误而非警告。默认情况下数据被零除时MysQL返回NULL
PIPES_As_CONCAT
# 将"||"视为字符串的连接操作符而非或运算符,这和Oracle数据库是一样的,也和字符串的拼接函数Concat相类似
# ANSI_QUOTES
启用ANSI_QUOTES后,不能用双引号来引用字符串,因为它被解释为识别符
5. 设置环境变量
echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
# 申明mysql命令便于系统识别
source /etc/profile #执行刷新
6. 初始化数据库
cd /usr/local/mysql/bin/
[root@localhost bin]# ./mysqld \
> --initialize-insecure \ #生成初始化密码为空
> --user=mysql \ #指定管理用户
> --basedir=/usr/local/mysql \ #指定数据库的安装目录
> --datadir=/usr/local/mysql/data #指定数据库文件的存储路径
cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
systemctl daemon-reload #刷新识别
systemctl start mysqld.service #开启服务
systemctl enable mysqld #开机自启动
netstat -anpt | grep 3306 #查看端口
7. 给root账号设置密码
mysqladmin -u root -p password "123456"
————》直接回车
8. 登录mysql数据库
[root@localhost ~]# mysql -u root -p123456
mysql> show databases; #显示当前MySQL服务器上的所有数据库
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql> use mysql; #选择一个数据库,进行后续的操作
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables; #显示当前数据库中的所有表
31 rows in set (0.00 sec)
mysql> quit #退出,或者exit,或者ctrl+d
Bye