当前位置: 首页 > news >正文

MYSQL之基础认识(卸载安装登录, 基本概念)

一. 卸载安装和登录

卸载 MYSQL

1.  查看有无mysql服务正在运行:

ps ajx | grep mysql

2. 查看到 mysql 的服务名称:

systemctl list-units --type=service | grep mysql

3. 关闭 mysql 服务

4. 卸载

 dpkg -l | grep mysql | awk '{print $2}' | xargs sudo apt remove --purge -y

5. 再次检查发现没有mysql相关组件


安装MYSQL

1. 下载 MySQL APT Repository 配置包

wget https://dev.mysql.com/get/mysql-apt-config_0.8.29-1_all.deb

2. 安装 MySQL APT Repository 配置包

sudo dpkg -i mysql-apt-config_0.8.29-1_all.deb 

安装过程中,会弹出一个交互式界面, 这里选择了 8.0 版本:

3. 更新软件包列表

sudo apt update

4. 检查 APT 软件源是否包含 MySQL

grep -r 'mysql' /etc/apt/sources.list /etc/apt/sources.list.d/

5. 安装

sudo apt install mysql-server -y  

6. 检查一下 

 7. 启动服务, 查看状态并设置开机自启:

查看启动服务:


登录MYSQL

这里只介绍免密登录, 用于不创建用户快速使用mysql: 

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

在[mysqld]最后⼀栏配置加⼊: skip-grant-tables 选项, 并保存退出

systemctl restart mysql # 重启mysql服务, 使配置生效

现在mysql -uroot 可以直接登录mysql:

配置文件

配置 my.cnf:

[mysqld]
pid-file    = /var/run/mysqld/mysqld.pid
socket      = /var/run/mysqld/mysqld.sock
datadir     = /var/lib/mysql
log-error   = /var/log/mysql/error.logcharacter-set-server=utf8
# 基础设置  
port=3306
bind-address = 0.0.0.0
symbolic-links=0
# InnoDB 设置
default-storage-engine=innodb# 免密登录
skip-grant-tables

登录选项

 由于一开始为了尽快使用mysql, 选择了免密登录, 导致 MySQL 不开启网络认证模块, 也就 不会监听 3306 端口.

配置文件中将 skip-grant-tables 注释掉, 发现MYSQL正常监听 3306 端口:

但由于root权限还没有设置, 所以此时无法登陆, 后面再说.


二. 数据库基础

mysql与mysqld

1. 站在服务器角度: mysql 和 mysqld 分别是是数据库服务的客户端和服务端, 而 MYSQL产品 本质是基于C(mysql)S(mysqld) 模式的网络服务.

 2. mysql是一种服务, 是什么服务呢? 

MYSQL 是一套给我提供关系型数据存取服务的网络程序.

什么是数据库?

数据库一般是指在磁盘或内存中存储的特定结构组织的数据(数据库文件), 也可以是指将来在磁盘存储的一套数据库方案.

3. 为什么要有数据库?

数据管理技术经历了人工管理、文件系统、数据库系统3个阶段:

  • 人工管理时期是最早期的数据管理方案, 数据不保存, 不共享, 不独立, 由应用程序管理数据, 当数据的逻辑结构或物理结构发生变化后, 必须对应用程序做相应的修改, 这就加重了程序员的负担。
  • 文件系统阶段, 虽然数据由文件系统管理, 可以长期保存, 但文件不利于存储海量数据
    , 数据共享性和独立性仍然差, 冗余度大. 

但我们更关心对于程序员来说, 数据管理是否方便, 一般的文件系统确实提供了数据存储的功能, 但是并没有给用户提供便利的数据管理能力, 我们仅仅是能找到这个数据, 在程序中控制不方便.

为了解决上述问题, 专家们设计出更加利于管理数据的东西——数据库, 它能更有效的管理数据. 数据库的水平是衡量一个程序员水平的重要指标

  • 数据库系统管理数据: 数据结构化;数据的共享性高, 冗余度低, 易扩充; 数据独立性高; 数据由DBMS统一管理和控制

数据库本质是对数据内存存储的一套解决方案, 它对于用户来说就是:"你(user)给我字段或者要求, 我(mysqld)直接给你结果就行", 对于数据的增删查改(主要是查)更方便.

 什么是数据库?

  • 一方面, 数据库是一组有组织的数据集合, 通常存储在磁盘上, 并由数据库管理系统(DBMS, 比如mysqld)进行管理.
  • 另一方面, 也可以认为数据库是数据内存存储的一套解决方案, 包括mysql, mysqld和数据库文件三者的交互.

 数据库文件

先举一个例子, 使用mysql建立一个数据库, 建立一张表结构, 插入一些数据, 对比mysql在linux下是如何实现的:

结论1: 建立数据库的本质, 实际是在datadir目录下创建一个新的目录, 如图: 

结论2:  在数据库内建立一张表, 本质就是在linux下建立对应的文件

进入helloworld目录下, 此时目录什么也没有:

 创建一张student表, 此时 helloworld 目录下多出一个文件:

结论3: 结论1和结论2的这些工作, 都是 mysqld 服务帮我们完成的. 因此程序员不再关心数据库文件本身, 数据库文件的结构由 mysqld 帮我们维护, 程序员对数据的操作从直接操作(文件)变为通过 mysql 客户端请求 mysqld 帮助我们操作(数据库文件).

主流数据库

SQL Sever: 微软的产品, .Net程序员的最爱, 中大型项目

Oracle: 甲骨文产品, 适合大型项目, 复杂的业务逻辑(比如银行), 并发一般来说不如MySQL

MySQL: 世界上最受欢迎的数据库, 属于甲骨文, 并发性好, 不适合做复杂的业务. 主要用在电商, SNS, 论坛. 对简单的SQL处理效果好.

PostgreSQL :加州大学伯克利分校计算机系开发的关系型数据库, 不管是私用, 商用, 还是学术研究使用, 可以免费使用, 修改和分发, 用得不多.

SQLite:  是一款轻型的数据库, 是遵守ACID的关系型数据库管理系统, 它包含在一个相对小的C库中. 它的设计目标是嵌入式的, 而且目前已经在很多嵌入式产品中使用了它, 它占用资源非常的低,在嵌入式设备中, 可能只需要几百K的内存就够了.

H2: 是一个用Java开发的嵌入式数据库, 它本身只是一个类库, 可以直接嵌入到应用项目中.

服务器,数据库,表关系

 所谓安装数据库服务器, 只是在机器上安装了一个数据库管理系统程序, 这个管理程序可以管理多个数据库, 一般开发人员会针对每一个应用创建一个数据库

为保存应用中实体的数据, 一般会在数据库中创建多个表, 以保存程序中实体的数据

MySQL架构

MySQL 是一个可移植的数据库, 几乎能在当前所有的操作系统上运行, 如 Unix/Linux, Windows, Mac 和 Solaris. 各种系统在底层实现方面各有不同, 但是 MySQL 基本上能保证在各个平台上的物理体系结构的一致性

1. 连接层(Connection Pool)

主要是解决安全用户连接管理: 如认证用户身份(mysql.user 表), 维持连接管理.

2. SQL 层

主要负责 SQL 解析, 优化和执行

3. 存储引擎层

负责数据的存储和读取,  不同存储引擎提供不同的功能, 默认使用 InnoDB. 

可以注意到图中在SQL层和存储引擎层之间有一个插座图标, 说明存储引擎是支持热插拔的, 想使用哪个存储引擎就像使用插件一样加载进去即可.

综上: mysql依然是一套文件系统, 只是它是基于OS提供的文件系统之上的一层文件系统. 

SQL语句分类

1. DDL【data definition language】 数据定义语言, 用来维护存储数据的结构

代表指令: create, drop, alter

2. DML【data manipulation language】 数据操纵语言, 用来对数据进行操作

代表指令: insert, delete, update

DML中又单独分了一个DQL, 数据查询语言代表指令: select

3. DCL【Data Control Language】 数据控制语言, 主要负责权限管理和事务

代表指令: grant, revoke, commit

存储引擎

存储引擎是: 数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法.

MySQL的核心就是插件式存储引擎, 支持多种存储引擎

mysql 下使用 show engines; 可以查看存储引擎:

存储引擎对比: 


相关文章:

  • Linux论坛安装
  • 【第四章】19-匹配规则定义
  • JavaScript实现二级菜单
  • 【uniapp-兼容性处理】安卓uView组件中u-input后置插槽不展示
  • Vmware esxi 给现有磁盘增加空间后并扩展系统里磁盘空间
  • Redis 键管理
  • AI Agent认知框架(ReAct、函数调用、计划与执行、自问自答、批判修正、思维链、思维树详解和对比,最后表格整理总结
  • redis-7 安装
  • linux sysfs使用cat无显示的原因:返回值未赋值
  • 《深入解析C++中的explicit关键字:防止隐式转换的利器》
  • C语言main的参数;argc与argv
  • 开源键鼠共享软件的“爱恨情仇“:Deskflow、InputLeap与Barrier的演化史
  • Shell脚本-四则运算符号
  • spark基础介绍
  • Neowise Labs Contest 1 (Codeforces Round 1018, Div. 1 + Div. 2)(A~E)
  • 在Ubuntu 18.04下编译OpenJDK 11
  • 【每天一个知识点】主题建模(Topic Modeling)
  • NHANES指标推荐:PhenoAge
  • 【时时三省】(C语言基础)循环的嵌套和几种循环的比较
  • HarmonyOS:Navigation实现导航之页面设置和路由操作
  • 第三轮上海餐饮消费券本周五起报名,核销时间延长至6月2日
  • “解压方程式”主题沙龙:用艺术、精油与自然的力量,寻找自我疗愈的方式
  • 王东杰:重审康有为的“大同世界”
  • 上海明天有雷雨、大风,下周气温在春日舒适区间
  • 中国房地产报:以改促治实现楼市多难并解
  • 山西一国道发生塌陷,造成4车追尾2人死亡