一、参数文件概述
- 当MySQL实例启动时,数据库会先去读一个配置参数文件,用来寻找数据库的各种文件所在位置以及制定某些初始化参数
- 在默认情况下,MySQL实例会按照一定的顺序在指定的位置进行参数文件的读取,用户只需通过下面的命令来进行查看即可:
- 通过下图我们可以知道,MySQL在启动时读取配置文件的顺序是:/etc/my.cnf->/etc/mysql/my.cnf->/usr/etc/my.cnf->~/.my.cnf
mysql --help | grep my.cnf
参数文件有无对数据库启动的影响
- MySQL数据库参数文件的作用和Oracle数据库的参数文件及其类似,不同的是,Oracle实例在启动时若找不到参数文件,是不能进行装载的。MySQL稍微有所不同,MySQL实例可以不需要参数文件,这时所有的参数值取决于编译MySQL时指定的默认值和源代码中指定参数的默认值
- 但是,如果MySQL实例在默认的数据库目录下找不到mysql架构,则启动同样会失败,此时可能在错误日志文件中找到如下内容:
- MySQL的mysql架构中记录了访问该实例的权限,当找不到这个架构时,MySQL实例不会成功启动
- MySQL数据库的参数文件是以文本方式进行存储的
- Oracle数据库存在所谓的隐藏参数,以供Oracle“内部人士”使用,SQL Server也有类似的参数。但是MySQL没有这类参数。当然,也不需要隐藏参数
二、参数文件的格式
- 简答地说,可以把数据库参数看成一个键/值(key/value)对
- 例如:inoodb_buffer_pool_size=1G,那么“inoodb_buffer_pool_size”就是键,“1G”就是值
三、查看参数
通过命令
- 可以通过命令“show variables”查看数据库中的所有参数。当然也可以通过like过滤参数名
- 例如下面查看“innodb_buffer_pool_size”参数
show variables like 'innodb_buffer_pool_size'\G;
通过表格
- 从MySQL 5.1开始,可以通过查看information_schema架构下的global_variables视图来进行查找
-
select * from information_schema.global_variables
-
where variable_name like 'innodb_buffer_pool_size'\G;
四、参数类型
- MySQL数据库中的参数分为两类:
- 动态(dynamic)参数:动态参数意味着可以在MySQL实例运行中进行更改
- 静态(static)参数:静态参数在整个实例声明周期内都不得进行更改(只读)
动态参数
- 参数类别:
- 有些参数值只可以在当前会话中生效,如autocommit
- 有些参数可以在整个实例声明周期中生效,如binlog_cache_size
- 有些参数既可以在会话中也可以在整个实例的生命周期内生效,如read_buffer_size
- 动态参数可以通过set命令进行修改:
- global:参数的修改是基于当前会话
- session:参数的修改是基于整个实例的生命周期
- 演示案例:例如下面使用set命令修改当前会话的“read_buffer_size”参数值,可以看到当前会话的参数修改了,但是全局参数依然没有变化
- 用户也可以通过“set @@global|@@session”来修改当前会话/整个实例的参数。例如下面演示与上面类似的案例
- 备注:set命令修改的参数仅在本次MySQL服务中有效,当MySQL重启之后,参数值恢复为原先的模样。如果想永久的改变参数值,应该去修改MySQL的配置文件
静态参数