一、数据库基本介绍
1、什么是数据库服务
数据库是一个组织和存储数据的系统。它是一个结构化的数据集合,通过特定的方式进行组织和管理,以便于数据的存储、访问和管理。数据库通常由数据库管理系统(DBMS)来管理,DBMS负责处理数据的创建、查询、更新和删除等操作。数据库的设计可以根据需要进行优化,以满足不同的数据管理需求,如快速查询、数据完整性和安全性等。
2、数据库的分类
1,关系型数据库,类似excel
关系型数据库(Relational Database)是一种基于关系模型来组织和存储数据的数据库。关系模型是由E.F. Codd于1970年提出的,它使用表(Tables)来表示数据和数据之间的关系。每个表由行(记录)和列(字段)组成。行表示具体的实例或记录,列表示数据的属性或字段。
关系型数据库的特点
1.表结构:数据以表格形式存储,表之间通过外键(Foreign Key)建立关联。
2.SQL语言:使用结构化查询语言(SQL)来进行数据的定义、查询、插入、更新和删除操作。
3.数据完整性:通过主键(Primary Key)、外键和唯一约束(Unique Constraint)等机制确保数据的一致性和完整性。
4.事务管理:支持事务(Transaction),保证一组操作要么全部成功,要么全部失败,以保证数据的可靠性和一致性。
5.并发控制:通过锁机制和多版本控制(MVCC)等技术,支持多个用户同时访问和操作数据。
常见的关系型数据库管理系统
1.MySQL:开源、广泛使用,适用于中小型应用。
2.PostgreSQL:开源、功能强大,支持高级SQL特性和扩展性。
3.Oracle Database:商业数据库,功能强大,常用于企业级应用。
- 库>>表>>字段
- 常用的数据库
· MySQL
· Oracle
· mariadb(主讲)
#2,非关系型数据库
非关系型数据库(NoSQL数据库)是一种不同于传统关系型数据库的数据库管理系统,它的设计目标是为了解决大规模数据存储和高性能需求而诞生的。与关系型数据库不同,NoSQL数据库不依赖于固定的表结构和SQL语言。
特点和分类
1.灵活的数据模型:NoSQL数据库支持多种数据模型,如键值对(Key-Value)、文档型、列族(Column-Family)和图形等。
2.分布式和横向扩展:设计用于处理大规模数据和高并发访问,可以通过分区和复制来实现横向扩展。
3.高性能和高可用性:通常具有优秀的读写性能,并支持在节点故障时保持系统可用。
4.没有固定的模式:数据结构可以根据需求动态地进行调整和扩展,适合于半结构化和非结构化数据。
5.不支持复杂的事务处理:通常不支持像关系型数据库那样的复杂事务处理和完整的ACID特性。
常见类型
1.键值存储(Key-Value Stores):如Redis、Memcached,简单、高效,适合缓存和会话管理。
2.文档型数据库(Document Stores):如MongoDB、Couchbase,存储类似JSON的文档,适合变化频繁的数据结构。
3.列族数据库(Column-Family Stores):如HBase、Cassandra,适合需要快速读写和稀疏数据的场景。
4.图形数据库(Graph Databases):如Neo4j、ArangoDB,用于存储图结构数据和复杂的关系数据。
应用场景
NoSQL数据库通常用于Web应用程序、大数据处理、实时分析和物联网(IoT)等需要处理大量数据和灵活数据模型的场景。它们在互联网公司、社交媒体平台和大型企业中得到广泛应用
- 键值对:key=value
- 常用:
· redis
· mangoDB
· ES(ELFK)
常见的:
- TiDB:开源分布式关系型数据库,是一款同时支持在线事务处理与在线分析处理的融合型分布式数据库;
- oceanbase:蚂蚁集团研发估产分布式数据库;
- RDS(阿里云)/TDSQL(腾讯云),saas平台云计算服务环境构建的数据库产品;
二、安装部署mariadb
1,安装客户端与服务端
#1,安装mariadb的服务端与客户端(你配置了epel安装源)
[root@web01 ~]# yum -y install mariadb-server mariadb
#2,查看自己安装和版本
[root@web01 ~]# rpm -qa mariadb
mariadb-5.5.68-1.el7.x86_64
#3,查看安装软件的目录
[root@web01 ~]# rpm -ql mariadb
2,mariadb的重要文件与目录
· 日志切割路径
cat /etc/logrotate.d/mariadb
· 服务配置文件
#mysql配置文件;
egrep -v "^#|^$" /etc/my.cnf
· 数据存储目录
#1,启动数据库
systemctl start mariadb
netstat -tnulp
#2.设置开机自启动
systemctl enable mariadb
#3,查看数据库的数据存储目录
ll /var/lib/mysql/
#4,登录数据库,对比~
mysql
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema | #mysql:视图(会说)
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.00 sec)
ll /var/log/mariadb/
总用量 4
-rw-r-----. 1 mysql mysql 10417 6月 13 06:35 mariadb.log
ps -ef |grep mariadb
mysql 1622 1305 0 6月14 ? 01:47:23 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --log-error=/var/log/mariadb/mariadb.log --pid-file=/var/run/mariadb/mariadb.pid --socket=/var/lib/mysql/mysql.sock
root 52727 31912 0 20:26 pts/6 00:00:00 grep --color=auto mariadb
cat /var/run/mariadb/mariadb.pid
2654
3,数据库的启停
systemctl start mariadb #开启
systemctl stop mariadb #关闭
systemctl enable mariadb #开机自启动
systemctl disable mariadb #禁止开机自启动
4,登录数据库
给数据库(管理员)设置密码
mysqladmin password "1"
使用密码登录;
mysql -uroot -p1
root管理员忘记密码怎么办?
1,关闭数据库
systemctl stop mariadb.service
2,跳过授权表、跳过网络验证,启动数据库
/usr/bin/mysqld_safe --basedir=/usr --skip-grant-table --skip-network &
- 参数介绍
/usr/bin/mysqld_safe #启动数据库的命令
--basedir=/usr #mysql服务的安装目录
--skip-grant-table #跳过授权表
--skip-network #跳过网络验证
3,登录数据库
mysql
4,修改密码(为2)
update mysql.user set password=password("2") where user='root' and host='localhost';
5,退出数据库(强制)
pkill mysqld
ps -ef | grep mariadb
6,正常启动数据库
mysql -uroot -p2
三、数据库的用户管理
1,查询用户信息(查)
select user,host from mysql.user;
+------+-----------+
| user | host |
+------+-----------+
| root | 127.0.0.1 |
| root | ::1 |
| | localhost |
| root | localhost |
| | web01 |
| root | web01 |
+------+-----------+
用户的组成部分
用户名@‘白名单’root@'localhost'
只能本地登录mysqlroot@'192.168.17.8'
只有192.168.17.8这个主机可以登录mysqlroot@'192.168.17.%'
只允许你192.168.17.0/24这个网段可以登录;root@'%'
任何地址都可以登录;######################root@'baidu.com'
基于本地hosts文件的dns解析地址可以登录;
2,创建用户(增)
create user hongniu@'%' identified by '1';
3,修改用户密码(改)
#mariadb修改密码
MariaDB [(none)]> update mysql.user set password=password('2') where user='hongniu' and host='%';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
#mysql修改密码
mysql> alter user hongniu@'%' identified by '2';
4,删除用户
drop user hongniu@'%';
四、数据库的用户权限管理
1,查看数据库都有哪些权限
show privileges;
###################################
#需要了解的权限:
- select #对表(table)的操作,查询表中的信息;
- insert #对表(table)的操作,往表中插入信息;
- update #对表(table)的操作,修改表中的信息;
- delete #对表(table)的操作,删除表中的信息;
- alter #对表(table)的操作,修改表中的信息;(字段)【了解】
- index #对表(table)的操作,删除、修改、创建表中的索引信息;(拓展),Btree索引;【了解】
- create #对库(database)、表(table)、索引(index)的操作,创建;【了解】
- drop #对库(database)、表(table)对的操作;删库、删表;【了解】
2,给用户授权
#创建一个用户;刚刚创建出来的用户,只能登陆,什么都干不了;
MariaDB [(none)]> create user hehe@'%' identified by '1';
Query OK, 0 rows affected (0.00 sec)
#给新创建的用户授权(所有权利==all)【grant 权限 on 库.表 to 用户名@'白名单'】
PS:在数据库中,只有root能拥有grant授权的权限,即便给其他用户all的权限了,也不可以给别人授权;
MariaDB [(none)]> grant all on *.* to hehe@'%';
Query OK, 0 rows affected (0.00 sec)
#查询一个用户,都有哪些权限????【】
MariaDB [(none)]> show grants for hehe@'%';
+--------------------------------------------------------------------------------------------------------------+
| Grants for hehe@% |
+--------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'hehe'@'%' IDENTIFIED BY PASSWORD '*E6CC90B878B948C35E92B003C792C46C58C4AF40' |
+--------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
#回收一个用户的权限【revoke 权限 on 库.表 from 用户@'白名单'】
MariaDB [(none)]> revoke all on *.* from hehe@'%';
Query OK, 0 rows affected (0.00 sec)
五、数据库的连接
1,本地连接
#基于socket文件进行连接的,服务启动创建socket文件,服务关闭删除socket文件;
/var/lib/mysql/mysql.sock
#登录数据库的全称【-p:密码,-h:主机,-P:数据库服务端口号,-S:指向套接字文件(socket)】
[root@web01 ~]# mysql -uroot -p2 -hlocalhost -P3306 -S /var/lib/mysql/mysql.sock
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 13
Server version: 5.5.68-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)]>