MySQL 是怎样运行的 - 01 - 初识 MySQL

启动 MySQL 服务器程序

UNIX

  1. mysqld
  2. mysqld_safe
  3. mysql.server
    1. mysql.server start
    2. mysql.server stop
  4. mysqld_multi

Windows

  1. mysqld
    1. mysqld --console
  2. 服务
    1. C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe" --install
    2. net start mysql
    3. net stop mysql

连接 MySQL

mysql -h 127.0.0.1 -P 3306 -u root -p
  

断开连接

  • exit
  • quit
  • \q

客户端与服务器链接的方式

  • TCP/IP
  • 命名管道 Named pipe
  • 共享内存 Shared memory
  • Unix 域套接字 UNIX Domain socket

服务器处理客户端请求

flowchart TD
    F@{ shape: lin-cyl, label: "MyISAM" }
    G@{ shape: lin-cyl, label: "InnoDB" }
    H@{ shape: lin-cyl, label: "Memory" }
    I@{ shape: lin-cyl, label: "..." }
    J@{ shape: processes, label: "文件系统" }
    subgraph "第一部分:连接管理"
    B
    end
    subgraph "第二部分:解析与优化"
    C
    D
    E
    end
    subgraph "第三部分:存储引擎"
    F
    G
    H
    I
    end

    A([客户端]) --> B[处理连接]
    B --> C[查询缓存]
    C --> D[语法解析]
    D --> E[查询优化]
    E --> F
    E --> G
    E --> H
    E --> I
    F --> J
    G --> J
    H --> J
    I --> J

查询缓存

MySQL 的缓存系统会监测涉及的每张表,如果表的结构或数据发生变化,缓存系统会自动失效。

MySQL 5.7.20 开始,不推荐使用查询缓存。MySQL 8.0 直接移除了查询缓存。

存储引擎

查询过程

  • server 层
  • 存储引擎层

server 层和存储引擎层交互时,一般是以记录为单位的。

缓冲区

以查询为例,查询语句会以记录为单位先将结果发送到到缓冲区,如果缓冲区满了,才会向客户端发送。

缓冲器的大小由系统变量 net_buffer_length 控制,默认大小为 16KB。

MySQL 常用的存储引擎

  • InnoDB
    • 事务支持
    • 外键支持
    • 行级锁
  • MyISAM
    • 不支持事务
    • 不支持外键
    • 表级锁
  • Memory
    • 所有数据都存储在内存中
    • 重启后数据丢失
    • 支持哈希索引

查看表的存储引擎

SHOW ENGINES;
  

设置表的存储引擎

CREATE TABLE t1 (
    id INT PRIMARY KEY,
    name VARCHAR(20)
) ENGINE = InnoDB;
  

修改表的存储引擎

ALTER TABLE t1 ENGINE = MyISAM;