linux下使用MariaDB数据库的过程

首先对于Centos7的系统,他是自带的MariaDB数据库的,可以使用

sudo rpm -qa | grep mariadb

在这里插入图片描述
但是阿里云服务器中好像是没有这个数据库的,需要自己下载;如果虚拟机中的MariaDB数据库中缺少什么东西,再下载就好了

yum -y install mariadb-devel
yum -y install mariadb-server

前期准备

  1. 查看mariadb数据库的状态
service mariadb status

在这里插入图片描述

  1. 关闭mariadb数据库服务
service mariadb stop

在这里插入图片描述

  1. 开启mariadb数据库服务
service mariadb start

在这里插入图片描述
中间所需要使用的密码是root用户的密码

  1. 配置登录文件
    一开始的时候,我们没有设置数据库的登录密码,可以使用这个方式,先跳过登录时的权限验证,等到成功登录后,再进行设置登录密码。
sudo vim /etc/my.cnf

//插入
skip-grant-tables  #跳过数据库权限验证

这样就可以免密登录数据库了
在这里插入图片描述

  1. 重启数据库
service mariadb restart
  1. 查看版本信息
select version();

数据库操作

  1. 登录数据库
mysql -u root

在这里插入图片描述

  1. 切换到MySQL数据库
use mysql

在这里插入图片描述

  1. 更新数据库的登录密码
	update user set password=password('新的密码')
    where user='root' and host='localhost';

刷新MySQL权限相关的表

flush privileges; 

在这里插入图片描述

  1. 退出数据库
quit;
  1. 使用密码进行登录数据库

先在/etc/my.cnf文件中注释掉刚才加入的跳过权限验证语句
在这里插入图片描述
在重启mariadb数据库后,使用密码进行登录

mysql -u root -p

这里的密码和root用户登录时的密码一样,都是不会显示出来的
在这里插入图片描述

MySQL 的连接原理

MySQL所占用的端口号为3306,我们启动MySQL服务端后,使用命令查看这个端口后

netstat -anp | grep 3306

在这里插入图片描述
可以看到他使用的TCP协议

我们在启动MySQL服务端时,会先启动守护进程mysqld,再连接MySQL服务端。这样我们在使用的过程中,万一MySQL服务端崩溃的时候,就可以使用守护进程重新拉起MySQL服务端。

ps aux | grep mysqld

在这里插入图片描述
在这里插入图片描述

  • 选择连接的协议:

当客户端发起连接的时候,服务端的处理过程

连接层中:

  1. 用户验证
  2. 选择连接的协议

我们在自己的主机上连接的时候,也就是本地的MySQL客户端,那么是不用走网络协议栈的,只是通过域套接字来完成客户端与服务端的进程间通信

在这里插入图片描述
我们在linux下进行连接(本地客户端)的时候,3306这个端口并没有产生新的连接;但是我们在windows下进行连接(远端客户端)的时候,就发生了一次TCP连接。(telnet,使用时需要打开linux中的23和3306两个端口)

域套接字

就是创建的一个文件,然后客户端和服务端通过这个文件来进行通信(也就是进程间通信
在这里插入图片描述
因为通信是通过文件来完成的,所以接收数据和发送数据使用的是文件操作,read,write

  1. 创建线程对客户端进行服务(多线程通信)

server层中:

  1. 检查SQL语句的语法是否正确
  2. 语义分析
  3. 权限检查,判断当前用户是否有对该表操作的权限
  4. 分析SQL语句的查找方案,选择一个执行效率最高的方案
  5. 执行SQL语句 --》 存储引擎去执行

存储引擎

相当于是一个Linux操作系统中的文件文件系统。不同的存储引擎,可以决定着数据的存储方式,索引类型,事务等方式。

而其中的数据都是在磁盘中的。

基本操作

sql语句即为结构化的查询语句,其中数据库定义语言(DDL),数据库操作语言(DCL),数据库修改语言(DML)

  1. 使用数据库
use [数据库的名称];  #可以切换数据库
  1. 查看当前数据库中的数据表
show tables;
  1. 数据库的创建
create database [数据库的名称] charset=[字符集];
  1. 查看创建的数据库的过程
show create database [数据库的名称];

在这里插入图片描述
如果MySQL的版本大于4.0,就默认采用latin1字符格式。

常见的几个字符集

  1. ASCII字符集:采用的是1个字节的低7位表示字符,高位始终为0
  2. LATIN1字符集:相对于ASCII字符集而言,他启动了最高位
  3. GBK字符集:支持了中文字符,字符所占的大小为1个字节或者2个字节
  4. UTF8字符集:Unicode字符集,他支持所有国家的文字字符,用1-4个字节来表示字符大小

在这里插入图片描述
当我们使用默认的字符集的时候,我们对一个表中插入中文字符,就会显示为乱码的格式。

这就是因为中文字符一般都是1-4个字节,但是默认的LATIN1字符集却只有一个字节的大小,就会发生截取的现象,读取后就会出现乱码。(本来是一个数据,却被分成了几份显示)
在这里插入图片描述
发生乱码的原因就是前后端字符集不匹配

  1. 查询数据库中的字符集格式
show variables like '%character%';

在这里插入图片描述

校对规则

校对规则有什么用呢? 当我们想要对插入的数据进行排序的时候,如果数据是一个(dcl)和(DCL),那么该怎么进行排序。。。。

校对规则的种类

  1. 区分大小写,他的规则的后缀为_cs
  2. 不区分大小写,他的规则的后缀为_ci
  3. 后缀为_bin,表示以二进制进行区分,这也是大小写敏感的
show collation; # 查看校对规则

校对规则的特征:

  1. 不同的字符集有不同的校对规则
  2. 每一个字符集都有自己的默认校对规则
    (UTF8字符集的默认校对规则为utf8_general_ci),不区分大小写

MySQL 是不区分大小写的

create databases [数据库名称]
collate [校对规则];

在这里插入图片描述

删库

drop database [数据库名称];

注意:删除的数据库如果没有备份,那么是不可能进行还原的。(跟linux中的 rm 命令是一个道理)

  • 数据库的备份
mysqldump -P[端口] -u[用户] -p[密码] -B[数据库的名称] > 数据库备份存储文件的路径;

在这里插入图片描述
然后这个.sql的文件中,所存储的就是在这个数据库中所有执行的语句在这里插入图片描述

  • 备份的还原
source [备份数据库文件的路径,相对路径,绝对路径都可以];

在这里插入图片描述

  • 表备份
mysqldump -P[端口] -u[用户] -p[密码] 数据库名称  表1 表2... > 数据表备份存储的文件路径;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章