您的位置:首页 > 数据库 > MySQL

MySQL服务器命令选项和系统变量

2016-11-27 14:36 211 查看

1. 配置MySQL服务器

    MySQL的服务器是mysqld,在服务器启动时,可以设置许多命令选项和系统变量,来配置服务器的运行。可以使用下面的命令来查看服务器使用的命令选项和系统变量。
➜  ~ mysqld --verbose --help
    这个命令列出了mysqld的所有选项和可配置的系统变量,以及它们的默认值,部分结果如下:



    如果要查看当前运行的服务器使用的某个系统变量的值,可以连接到服务器,并使用show variable; 命令:
    比如:查看当前运行服务器的统计数据和状态指示,可以使用show status; 命令:



    关于命令选项、系统变量、状态变量更详细的介绍,会在后面的文章中介绍。
    更详细的监控信息,可以在mysql的性能模式中查看。
    MySQL使用可扩展的算法,所以可以使用较小的内存来启动服务器,当然内存越大,性能会越好。
    当要调整MySQL服务器的时候,最需要调整两个配置就是key_buffer_size和table_open_cache,在尝试修改其他配置变量前,应该确保这个变量已经设置了合适的值,后面会具体较少这两个变量的含义;
    通常不同的运行配置,需要不同的变量值;

2. 服务器选项和变量参考

    参考:http://dev.mysql.com/doc/refman/5.7/en/mysqld-option-tables.html
    该链接中有个表格,列出了mysqld支持的所有选项和变量,部分截图如下:



其中:
    Name:选项或变量名;
    Cmd-Line:是否支持命令行选项;
    Option File:是否可以在配置文件中配置;
    System Var:是否是系统变量;
    Status Var:是否是状态变量;
    Var Scope:变量的作用域global,session,both;
    Dynamic:是否是动态的;

3. 服务器命令选项

    参考:http://dev.mysql.com/doc/refman/5.7/en/server-options.html

    上文过,可以使提到过,用mysqld --verbose --help可以查看所有的命令选项,其中比较常用的服务器选项,有以下几类:
(1)与安全相关的选项;
(2)SSL相关的选项;
(3)二进制日志控制选项;
(4)复制相关的选项;
(5)加载插件的选项;
(6)针对特定存储引擎的选项;
     对于一些控制缓冲区或高速缓存大小的选项,是依赖平台的:有的时候实际分配的值会小于你设定的;有的时候会大于你设置的(比如服务器设置最小为1024,而你设置为0)。所有的数值大小都是以byte为单位,除非指定单位。

    对于一些参数值为路径的参数,要注意是绝对路径还是相对路径,如果是相对路径,则是相对于数据库的安装目录;
    在服务器启动的时候,还可以把系统变量作为选项使用,形如:--varname=var_value;
    如果要在服务器运行期间,限制系统变量的最大值,可以使用SET语句,如:
--maximum-var_name
=
value
 

4. 服务器系统变量

    MySQL的系统变量说明了MySQL是如何配置的,每个变量都有默认值,系统变量可以在启动时在命令行设置,也可以在选项文件中设置。大多数系统变量可以在服务器运行时,使用SET语句动态地修改,而不需要重启服务器。设置全局系统变量需要super权限,部分系统变量设置session级别的,也需要super权限。可以在表达式中使用系统变量。
    使用示例:
        (1)设置最大值,启动选项 --maxmum-var_name=value;
                 如:--maxmum-query_cache_size=32M;
        (2)设置全局变量,在变量名称前加global 或@@global.qualifier,为了使全局变量永久生效,最好写入配置文件;
mysql> show variables like 'max_connections';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 151   |
+-----------------+-------+
1 row in set (0.00 sec)

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

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

mysql> set @@global.max_connections=2000;
Query OK, 0 rows affected (0.00 sec)

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

mysql>

        (2)设置session变量,在变量名称前加session或@@session.qualifier或@@qualifier
mysql> show variables like 'sql_mode';
+---------------+-------------------------------------------------------------------------------------------------------------------------------------------+
| Variable_name | Value                                                                                                                                     |
+---------------+-------------------------------------------------------------------------------------------------------------------------------------------+
| sql_mode      | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+---------------+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> set SESSION sql_mode='TRADITIONAL';
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'sql_mode';
+---------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
| Variable_name | Value                                                                                                                                                |
+---------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
| sql_mode      | STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+---------------+---------------------------------------------------------------------------------------------------------------------------------
b1ea
---------------------+
1 row in set (0.00 sec)

mysql> set @@session.sql_mode='TRADITIONAL';
Query OK, 0 rows affected (0.01 sec)

mysql> set @@sql_mode='TRADITIONAL';
Query OK, 0 rows affected (0.00 sec)

mysql>

        

       (3)查看某个变量的值,可以使用show variables like 'cha%'
SHOW VARIABLES LIKE 'max_join_size';
SHOW SESSION VARIABLES LIKE 'max_join_size';


       (4)对于一个变量,没有指定global或session时,返回session的值;

       (5)如果要移除一个和global变量有相同名称的session变量,且这个客户端连接有super权限时,就会把全局变量也改掉;同样地,如果增加了一个和global变量名称一样的session变量,当客户端想要修改全局变量时,也会修改自己的局部变量。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐