前端analysis | 3w & 1h

mysql学习笔记一

2022-08-09

导语

进程

  • 进程都有一个唯一的编号,称为进程ID,英文名叫PID,进程名称可以自定义

  • PID, 是与OS进行分配,并保证唯一性。那么OS分配算法是怎样的呢?

    1
    2
    //TODO 

常用的进程

  • mysqld - 会直接启动一个服务器进程
  • mysqld_safe - 提供一个针对mysqld进程的监控,把出错信息记录下来、重启进程, 同时也调用mysqld
  • mysqld.server - 调用mysql_safe, 通过start\stop 参数,启停服务
  • mysqld_multi - 可以启动多个服务器进程

把进程注册成随机启动

Windows

[mysqld绝对路径] –install [服务名称]

1
2
net start mysql
net stop mysql

Linux ??

Mac ??

Client 有哪些

mysqladminmysqldumpmysqlcheck

1
mysql -h主机名  -u用户名 -p密码

各个参数的意义如下:

参数名 含义
-h 表示服务器进程所在计算机的域名或者IP地址,如果服务器进程就运行在本机的话,可以省略这个参数,或者填localhost或者127.0.0.1。也可以写作 --host=主机名的形式。
-u 表示用户名。也可以写作 --user=用户名的形式。
-p 表示密码。也可以写作 --password=密码的形式。

进程和服务器进程的通信方式

TCP/IP

命名管道和共享内存

Unix域套接字文件

读写分离

INSERT、 UPDATEDELETETRUNCATE TABLEALTER TABLEDROP TABLE或 DROP DATABASE语句,那使用该表的所有高速缓存查询都将变为无效并从高速缓存中删除!那么就存在了读写分离机制,加速读取缓存有效性。

  • 虽然查询缓存有时可以提升系统性能,但也不得不因维护这块缓存而造成一些开销,比如每次都要去查询缓存中检索,查询请求处理完需要更新查询缓存,维护该查询缓存对应的内存区域。从MySQL 5.7.20开始,不推荐使用查询缓存,并在MySQL 8.0中删除。
  • 缓存要合理利用。

mysql语句执行

1.5.7.20之前版本先查缓存,

2.没有命中,对查询语句进行优化,

3.执行查询优化后的句子。

MySQL服务器把数据的存储和提取操作都封装到了一个叫存储引擎的模块里。人们把连接管理查询缓存语法解析查询优化这些并不涉及真实数据存储的功能划分为MySQL server的功能,把真实存取数据的功能划分为存储引擎的功能。各种不同的存储引擎向上边的MySQL server层提供统一的调用接口(也就是存储引擎API),包含了几十个底层函数,像”读取索引第一条内容”、”读取索引下一条内容”、”插入记录”等等。
所以在MySQL server完成了查询优化后,只需按照生成的执行计划调用底层存储引擎提供的API,获取到数据后返回给客户端就好了。

启动选项

启动时候,设置的参数配置, 选项名、=、选项值之间不可以有空白字符. 用短形式指定启动选项时,选项名和选项值之间可以没有间隙,或者用空白字符隔开。 只不过-p密码不能空白间隔。

network

禁止各客户端使用TCP/IP网络进行通信,可以在启动服务器程序的命令行里添加skip-networking启动选项 。 多个单词构成的,它们之间可以由短划线-连接起来,也可以使用下划线_连接起来,

1
2
mysqld --skip_networking
mysqld --skip-networking

default-storage-engine

1
mysqld --default-storage-engine=MyISAM

搜索路径

mysql启动会按照默认的搜索顺序进行找配置项;也可以指定特定的配置文件进行搜索,没有则报错

1
mysqld --defaults-file=/tmp/myconfig.txt
  • 搜索顺序进行覆盖
  • 同一个文件,在后面的覆盖签名的
  • 如果同一个启动选项既出现在命令行中,又出现在配置文件中,那么以命令行中的启动选项为准

系统变量

1
2
3
4
SHOW VARIABLES [LIKE 匹配的模式];
SHOW VARIABLES LIKE 'default_storage_engine';
SHOW VARIABLES like 'max_connections';
SHOW VARIABLES LIKE 'default%';

作用范围

设计MySQL的大叔提出了系统变量的作用范围的概念,具体来说作用范围分为这两种:

  • GLOBAL:全局变量,影响服务器的整体操作。
  • SESSION:会话变量,影响某个客户端连接的操作。
    1
    2
    语句一:SET GLOBAL default_storage_engine = MyISAM;
    语句二:SET @@GLOBAL.default_storage_engine = MyISAM;

如果只想对本客户端生效,也可以选择下边三条语句中的任意一条来进行设置:

1
2
3
语句一:SET SESSION default_storage_engine = MyISAM;
语句二:SET @@SESSION.default_storage_engine = MyISAM;
语句三:SET default_storage_engine = MyISAM;
1
2
SHOW SESSION VARIABLES LIKE 'default_storage_engine';
SHOW GLOBAL VARIABLES LIKE 'default_storage_engine';

状态变量

由于状态变量是用来显示服务器程序运行状况的,所以它们的值只能由服务器程序自己来设置,我们程序员是不能设置的。与系统变量类似,状态变量也有GLOBALSESSION两个作用范围的,所以查看状态变量的语句可以这么写

1
SHOW STATUS LIKE 'thread%';

存储引擎-InnoDB

默认以页(16k)为单位,进行磁盘和内存数据交换。
是以记录为单位来向表中插入数据的,这些记录在磁盘上的存放方式也被称为行格式或者记录格式。设计InnoDB存储引擎的大叔们到现在为止设计了4种不同类型的行格式,分别是CompactRedundantDynamicCompressed行格式

1
2
3
CREATE TABLE 表名 (列的信息) ROW_FORMAT=行格式名称 

ALTER TABLE 表名 ROW_FORMAT=行格式名称
使用支付宝打赏
使用微信打赏

若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏