基本组成
MySQL通常三种安装方式,如下:
rpm安装,可以通过官网下载对应的rpm包,直接通过yum的方式来安装, 实际中使用比例不高, 因为yum安装的路径和配置难以定制化;
二进制安装, 可以再官网下载编辑软件包, 软件包解压就可以完成, 实现简单;
源码安装, 通过对指定的环境配置适用软件环境, 进行源码的编译安装, 对环境的依赖较高; 对于批量安装的方式耗时难以控制; 作为环境调试比较适用;
MySQL的基本构成可以参考下图
# mysqld --verbose --help |grep -A 1 'Default options'Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/local/Percona-Server-5.7.37-40-Linux.x86_64.glibc2.17/etc/my.cnf ~/.my.cnf配置读取
平时安装部署mysql时,启动mysqld程序时我们基本是--defaults-file选项来指定配置文件路径,不知道你是否尝试过不使用该选项,亦或者使用--defaults-extra-file选项,细细探究一下,或许你会有不一样的发现。
使用如下命令,可以查看mysqld启动时读取配置文件的路径:
mysqld --verbose --help |grep -A 1 'Default options'
# mysqld --verbose --help |grep -A 1 'Default options'Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/local/Percona-Server-5.7.37-40-Linux.x86_64.glibc2.17/etc/my.cnf ~/.my.cnf可以看到,mysqld启动时会到上述路径下查找配置文件,如果前一个文件找不到,则会寻找下一个文件,如果所有的路径都找不到,则会启动报错。另外,一般情况下,如果在使用mysqld启动时,多个配置文件中都设置了相同的启动选项,则以最后一个配置文件中的为准,配置文件读取的顺序如下:

如果一个启动选项同时出现在命令行中和配置文件中,则以命令行中为准,这个需要关注。
因此,如果在生产中发现某些启动选项不达你的预期,不妨看看是否在上述的这些路径下存在配置文件导致启动选项值被覆盖。
选项组
在mysql中,启动选项有数百个,而不同启动命令,例如mysqld,mysql等,在启动时会读取这数百个中的一部分选项,而一些选项需要根据实际情况进行配置,试想,在一堆启动选项中找某个启动选项,是不是很头疼。尤其是你对启动选项本身不熟悉的情况下,真的会很崩溃。对此,mysql提供了一个很人性化的方案,在配置项中可以根据作用域将不同的启动选项划分为不同的组,每个组用[组名]表示,后面跟具体的启动选项。例如:
[mysql]
no_auto_rehash
default_character_set =gb2312
[client]
default_character_set = utf8
配置组及作用的范围可以参考下图:

而实际启动命令时,往往不是只读取一个配置组的启动选项,而是读取多个配置组的启动选项。

当然,如果多个配置组有相同的启动选项,以最后一个出现的组中的启动选项为准。例如启动mysql程序时,以上面的为例,因为mysql可以访问[mysql],[client]组,而[client]组在[mysql]组后面,因此最后default_character_set的值以utf8为准。
变量相关
mysql服务器在运行过程中,会使用一些变量来控制程序行为或展示程序运行状态。而这些变量数量是较多的,都记住是不现实的,我们只需要根据一定的规则将不同变量划分开来即可,变量划分可以按照不同的规则,根据作用域划分,可以分为全局变量,会话变量。根据功能划分,可以分为系统变量和状态变量,如下:

先总结下按照作用域划分吧,mysql中按照变量作用范围可将变量划分为全局变量和会话变量。
全局变量,即GLOBAL变量,会影响服务器的整体操作。例如max_connection,表示服务器程序同时最多支持多少个客户端程序连接。可通过set golbal 变量名 = 值或set @@global.变量名 = 值方式设置。
会话变量,即session变量,也称为local变量,只影响当前客户端连接的操作,可通过set session 变量名 = 值,set 变量名 = 值或set @@session.变量名 = 值方式设置。
按照功能划分:mysql中按照变量功能可将变量划分为系统变量和状态变量。
系统变量,用来控制MySQL程序行为的变量,可以人工设置,大部分系统变量可以在程序运行时动态修改而无需停止服务器。一般来说,系统变量的值不会随程序运行变化,除非手动在线修改了系统变量的值。
状态变量,用来展示服务器运行状况的变量,不能人工设置,变量值随着服务器程序的运行情况动态变化。




