mysql 学习 - 配置项
本篇已收录在 MySQL 是怎样运行的 学习笔记系列
本文介绍一些关于 mysql 的默认配置
启动服务器时的配置项
服务器允许同时连入的客户端的默认数量是
151
表的默认存储引擎是
InnoDB
, 切换其他的:mysqld --default-storage-engine=MyISAM
启动服务器程序的时候就禁止各客户端使用TCP/IP网络进行通信
mysqld --skip-networking
或者mysqld --skip_networking
一些命令行参数:
在Windows操作系统中,MySQL会按照下列路径来寻找配置文件:
%WINDIR%指的是你机器上Windows目录的位置,通常是C:\WINDOWS,如果你不确定,可以使用这个命令来查看:
echo %WINDIR%
BASEDIR指的是MySQL安装目录的路径,在我的Windows机器上的BASEDIR的值是:
C:\Program Files\MySQL\MySQL Server x.x
.mylogin.cnf
配置文件有点儿特殊,它不是一个纯文本文件 ,而是使用mysql_config_editor
实用程序创建的加密文件。文件中只能包含一些用于启动客户端软件时连接服务器的一些选项,包括host、user、password、port和 socket
。而且它只能被客户端程序所使用。
unix 操作系统的配置文件路径:
配置文件的大体结构如下图:
不同的服务器启动方式, 可以获取的配置组是不同的:
特定MySQL版本的专用选项组:
我们可以在选项组的名称后加上特定的MySQL版本号,比如对于[mysqld]选项组来说,我们可以定义一个[mysqld-5.7]的选项组,它的含义和[mysqld]一样,只不过只有版本号为5.7的mysqld程序才能使用这个选项组中的选项。
配置的优先级与冲突处理
配置文件的优先级:
不同的文件配置了相同的参数, 以最后一个文件为准. 顺序确定的方式就是上面图中的上下顺序
同一个配置文件的相同配置的优先级:
由于同一个配置文件中分组, 服务器启动时会加载几个组的配置信息, 发生冲突的配置按照后面的为准.
如果你不想那么多配置文件, 可以直接指定一个默认配置文件:
mysqld --defaults-file=/tmp/myconfig.txt
注意
defaults-extra-file
和defaults-file
的区别,使用defaults-extra-file
可以指定额外的配置文件搜索路径(也就是说那些固定的配置文件路径也会被搜索)
当命令行参数与配置文件的参数冲突时:
以命令行参数值为准
服务器运行时的配置: Global 与 Session
对于大部分系统变量来说,它们的值可以在服务器程序运行过程中进行动态修改而无需停止并重启服务器。不过系统变量有作用范围之分.
有一些系统变量并不是针对单个客户端的,比如允许同时连接到服务器的客户端数量max_connections,查询缓存的大小query_cache_size,这些公有的系统变量让某个客户端私有显然不合适
GLOBAL
:全局变量,影响服务器的整体操作
SESSION
:会话变量,影响某个客户端连接的操作。(注:SESSION有个别名叫LOCAL
)
在服务器启动时,会将每个全局变量初始化为其默认值(可以通过命令行或选项文件中指定的选项更改这些默认值)。然后服务器还为每个连接的客户端维护一组会话变量,客户端的会话变量在连接时使用相应全局变量的当前值初始化。
服务器程序运行期间通过客户端程序设置系统变量方式:
SET [GLOBAL|SESSION] var_name = xxx;
或者SET [@@(GLOBAL|SESSION).]var_name = XXX;
比如:
SET GLOBAL default_storage_engine = MyISAM;
或者SET SESSION default_storage_engine = MyISAM;
查询变量值的时候, 显示的值的默认范围是
session
, 当然是可以调的,SHOW [GLOBAL|SESSION] VARIABLES [LIKE 匹配的模式];
如果某个客户端改变了某个系统变量在
GLOBAL
作用范围的值,并不会影响该系统变量在当前已经连接的客户端作用范围为SESSION
的值,只会影响后续连入的客户端在作用范围为SESSION
的值。
并不是所有系统变量都具有GLOBAL和SESSION的作用范围。
有些系统变量是只读的,并不能设置值。
服务器的状态变量:Global,Session
用于显示服务器当前的一些状态值. 也是有范围域的划分的.