MySQL参数

MySQL在启动的时候会去加载初始化一系列的参数文件,这些参数动态的决定了MySQL运行时的特性。MySQL中的参数是由一个个键值对(key-value)组成的,可以分为以下两类:

  • 动态参数:可以在MySQL实例运行时改变其value的值。
  • 静态参数:只能在MySQL实例启动的时候进行初始化,运行期间其value是只读的,不可改变。

MySQL实例在启动的时候是按照一定的顺序去读取这一系列参数文件的,Linux模式下,我们通过以下的命令去查看这些配置文件以及他们读取的先后顺序


这些文件可能在你的环境中不会存在,但是这并不影响MySQL实例的启动,若有则读之,若没有则自动忽略,倘若这些配置文件都不存在,MySQL还是可以正常的启动,因为它会读取编译时代码中的初始值进行初始化,需要注意的是这些文件中后面的配置文件会覆盖前面的配置文件中key相同项的value。


查看MySQL实例的参数

除了可以在配置文件中查看到已经定义了的变量值,在MySQL命令行下,我们可以通过show variables命令查看相关的参数文件。

比如,我们查看MySQL的error.log文件位置,可以通过下面的方式


查看MySQL数据文件的地址


修改配置文件

我们可以在参数文件中修改那些静态参数,可以在MySQL命令行使用SET命令在运行时修改动态参数。MySQL参数的作用域分为会话级参数(session)全局参数(global),在参数文件中修改的静态参数是对所有的会话都生效的,使用SET命令在运行时设置的参数是可以分为会话级和全局级的,有的参数只能是会话级,比如autocommit参数,有些则只能是全局级的,比如binlog_cache_size参数,而另外的一些则是既可以设置为会话级也可以设为全局级的,比如,read_buffer_size参数。

在配置文件中修改参数

[root@localhost etc]# vi /etc/my.cnf

# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html
# *** DO NOT EDIT THIS FILE. It's a template which will be copied to the
# *** default location during install, and will be replaced if you
# *** upgrade to a newer version of MySQL.

[mysqld]

# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M

# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin

# These are commonly set, remove the # and set as required.
# basedir = .....
# datadir = .....
# port = .....
# server_id = .....
# socket = .....

# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
#这里设置两个静态参数
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

innodb_purge_threads=2

在运行时修改动态参数( 注意下面这个有趣的列子)

mysql> show variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit    | ON    |
+---------------+-------+
1 row in set (0.00 sec)

mysql> set global autocommit=0;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit    | ON    |
+---------------+-------+
1 row in set (0.00 sec)

mysql> set session autocommit=0;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit    | OFF   |
+---------------+-------+
1 row in set (0.00 sec)

因为autocommit参数只是会话级的,所以当强制把它设置为全局有效时,语句可以正常的执行但是autocommit的值并不会改变,当使用session级别时,方可设置生效,当然,当不加session或global的时候,默认是session。但是,对于那些即可设置全局生效,有可设置当前会话生效的参数,不加域限制,默认只在当前会话生效,比如,下面的例子

mysql> select @@session.read_buffer_size\G
*************************** 1. row ***************************
@@session.read_buffer_size: 131072
1 row in set (0.15 sec)

mysql> select @@global.read_buffer_size\G
*************************** 1. row ***************************
@@global.read_buffer_size: 131072
1 row in set (0.00 sec)

mysql> set read_buffer_size=524288;
Query OK, 0 rows affected (0.02 sec)

mysql> select @@session.read_buffer_size\G
*************************** 1. row ***************************
@@session.read_buffer_size: 524288
1 row in set (0.00 sec)

mysql> select @@global.read_buffer_size\G
*************************** 1. row ***************************
@@global.read_buffer_size: 131072
1 row in set (0.00 sec)

这里使用了 select @@session 和 select @@global方式进行查看会话参数和全局参数,同样可以使用set @@global和set @@session进行设置全局和会话参数。

如果在运行期间改变静态参数会直接报错,因为它们是只读的。

mysql> set @@global.datadir='/root/mysql';
ERROR 1238 (HY000): Variable 'datadir' is a read only variable


你可能感兴趣的:(数据库)