查看和修改MySQL数据库参数

    技术2022-07-11  94

    查看和修改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
    Processed: 0.010, SQL: 9