前置资源
一、数据库概述
1.1、数据库基本概念
数据(Data)
- 描述事物的符号记录称为数据。数字、文字、图形、图像、声音、档案记录等都是数据。
- 数据是以“记录”的形式按照统一的格式进行存储的,而不是杂乱无章的。 相同格式和类型的数据统一存放在一起,而不会把“人”和“书”混在一起存储。这样,数据的存储就能够井然有序。
表(行+列)
- 数据存储在表中
- 记录:行
- 字段(属性): 列
数据库
- 数据库就是表的集合。
它是以一定的组织方式存储的相互有关的数据集合
关系数据库的表由记录组成,记录由字段组成,字段由字符或数字组成。它可以供各种用户共享, 具有最小冗余度和较高的数据独立性,它是统一管理的相关数据的集合。
1.2、数据库概念图
1.3、 数据库管理系统
数据库管理系统(Data base Management System,DBMS)
是实现对数据库资源有效组织,管理和存取的系统软件
数据库的建立和维护功能,数据定义功能,数据操纵功能,数据库的运行管理功能,通信功能。
DBMS主要包括以下功能:
- 数据库的建立和维护功能:包括建立数据库的结构和数据的录入与转换、数据库的 转储与恢复、数据库的重组与性能监视等功能。
- 数据定义功能:包括定义全局数据结构、局部逻辑数据结构、存储结构、保密模式及信息格式等功能。保证存储在数据库中的数据正确、有效和相容,以防止不合语义的错误数据被输入或输出。
- 数据操纵功能:包括数据查询统计和数据更新两个方面。
- 数据库的运行管理功能:这是数据库管理系统的核心部分,包括并发控制、存取控 制、数据库内部维护等功能。
- 通信功能:DBMS 与其他软件系统之间的通信,如 Access 能与其他 Office 组件进行数据交换。
1.4、 数据库系统
数据库系统(DatabaseSystem,DBS)
是一个人机系统,
一般由硬件、操作系统、数据库、DBMS、应用软件和数据库用户(包括数据库管理员)组成。用户可以通过 DBMS 操作数据库,也可以通过应用程序操作数据库。
应用程序是利用DBMS为解决某个具体的管理或数据处理的任务而编制的一系列命令的有序集合。如果应用程序比较完善,能够提供友好的人机界面,并编译成可执行文件发行,使得普通用户不需要具备计算机的专业知识,在较短时间就学会使用,那么就称为数据库应用软件。 (如Navicat)
常用的数据库应用软件有人事管理、财务管理、图书管理等信息管理软件及各类信息咨 询系统等。
数据库管理员(DatabaseAdministrator,DBA)负责数据库的更新和备份、数据库系统的维护、用户管理等工作,保证数据库系统的正常运行。DBA 一般由业务水平较高、资历较深的人员担任。
需要注意的是数据库、数据库系统、数据库管理系统,甚至数据库表等名词,在日常讨论中通常不严格区别。遇到此情况时,可以根据具体情况,判断出实际所指的是什么。
1.5、DBMS的工作模式如下:
1>接受应用程序的数据请求和处理请求
2>将用户的数据请求(高级指令)转换为复杂机器代码(底层指令)
3>实现对数据库的操作
4>从数据库的操作中接受查询结果
5>对查询结果进行处理(格式转换)
6>将处理结果返回给用户
二、关系型数据库和非关系型数据库
2.1、关系型数据库
数据库管理系统 | 公司/起源 | 主要用途/特点 |
---|---|---|
MySQL | Oracle Corporation(原Sun Microsystems,后被Oracle收购) | 广泛使用的开源关系型数据库管理系统,适用于Web应用、中小企业等 |
SQL Server | 微软(Microsoft) | 商业关系型数据库管理系统,集成于微软的.NET框架,常用于企业级应用 |
Access | 微软(Microsoft) | 作为Microsoft Office套件的一部分,是一个轻量级的桌面数据库,适合小型项目和简单的数据管理(药店什么的) |
Oracle Database | 甲骨文公司(Oracle Corporation) | 功能强大的商业关系型数据库管理系统,支持大规模、高并发的企业级应用 |
DB2 | 国际商业机器公司(IBM) | 商业关系型数据库管理系统,提供高级数据管理能力,适用于各种规模的企业应用 |
Sybase | SAP SE(原Sybase, Inc.) | 主要面向企业级市场的关系型数据库管理系统,现作为SAP ASE(Adaptive Server Enterprise)的一部分 |
PostgreSQL | 开源社区 | 强大的开源对象-关系数据库系统,支持复杂查询和高级功能,广泛用于Web应用、科研等领域 |
2.2、非关系型数据库
非关系型数据库 | 数据模型 | 主要用途/特点 |
---|---|---|
Redis | 键值对 | 高速缓存数据库,支持多种数据结构(字符串、哈希、列表、集合、有序集合等),常用于实现快速数据访问和缓存功能 |
MongoDB | 文档型 | 基于JSON的文档存储数据库,支持灵活的查询和索引,适用于需要高伸缩性和复杂查询的Web应用 |
Cassandra | 列族式 | 分布式NoSQL数据库,专为高伸缩性和高可用性设计,适用于大数据量和高并发的场景 |
HBase | 列族式 | 建立在Hadoop HDFS之上的分布式、可扩展的大数据存储系统,支持海量数据的实时随机读写 |
Neo4j | 图型 | 图形数据库,专注于高效存储和查询图结构数据,适用于社交网络、推荐系统等场景 |
2.3、关系型数据库和非关系型数据库的区别
关系数据库:
关系数据库结构是二维数据库表,二维表当中每个字段(列)用来描述对象的一个属性,每个记录(行)用来描述一个对象的信息(完整信息),关系数据库写到哪里也就是存储在硬盘当中读写系统就会受到的IO限制或者瓶颈 。
关系数据库系统是基于关系模型 的数据库系统
关系模型的数据结构使用简单易懂的二维数据表
关系模型可用简单的"实体-关系"(e-r)图来表示
关系型数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织
优点:
- 1、易于维护:都是使用表结构,格式一致;
- 2、使用方便:SQL语言通用,可用于复杂查询;
- 3、复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询。
缺点:
- 1、读写性能比较差,尤其是海量数据的高效率读写;
- 2、固定的表结构,灵活度稍欠;
- 3、高并发读写需求,传统关系型数据库来说,硬盘I/O是一个很大的瓶颈。
---------------------------------------------------------------------------------------------------------------------------------
非关系型数据库(NoSQL):
MongoDB 、 Redis(内存数据库/缓存数据库)K-V键值对、与之类似的Memcache,K-V键值对
redis-memecache对比:
相同点:存储高热数据(在内存中高速运行)
不同点:redis可以做持久化保存,可以存储对象
非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合,可以是文档或者键值对等。
优点:
- 1、格式灵活:存储数据的格式采用更适合各自数据类型的数据模型,如键值对、文档、列族或图等。这种存储方式使得非关系型数据库能够更灵活地处理各种类型的数据,应用场景广泛,而关系型数据库则只支持基础类型。
- 2、速度快:nosql可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘;
- 3、高扩展性;
- 4、成本低:nosql数据库部署简单,基本都是开源软件。
缺点:
- 1、不提供sql支持,学习和使用成本较高;
- 2、无事务处理;
- 3、数据结构相对复杂,复杂查询方面稍欠。
- 4、好多数据写在内存中
三、Mysql的部署
前置注意
在CentOS中默认安装有MariaDB,是MySQL的一个分支,主要由开源社区维护。 CentOS 7及以上版本已经不再使用MySQL数据库,而是使用MariaDB数据库。 如果直接安装MySQL,会和MariaDB的文件冲突。 因此,需要先卸载自带的MariaDB,再安装MySQL。
#查看版本: rpm -qa|grep mariadb ##卸载 rpm -e --nodeps 文件名 ### 检查是否卸载干净: rpm -qa|grep mariadb
另外关闭防火墙和selinux防止乱七八糟的意外。
3.1、yum安装MySQL5.7.20
1、卸载 先停掉mysql进程 (没有安装过的可以直接跳过)
pkill -9 mysqld
2、使用yum -y remove删除之前的安装 (没有安装过的可以直接跳过)
rpm -qa|grep -i mysql
yum -y remove 对应的安装包(依次卸载 直到没有)
3、下载rpm包,在CentOS 7操作系统上安装MySQL 5.7社区版本【前置资源也有】
cd /usr/local/src/
wget http://repo.mysql.com/mysql57-community-release-el7-8.noarch.rpm
4、rpm安装
rpm -ivh mysql57-community-release-el7-8.noarch.rpm
cd /etc/yum.repos.d/ 进入我们的yum源,会发现多了
vim /etc/yum.repos.d/mysql-community.repo
我们需要修改
否则第五步失败
5、CentOS 7.0的yum用Mariadb来代替MySQL的安装。即使你输入的是yum install -y mysql
, 显示的也是Mariadb的安装内容。
但是安装完上面的,可以看到这次不再提示安装Mariadb了(也就是完成4步)
yum -y install mysql-server
如果第四步没有操作
正确如下
6、安装完成后,密码为随机密码,需要重置密码。
首先启动,启动mysql服务
systemctl status mysqld
查找初始密码
grep "password" /var/log/mysqld.log
我的密码是 =oNQ_2I_u69; 很狡诈,有=和;都是密码的一部分
重新修改密码
mysql -u root -p
下面是初始密码(输入=oNQ_2I_u69; )
进入
alter user 'root'@'localhost' identified by '123Abc!x';
注意123Abc!x是你的新密码,这个密码是强密码,要求密码包含大小写字母、数字及标点符号,长度应该在6位以上。(如果需要修改简单,看3.3)
7、创建其他用户
在 MySQL 中,创建用户(包括设置密码)和授权是两个独立的步骤。
因此,您应该首先创建用户(如果需要的话)并设置密码,然后授予权限。
创建用户root001
create
CREATE USER 'root001'@'%' IDENTIFIED BY '你的密码';
更新密码
alter
ALTER USER 'root001'@'%' IDENTIFIED BY '新密码';
授权
grant privileges
GRANT ALL PRIVILEGES ON *.* TO 'root001'@'%' WITH GRANT OPTION;
这条命令授予了用户 root001
从任何主机连接到 MySQL 服务器,并对所有数据库和表拥有所有权限的能力,包括授权给其他用户的权限。
刷新权限
flush
FLUSH PRIVILEGES;
3.2、MySQL 5.7.20 二进制版本的安装
前置 安装mysql服务内存必须4G以上
根据rpm -qa | grep mariadb 移除mariadb
官网MySQL :: Download MySQL Community Server (Archived Versions)
确定版本
rpm -qa | grep glibc
1、下载并上传MySQL软件到/opt
解压
tar -xzvf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz
创建一个目录
mkdir -p /application/mysql
转移内容
cd /opt
mv mysql-5.7.20-linux-glibc2.12-x86_64/* /application/mysql/
2、用户创建
useradd -s /sbin/nologin mysql
查看
id mysql
3、设置环境变量
vim /etc/profile
#...行末
export PATH=/application/mysql/bin:$PATH
source /etc/profile
测试
mysql -V
4、生产环境中,根据运维经验应该先进行磁盘的配置,在进行MySQL的软件按照工作。
分区
fdisk /dev/sdb
格式化,创建文件系统
mkfs.xfs /dev/sdb1
创建数据文件
mkdir /data
查看uuid
blkid
永久挂载
vim /etc/fstab
UUID="b7d12ef9-69a1-4e9f-a677-d8650f61cbf8" /data xfs defaults
挂载所有在 /etc/fstab
文件中定义的文件系统的命令
mount -a
再次查看
df -h
5、授权
mkdir /data/mysql/data -p
chown -R mysql:mysql /application/*
chown -R mysql:mysql /data/
无临时密码
mysqld --initialize-insecure --user=mysql --basedir=/application/mysql --datadir=/data/mysql/data
6、启动数据库
配置文件的准备
cat > /etc/my.cnf <<EOF
[mysqld]
user=mysql
basedir=/application/mysql
datadir=/data/mysql/data
socket=/tmp/mysql.sock
server_id=6
port=3306
[mysql]
socket=/tmp/mysql.sock
EOF
启动sys-v方式
cp /application/mysql/support-files/mysql.server /etc/init.d/mysqld
/etc/init.d/mysqld start
检查
netstat -anptu | grep 3306
或者
sysv方式启动过的话,需要提前关闭,才能以下方式登录
启动systemd方式
cat > /etc/systemd/system/mysqld.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantenBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/application/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000
EOF
systemctl start mysqld.service
systemctl status mysqld.service
记得修改密码(上面是无密码的情况)
mysql -u root
ALTER USER 'root'@'localhost' IDENTIFIED BY 'your_new_password';
3.3、其他的一些内容
3.3.1、把密码改简单的方法
在mysql环境打开
SHOW VARIABLES LIKE 'vali%';
5.7默认会安装这个插件,若没有安装,则SHOW VARIABLES LIKE 'vali%'则会返回空。
解释
validate_password_length 8 # 密码的最小长度,此处为8。
validate_password_mixed_case_count 1 # 至少要包含小写或大写字母的个数,此处为1。
validate_password_number_count 1 # 至少要包含的数字的个数,此处为1。
validate_password_policy MEDIUM # 强度等级,其中其值可设置为0、1、2。分别对应:
【0/LOW】:只检查长度。
【1/MEDIUM】:在0等级的基础上多检查数字、大小写、特殊字符。
【2/STRONG】:在1等级的基础上多检查特殊字符字典文件,此处为1。
validate_password_special_char_count 1 # 至少要包含的个数字符的个数,此处为1
想要关闭这个插件,则在配置文件中加入 validate_password=off 并重启mysqld即可:
在 vim /etc/my.cnf配置文件中增加
validate_password=off
然后重启mysql 就 ok了.
重新启动mysqld
systemctl restart mysqld
---------------------------------------------------------------------------------------------------------------------------------
3.3.2、一些配置
默认配置文件路径:
配置文件:/etc/my.cnf
日志文件:/var/log/var/log/mysqld.log
服务启动脚本:/usr/lib/systemd/system/mysqld.service
socket文件:/var/run/mysqld/mysqld.pid
---------------------------------------------------------------------------------------------------------------------------------
3.3.3、 设置允许远程登录
登录到mysql里执行
mysql> use mysql
mysql> update user set user.Host='%'where user.User='root';
mysql> flush privileges;
mysql> quit