首先对于Centos7的系统,他是自带的MariaDB数据库的,可以使用
sudo rpm -qa | grep mariadb
但是阿里云服务器中好像是没有这个数据库的,需要自己下载;如果虚拟机中的MariaDB数据库中缺少什么东西,再下载就好了
yum -y install mariadb-devel
yum -y install mariadb-server
前期准备
- 查看
mariadb
数据库的状态
service mariadb status
- 关闭
mariadb
数据库服务
service mariadb stop
- 开启
mariadb
数据库服务
service mariadb start
中间所需要使用的密码是root
用户的密码
- 配置登录文件
一开始的时候,我们没有设置数据库的登录密码,可以使用这个方式,先跳过登录时的权限验证,等到成功登录后,再进行设置登录密码。
sudo vim /etc/my.cnf
//插入
skip-grant-tables #跳过数据库权限验证
这样就可以免密登录数据库了
- 重启数据库
service mariadb restart
- 查看版本信息
select version();
数据库操作
- 登录数据库
mysql -u root
- 切换到MySQL数据库
use mysql
- 更新数据库的登录密码
update user set password=password('新的密码')
where user='root' and host='localhost';
刷新MySQL权限相关的表
flush privileges;
- 退出数据库
quit;
- 使用密码进行登录数据库
先在/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
- 选择连接的协议:
当客户端发起连接的时候,服务端的处理过程
连接层中:
- 用户验证
- 选择连接的协议
我们在自己的主机上连接的时候,也就是本地的MySQL客户端,那么是不用走网络协议栈的,只是通过域套接字来完成客户端与服务端的进程间通信
我们在linux下进行连接(本地客户端)
的时候,3306这个端口并没有产生新的连接;但是我们在windows下进行连接(远端客户端)
的时候,就发生了一次TCP连接。(telnet,使用时需要打开linux中的23和3306两个端口)
域套接字
就是创建的一个文件,然后客户端和服务端通过这个文件来进行通信(也就是进程间通信
)
因为通信是通过文件来完成的,所以接收数据和发送数据使用的是文件操作,read,write
- 创建线程对客户端进行服务(多线程通信)
server层中:
- 检查SQL语句的语法是否正确
- 语义分析
- 权限检查,判断当前用户是否有对该表操作的权限
- 分析SQL语句的查找方案,选择一个执行效率最高的方案
- 执行SQL语句 --》
存储引擎去执行
存储引擎
相当于是一个Linux操作系统中的文件文件系统。不同的存储引擎,可以决定着数据的存储方式,索引类型,事务等方式。
而其中的数据都是在磁盘中的。
基本操作
sql语句即为结构化的查询语句,其中数据库定义语言(DDL),数据库操作语言(DCL),数据库修改语言(DML)
- 使用数据库
use [数据库的名称]; #可以切换数据库
- 查看当前数据库中的数据表
show tables;
- 数据库的创建
create database [数据库的名称] charset=[字符集];
- 查看创建的数据库的过程
show create database [数据库的名称];
如果MySQL的版本大于4.0,就默认采用latin1字符格式。
常见的几个字符集
- ASCII字符集:采用的是1个字节的低7位表示字符,高位始终为0
- LATIN1字符集:相对于ASCII字符集而言,他启动了最高位
- GBK字符集:支持了中文字符,字符所占的大小为1个字节或者2个字节
- UTF8字符集:Unicode字符集,他支持所有国家的文字字符,用1-4个字节来表示字符大小。
当我们使用默认的字符集的时候,我们对一个表中插入中文字符,就会显示为乱码的格式。
这就是因为中文字符一般都是1-4个字节,但是默认的LATIN1字符集却只有一个字节的大小,就会发生截取的现象,读取后就会出现乱码。(本来是一个数据,却被分成了几份显示)
发生乱码的原因就是前后端字符集不匹配
- 查询数据库中的字符集格式
show variables like '%character%';
校对规则
校对规则有什么用呢? 当我们想要对插入的数据进行排序的时候,如果数据是一个(dcl)和(DCL),那么该怎么进行排序。。。。
校对规则的种类
- 区分大小写,他的规则的后缀为
_cs
- 不区分大小写,他的规则的后缀为
_ci
- 后缀为
_bin
,表示以二进制进行区分,这也是大小写敏感的
show collation; # 查看校对规则
校对规则的特征:
- 不同的字符集有不同的校对规则
- 每一个字符集都有自己的默认校对规则
(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... > 数据表备份存储的文件路径;