查看和修改MySQL数据库参数
MySQL依赖大量的参数来控制SQL的处理执行过程。mysql.cnf文件是mysql默认的参数配置文件,mysql启动时会优先在一些特定位置寻找并读取该文件。my.cnf不存在时并不会影响MySQL实例的初始化启动,参数值取决于编译MySQL时指定默认值和源代码中指定参数的默认值。
一、MySQL参数的分类
MySQL参数可以分为静态(static)参数和动态(dynamic)参数,区别在于参数值是否可以在实例的生命周期内修改并生效。
1、静态参数
静态参数在数据库启动期间不能被修改。静态参数设置之后必须要重启才能生效。比如:log_slave_updates,back_log,log_bin,lower_case_table_names。对于静态参数,没有global级和session级区分。
2、动态参数
动态参数在数据库启动期间能被修改,动态参数又分为两种:global级,session级。session作用域修改后不影响其他已经开启和之后开启的session。global作用域参数值修改后,修改前已经开启的session不会生效,会在新创建的session中生效。
二、MySQL参数查看
以wait_timeout参数为例:
1、global级参数的查看
方法一:
mysql> select @@global.wait_timeout;
+-----------------------+
| @@global.wait_timeout |
+-----------------------+
| 28800 |
+-----------------------+
1 row in set (0.00 sec)
方法二:
mysql> show global variables like '%wait_timeout%';
+--------------------------+----------+
| Variable_name | Value |
+--------------------------+----------+
| innodb_lock_wait_timeout | 50 |
| lock_wait_timeout | 31536000 |
| wait_timeout | 28800 |
+--------------------------+----------+
3 rows in set (0.01 sec)
方法三:
mysql> select * from performance_schema.global_variables where variable_name ='wait_timeout';
+---------------+----------------+
| VARIABLE_NAME | VARIABLE_VALUE |
+---------------+----------------+
| wait_timeout | 28800 |
+---------------+----------------+
1 row in set (0.00 sec)
mysql> select * from performance_schema.global_variables where variable_name like '%wait_timeout%';
+--------------------------+----------------+
| VARIABLE_NAME | VARIABLE_VALUE |
+--------------------------+----------------+
| innodb_lock_wait_timeout | 50 |
| lock_wait_timeout | 31536000 |
| wait_timeout | 28800 |
+--------------------------+----------------+
3 rows in set (0.01 sec)
2、session级参数的查看
方法一:
mysql> select @@wait_timeout;
+----------------+
| @@wait_timeout |
+----------------+
| 28800 |
+----------------+
1 row in set (0.00 sec)
方法二:
mysql> select @@session.wait_timeout;
+------------------------+
| @@session.wait_timeout |
+------------------------+
| 28800 |
+------------------------+
1 row in set (0.00 sec)
方法三:
mysql> show variables like '%wait_timeout%';
+--------------------------+----------+
| Variable_name | Value |
+--------------------------+----------+
| innodb_lock_wait_timeout | 50 |
| lock_wait_timeout | 31536000 |
| wait_timeout | 28800 |
+--------------------------+----------+
3 rows in set (0.00 sec)
方法四:
mysql> show session variables like '%wait_timeout%';
+--------------------------+----------+
| Variable_name | Value |
+--------------------------+----------+
| innodb_lock_wait_timeout | 50 |
| lock_wait_timeout | 31536000 |
| wait_timeout | 28800 |
+--------------------------+----------+
3 rows in set (0.00 sec)
方法五:
mysql> select * from performance_schema.session_variables where variable_name like '%wait_timeout%';
+--------------------------+----------------+
| VARIABLE_NAME | VARIABLE_VALUE |
+--------------------------+----------------+
| innodb_lock_wait_timeout | 50 |
| lock_wait_timeout | 31536000 |
| wait_timeout | 28800 |
+--------------------------+----------------+
3 rows in set (0.00 sec)
三、MySQL参数修改
1、session级参数的修改
方法一:
mysql> set wait_timeout=10;
Query OK, 0 rows affected (0.00 sec)
方法二:
mysql> set session wait_timeout=10;
Query OK, 0 rows affected (0.00 sec)
方法三:
mysql> set @@wait_timeout=10;
Query OK, 0 rows affected (0.00 sec)
方法四:
mysql> set @@session.wait_timeout=10;
Query OK, 0 rows affected (0.00 sec)
2、global级参数的修改
方法一:
mysql> set global wait_timeout=10;
Query OK, 0 rows affected (0.00 sec)
方法二:
mysql> set @@global.wait_timeout=10;
Query OK, 0 rows affected (0.00 sec)
四、将参数值设置为MySQL的默认值
1、session级参数
mysql> set wait_timeout=DEFAULT;
Query OK, 0 rows affected (0.00 sec)
2、global级参数
mysql> set global wait_timeout=DEFAULT;
Query OK, 0 rows affected (0.00 sec)
五、静态参数的修改以及使动态参数永久生效
如果需要使动态参数的设置永久生效,必须修改参数文件并重启MySQL生效。而静态参数只能通过修改参数文件使之生效。比如:
# vi /etc/my.cnf
[mysqld]
wait_timeout=10