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

【Day 30】Linux-Mysql数据库

 一、Mysql

    (一)Mysql安装

    1、Mysql版本

    • MySQL 的归属经历了三次重要变更:最初由 MySQL AB 公司开发运营,后被 Sun 公司收购;2009 年,Sun 公司又被 Oracle 公司收购,自此 MySQL 归入 Oracle 旗下。

    • MySQL 5.5:2010 年发布,首次将 InnoDB 设为默认存储引擎,支持半同步复制,优化了 InnoDB 性能,为企业级应用打下基础。

    • MySQL 5.6:2013 年发布,引入 GTID 简化主从复制配置,提升 InnoDB 并发能力,支持 InnoDB 全文索引和慢查询日志微秒级计时,强化高可用与性能。

    • MySQL 5.7:2015 年发布,支持原生 JSON 类型、透明页压缩、增强半同步复制等,优化 Performance Schema 减少内存使用,新实例不再默认创建 test 数据库及匿名用户等。

    • MySQL 8.0:2018 年正式发布,引入原生数据字典,重构 INFORMATION_SCHEMA,支持降序索引、公用表表达式、资源组等,默认字符集改为 utf8mb4 等。

    • MySQL 9.0.0:2024 年 7 月发布,新增 JavaScript 存储程序、VECTOR 类型支持、内联和隐式外键约束等诸多新功能。

    • MySQL 9.2.0:最新记录显示于 2025 年 1 月发布,扩展 JavaScript 相关支持,像添加 JavaScript 事务 API、JavaScript ENUM 和 SET 支持等。

    2、安装过程

    (1)从 MySQL 官方下载并安装适用于 EL7(CentOS 7/RHEL 7)系统的 YUM 源配置包

    //浏览器搜索

    //选择适合版本复制

    //使用rpm -ivh命令将刚刚复制的rpm包安装上。

    //执行成功后会在/etc/yum.repos.d/目录下生成 MySQL 相关的 repo 文件

    (2)通过 yum 安装 MySQL。

    //确认软件安装

    (3)启动服务并确认

    //启动 MySQL 服务时,首次启动会自动完成数据库初始化,具体包括:

    1. 创建系统数据库:自动生成 mysqlinformation_schema 等核心系统数据库及表结构。

    2. 生成初始密码:为 root@localhost 生成随机临时密码,记录在 /var/log/mysqld.log 中。

    3. 初始化权限表:设置默认的用户权限、访问控制规则等基础安全配置。

    4. 创建必要目录:如数据目录、日志目录等,并设置正确的权限。

    • 只有首次启动时才会执行初始化,后续启动服务仅会正常启动进程,不会重复初始化。

    (4)查看临时密码

    //MySQL 5.7 及以上版本(包括正在安装的 MySQL 8.0)在首次启动时,会自动为 root 用户生成一个随机初始密码,并记录在日志文件中

    (5)修改root密码。输入临时密码-修改新密码

    //MySQL(尤其是 5.7 及以上版本)默认启用了密码复杂度验证插件(validate_password)。

    当插件件启用时,密码需满足:长度至少 8 字符、包含大写字母 、小写字母 、数字、特殊字符。

    3、主要相关文件

    • /etc/my.cnf
    • // MySQL 的默认配置文件。当 MySQL 服务启动时,会优先读取此文件中的配置。

    [mysqld] 段:所有 MySQL 服务器(mysqld 进程)相关的配置都需放在这个 section 下,确保参数被正确加载。

    • port=3306:默认端口;
    • character-set-server=utf8mb4:默认字符集;
    • max_connections=1000:最大连接数限制等。

      • socket:套接字文件。接收本地访问请求。仅用于同一台服务器上的客户端与服务器通信,不支持跨机器连接(远程程连接需用 TCP/IP 端口 3306)。本质是一个特殊的文件。
      • 与 MySQL 相关的套接字文件:
      1. mysql.sock:实际用于通信的套接字文件,客户端通过读写此文件与服务器交换数据。
      2. mysql.sock.lock:套接字文件的锁文件,用于防止多个进程同时创建或修改 mysql.sock,确保通信唯一性。

      修改配置前需停止服务,修改配置后需重启 MySQL 服务(systemctl restart mysqld)才能生效。

      (1)更换存储目录且不需要旧的存储目录

      (2)更换存储目录,仍需旧存储目录

      //注意一定要是 cp -r /旧目录/*   /新目录/

      若是修改配置文件后,未复制旧目录就启动了。需要将启动后新目录中自动生成的初始化文件删掉后,再复制。

      (3)修改套接字文件

      若改为/A1/mysql.sock

      配置文件指定的 socket 路径(socket=/A1/mysql.sock)与默认连接的 socket 路径(/var/lib/mysql/mysql.sock)不同。

      (1)临时解决

      (2)永久解决

      • vim /etc/my.cnf        //添加


      • /var/lib/mysql
      • // MySQL 的默认数据存储目录,所有数据库、表、索引、权限等核心数据都存储在此处。

      • 每个数据库会在此目录下生成一个同名子目录,目录内包含该数据库的表文件。。
      • 权限要求严格:通常属主为 mysql:mysql,普通用户无读写权限,避免数据被误修改或删除。
      • 若需迁移数据,需严格复制此目录(需停止服务,确保数据一致性)。


      • /var/log/mysqld.log
      • // MySQL 服务的主要日志文件,记录服务器启动 / 关闭、错误信息、警告、连接日志等关键事件。

      4、系统数据库

      MySQL 首次启动初始化生成

      核心作用存储内容

      information_schema

      (信息数据库)

      提供 MySQL 服务器的 “元数据目录”,即数据库自身的结构信息。
      • 所有数据库、表、列的定义(如数据库名、表名、字段类型、长度、约束等)
      • 服务器支持的存储引擎、字符集、数据类型等基础信息;
      • 表的索引、分区、权限关联等结构细节。

      mysql

      (系统权限数据库)

      存储 MySQL 服务器的用户管理和权限控制核心数据。

      • 用户账号信息:user 表存储所有用户的用户名、加密密码、登录主机限制等
      • 权限配置:db(库级权限)、tables_priv(表级权限)、columns_priv(列级权限)等表记录用户对数据库、表、字段的操作权限
      • 角色管理、密码策略、SSL 配置等安全相关数据。
      • 此库损坏会导致用户无法登录或权限失效,需谨慎操作(建议定期备份)。

      performance_schema

      (性能监控数据库)

      实时监控 MySQL 服务器的运行状态,保存数据服务器性能相关的数据。
      • 当前活跃线程(threads 表)
      • 连接数(connections 表)
      • 连接状态(如 “Sleep”“Query”)
      • 资源消耗:CPU 使用率、内存占用、I/O 操作次数
      • 锁与等待:表锁、行锁的持有和等待情况
      • SQL 执行统计:语句执行次数、耗时、扫描行数

      sys

      (简化诊断数据库)

      基于information_schema

      performance_schema

      的 “简化视图库”,降低性能分析门槛,方便数据库管理员查看。

      • 预定义的视图:整合性能数据,用更直观的方式展示
      • 便捷函数:将原始性能数据转换为可读格式
      • 常见诊断场景的聚合结果。

      (二)SQL语句

      简称全称核心命令主要功能

      操作对象 /

      影响范围

      DQL数据查询语言SELECT从数据库中查询数据(仅读取,不修改)

      表中的记录(返回查询结果集)

      DML数据操作语言

      INSERTUPDATEDELETE、

      新增、修改、删除表中的记录表中的具体数据
      DDL数据定义语言CREATEALTERDROPTRUNCATE创建、修改、删除数据库对象;清空表数据数据库结构
      DCL数据控制语言GRANTREVOKE授予或收回用户对数据库对象的操作权限用户权限
      TCL事务控制语言COMMITROLLBACKSAVEPOINT管理事务,确保操作的原子性、一致性等事务

      1、库

      • > show databases;        //查看数据库
      • > create database 数据库名称;         //创建数据库。

              MySQL 8.0默认使用的字符集utf8,支持存储中文

      //MySQL 5.7默认使用的字符集是latin,不支持存储中文;可在创建数据库时通过选项charset指定字符集为utf8,方便在表中存储中文

      • > drop database 数据库名称;           //删除数据库

      2、表

      • use 数据库;  //切换数据库
      • show tables; //查看所有表
      • desc 表名      //查看表结构
      • 创建表        

      • drop table 表名     //删除表

      1. 数据类型(常用)
      • 数值型
      类型存储大小有效数字 / 范围适用场景精度损失
      整数类型
      TINYINT1 字节范围:-128 ~ 127(有符号);0 ~ 255(无符号)小范围整数
      SMALLINT2 字节范围:-32768 ~ 32767(有符号)中等范围整数(如班级人数)
      INT4 字节范围:-2^31 ~ 2^31-1常用整数(用户 ID、年龄)
      BIGINT8 字节范围:-2^63 ~ 2^63-1超大整数(订单号、海量数据 ID)
      浮点数 / 定点数
      FLOAT4 字节6-7 位有效数字,范围 ±3.4×10^38精度要求低的小数(如温度)
      DOUBLE8 字节15-17 位有效数字,范围 ±1.8×10^308较高精度的科学计算(如坐标)
      DECIMAL(M,D)可变(M+2 字节)

      M 为总位数(1-65)

      D 为小数位数(0-D)

      金额、汇率等需精确计算场景

      (如DECIMAL(10,2)表示最大 99999999.99)

      • 字符型
      类型存储特点最大长度限制适用场景
      VARCHAR(N)

      可变长度

      (按需分配空间)

      N 为字符数(最大 65535 字节,受行总长度限制)长度不固定的字符串(如姓名、地址)
      CHAR(N)

      固定长度

      占用 N 字符空间

      N 为字符数(最大 255)长度固定的字符串(如身份证号、手机号)
      TEXT

      长文本

      存储在独立空间

      最大 65535 字节(约 64KB)较长文本(如文章摘要、备注)
      LONGTEXT超长文本最大 4GB极长文本(如全文、日志)
      • 日期型
      类型格式示例范围适用场景
      DATE2025-8-181000-01-01 ~ 9999-12-31仅需日期(如出生日期)
      TIME11:11:11-838:59:59 ~ 838:59:59仅需时间(如上下班时间)
      DATETIME

      2025-8-18

      11:11:11

      1000-01-01 00:00:00 ~ 9999-12-31 23:59:59日期 + 时间(如订单创建时间)
      • 其他
      类型特点与取值适用场景
      BOOLEAN等价于TINTINT(1) TRUE,FALSE=0逻辑判断(如是否启用:1 = 是,0 = 否)
      ENUM枚举值(如ENUM('男','女','沃尔玛购物袋'))固定可选值的场景(如性别、状态)
      SET多选项(如SET('钢琴','长笛','竖琴'))多选场景(如用户兴趣标签)
      2. 常用属性 / 约束(字段级)

      约束 / 属性

      作用说明

      示例

      NOT NULL

      字段值不能为NULL(强制必填)

      name VARCHAR(50) NOT NULL(姓名必须填写)

      PRIMARY KEY

      设为主键(唯一标识一条记录,自带NOT NULL属性,一个表只能有一个主键)

      id INT PRIMARY KEY(用 id 唯一标识用户)

      AUTO_INCREMENT

      数值自动递增(仅用于整数类型,配合主键使用,避免手动插入重复值)

      id INT PRIMARY KEY AUTO_INCREMENT(每次新增记录 id 自动 + 1)

      DEFAULT 值

      未显式插入值时,自动填充默认值

      status TINYINT DEFAULT 0(状态默认值为 0,代表 “未激活”)

      UNIQUE

      字段值唯一(允许NULL,但非NULL值不能重复,可用于唯一标识非主键字段)

      email VARCHAR(100) UNIQUE(邮箱地址不能重复)

      COMMENT ' 说明'

      字段注释(用于说明字段含义,方便后期维护和协作)

      age INT COMMENT '用户年龄(0-150岁)'

      CHECK (条件)

      限制字段值必须满足指定条件(MySQL 8.0 + 支持,确保数据合法性)

      age INT CHECK (age > 0 AND age <= 150)(年龄必须在 1-150 之间)

      FOREIGN KEY

      关联其他表的主键(字段级外键)

      class_id INT REFERENCES classes(class_id)(关联班级表的 class_id)

      UNSIGNED

      仅用于整数类型,限制字段值为非负数

      score INT UNSIGNED(分数不能为负)

      ZEROFILL

      整数类型专用,不足位数时用 0 填充

      order_no INT(6) ZEROFILL(订单号不足 6 位时补 0,如 “000123”)

      3. 表级约束(多字段关联)
      • 复合主键:多个字段组合唯一标识记录
        PRIMARY KEY (字段1, 字段2)
      • 外键关联:关联其他表的主键
        FOREIGN KEY (字段) REFERENCES 主表名(主表字段)
      4. 表选项(常用)
      • ENGINE = 存储引擎:如InnoDB(支持事务)、MyISAM(查询快)
      • CHARSET = 字符集:如utf8mb4(支持中文和 emoji)

      (三)连接图形化工具

      点击变绿就是可以正常使用了。

      1、新建库

      2、新建表

      3、新建字段

      4、外键使用

      5、新建记录

      6、查询添加


      待补充

      http://www.dtcms.com/a/337199.html

      相关文章:

    • 大数据计算引擎(三)——Elasticsearch入门
    • uart串口 day57
    • 产品经理如何提升职场学习能力?破除成长瓶颈
    • Vue+Flask 电影协同推荐可视化平台 前后端分离 大数据分析
    • Windows从零到一安装KingbaseES数据库及使用ksql工具连接全指南
    • 05.用户和组管理命令
    • 【机器学习】FPR(False Positive Rate,误报率)是什么?
    • Zephyr下ESP32S3开发环境搭建(Linux篇)
    • 深度研究系统、方法与应用的综述
    • Transformer架构的编码器和解码器介绍
    • 管理本地用户和组:红帽企业 Linux 系统安全的基础
    • TDengine `count_window` 指定列计数功能用户手册
    • 数据泵实施VPS海外:跨国数据同步的完整解决方案
    • elasticsearch-集成prometheus监控(k8s)
    • 【iOS】锁的原理
    • Flutter 多功能列表项:图标、文字与Switch组合
    • Highcharts for Flutter 正式发布
    • 云原生俱乐部-docker知识点归纳(1)
    • MySQL的多版本并发控制(MVCC):
    • 【Java基础常见辨析】重载与重写,深拷贝与浅拷贝,抽象类与普通类
    • 基于 JSP+Mysql实现MVC房屋租赁系统
    • Word 中 MathType 公式编号问题与解决
    • 自定义table
    • SpringBoot--Spring MVC 拦截器注入与 new 的区别
    • OSCP - Proving Grounds - Vanity
    • 分布式系统的“不可能三角”:CAP定理深度解析
    • 【数据结构】堆中插入数据,删除数据
    • Android Handler 线程执行机制
    • python遇到异常流程
    • 【Langchain系列二】LangChain+Prompt +LLM智能问答入门