diguage/mysql-notes

《MySQL 是怎样运行的》笔记

diguage opened this issue · 0 comments

== ch01

image

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

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

server 层在判断记录符合条件后,先将其发送到一个缓存区,待缓存区满之后,才向客户端发送真正的记录,可以通过 net_buffer_length 控制缓存区大小。

InNoDB 从 MySQL 5.5.5 开始作为 MySQL 的默认存储引擎。

-- 显示支持引擎类型
SHOW ENGINES;

-- 指定表的引擎类型
CREATE TABLE `engine_memory`
(
    `i` INT DEFAULT NULL
) ENGINE = MEMORY;

-- 修改引擎类型
ALTER TABLE engine_memory
    ENGINE = InnoDB;

== ch02

=== 启动选项

命令行指定时,等号两边不能有空格;配置文件中指定时,可以有空格。可以通过 mysqld --verbose --help 查看支持的启动选项。

[source]

[server]
default-storage-engine=InnoDB

配置文件分组支持:

  • mysqld
  • mysqld_safe
  • mysql.server
  • mysql
  • mysqladmin
  • mysqldump
  • server
  • client

前几个几乎都是指定到命令行程序,后两个是针对客户端程程序(mysqlmysqladmin, mysqldump)。另外,由于服务端启动,都是通过调用 mysqld 来启动数据库。所以,mysqld 的配置也会被其他两种启动方式继承。

还可以通过在分组后面加版本号的方式来给指定版本添加配置项:

[source]

[server-5.7]
default-storage-engine=InnoDB

=== 系统变量

[source,sql]

SHOW VARIABLES [LIKE <匹配模式>];

SHOW VARIABLES LIKE 'default%';

-- 设置系统变量
SET [GLOBAL|SESSION] 系统变量名 = 值;

SET [@@(GLOBAL|SESSION)] 系统变量名 = 值;
-- 不加 GLOBAL,默认作用范围就是 SESSION。

-- 查看指定范围的系统变量;不传 GLOBAL,则默认是 SESSION。
SHOW [GLOBAL|SESSION] VARIABLES [LIKE <匹配模式>];

在配置文件中,系统变量的单词之间必须用 _ 连接起来。大部分系统变量也是启动选项。

=== 状态变量

状态变量是用来显示服务器程序运行状态的。

[source,sql]

-- 查看状态变量;不传 GLOBAL,则默认是 SESSION。
SHOW [GLOBAL|SESSION] STATUS [LIKE <匹配模式>];

== ch03 字符集

[source,sql]

-- 查看支持的字符集
SHOW (CHARACTER SET|CHARSET) [LIKE <匹配模式>];

utf8mb4 从 MySQL 8.0 开始作为其默认字符集。

[source,sql]

-- 查看支持的排序规则
SHOW COLLATION [LIKE <匹配模式>];

. 字符集名称
. 应用语言
. 是否区分重音、大小写等