MySQL参数文件介绍
MySQL实例启动时候,数据库会先去读取一个参数配置文件,用来寻找数据库的各种文件所在位置以及指定的某些初始化参数,这些参数通常指定内存大小等。默认情况下MySQL数据库实例会按照一定的顺序在指定的位置读取。通过如下命令可以查找:
Linux下:
[root@RHEL6 ~]# mysql --help | grep my.cnf
order of preference, my.cnf, $MYSQL_TCP_PORT, built-in
/etc/my.cnf /etc/mysql/my.cnf /data/mysql56/config/my.cnf ~/.my.cnf
windows下:
C:\>mysql --help |findstr "my.ini"
C:\Windows\my.ini C:\Windows\my.cnf C:\my.ini C:\my.cnf C:\MySQL\mysql5.6.24\my.ini C:\MySQL\mysql5.6.24\my.cnf
MySQL实例可以不需要参数文件启动,这时所有的参数值取决于编译MySQL时指定的默认值和源代码中指定参数的默认值即若没有配置文件则会使用编译时默认的参数设置启动数据库实例。但是MySQL实例在默认的数据库目录下找不到
mysql schema则会启动失败,此时会在错误日志文件中有记录。
MySQL的参数文件是以文本方式存储的,用户可以直接通过一些常用的文本编辑器软件进行修改的。
[root@RHEL6 ~]# file /data/mysql56/config/my.cnf
/data/mysql56/config/my.cnf: ASCII C++ program text
这里显示为ASCII text文件。
在Linux系统下MySQL数据库实例启动时候会按照如下顺序依次查找配置文件的。
/etc/my.cnf /etc/mysql/my.cnf /data/mysql56/config/my.cnf ~/.my.cnf
所有的配置都以最后一个配置文件中的参数为准。
MySQL的参数:
简单来说MySQL的参数文件可以看成键值对(Key/Value).对于InnoDB存储引擎重要的参数innodb_buffer_pool_size 即为键,值为赋予的值。
参数的查看有3种方式:
1.通过查看参数文件:
[root@RHEL6 ~]# cat /data/mysql56/config/my.cnf | grep -i innodb_buffer_pool
innodb_buffer_pool_size = 128M
2.使用命令查看:
mysql> show variables like 'innodb_buffer_pool%';
+-------------------------------------+----------------+
| Variable_name | Value |
+-------------------------------------+----------------+
| innodb_buffer_pool_dump_at_shutdown | OFF |
| innodb_buffer_pool_dump_now | OFF |
| innodb_buffer_pool_filename | ib_buffer_pool |
| innodb_buffer_pool_instances | 8 |
| innodb_buffer_pool_load_abort | OFF |
| innodb_buffer_pool_load_at_startup | OFF |
| innodb_buffer_pool_load_now | OFF |
| innodb_buffer_pool_size | 134217728 |
+-------------------------------------+----------------+
8 rows in set (0.07 sec)
3.通过SQL语句查询:
mysql> select * from information_schema.global_variables where variable_name like 'innodb_buffer_pool%';
推荐使用命令 show variables 查询,因为此命令更为简单且各版本的MySQL数据库都支持。
参数类型:
MySQL数据库中的参数可以分为2类:
动态参数(dynamic) 和静态参数(static)
动态参数意味着可以在MySQL实例中进行动态修改,静态参数则在整个实例生命周期内是不可更改的。
对于动态参数可以使用set 命令来修改。
动态参数可以划分全局参数和会话参数。
全局参数 global关键字 表示该参数的修改在整个实例生命周期中都会生效的。
会话参数session是基于当前会话的,尽在当前会话中生效。
而有些参数既可以在会话中也可以在整个实例的生命周期中生效。如read_buffer_size
参数的设置和查看:
mysql> set read_buffer_size=524288;
Query OK, 0 rows affected (0.09 sec)
mysql> select @@session.read_buffer_size;
+----------------------------+
| @@session.read_buffer_size |
+----------------------------+
| 524288 |
+----------------------------+
1 row in set (0.00 sec)
mysql> select @@global.read_buffer_size;
+---------------------------+
| @@global.read_buffer_size |
+---------------------------+
| 2097152 |
+---------------------------+
1 row in set (0.00 sec)
对全局变量值的修改 仅在当次mysql实例生命周期内有效,但是MySQL实例本身的参数文件的值并没有修改,若实例重启后依然会读取参数文件。
若想永久保留该参数值则需要用户修改参数文件。
要知道MySQL所有动态变量的可修改范围 则需要参考MySQL官方手册中的Dynamic System Variables 相关的内容。