MySQL依赖大量的参数来控制SQL的处理执行过程。mysql.cnf文件是mysql默认的参数配置文件,mysql启动时会优先在一些特定位置寻找并读取该文件。my.cnf不存在时并不会影响MySQL实例的初始化启动,参数值取决于编译MySQL时指定默认值和源代码中指定参数的默认值。
MySQL参数可以分为静态(static)参数和动态(dynamic)参数,区别在于参数值是否可以在实例的生命周期内修改并生效。
静态参数在数据库启动期间不能被修改。静态参数设置之后必须要重启才能生效。比如:log_slave_updates,back_log,log_bin,lower_case_table_names。对于静态参数,没有global级和session级区分。
动态参数在数据库启动期间能被修改,动态参数又分为两种:global级,session级。session作用域修改后不影响其他已经开启和之后开启的session。global作用域参数值修改后,修改前已经开启的session不会生效,会在新创建的session中生效。
以wait_timeout参数为例:
方法一:
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)方法一:
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> 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)方法一:
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生效。而静态参数只能通过修改参数文件使之生效。比如:
# vi /etc/my.cnf [mysqld] wait_timeout=10