【Mysql】了解Mysql中的启动参数和系统变量
一、启动参数
在程序启动时指定的设置项也称之为启动选项(startup options),这些选项控制着程序启动后的行为。
1)在命令行上使用选项
启动服务器程序的命令行后边指定启动选项的通用格式就是这样的:
--启动选项1[=值1] --启动选项2[=值2] ... --启动选项n[=值n]
比如:mysqld --default-storage-engine = MyISAM
2)配置文件中使用选项
在类UNIX操作系统中,MySQL会按照下列路径来寻找配置文件
/etc/my.cnf
/etc/mysql/my.cnf
SYSCONFDIR/my.cnf
$MYSQL_HOME/my.cnf 特定于服务器的选项(仅限服务器)
defaults-extra-file 命令行指定的额外配置文件路径
~/.my.cnf 用户特定选项
~/.mylogin.cnf 用户特定的登录路径选项(仅限客户端)
配置文件的内容
与在命令行中指定启动选项不同的是,配置文件中的启动选项被划分为若干个组,每个组有一个组名,用中括号[]扩起来,像这样:
[server]
(具体的启动选项...) [mysqld]
(具体的启动选项...) [mysqld_safe]
(具体的启动选项...) [client]
(具体的启动选项...) [mysql]
(具体的启动选项...) [mysqladmin]
(具体的启动选项...)
像这个配置文件里就定义了许多个组,组名分别是server、mysqld、mysqld_safe、client、mysql、mysqladmin。每个组下边可以定义若干个启动选项,我们以[server]组为例来看一下填写启动选项的形式(其他组中启动选项的形式是一样的):
[server]
option1 #这是option1,该选项不需要选项值
option2 = value2 #这是option2,该选项需要选项值
...
的语法类似于命令行语法,但是配置文件中只能使用长形式的选项。在配置文件中指定的启动选项不允许加--前缀,并且每行只指定一个选项,而且=周围可以有空白字符(命令行中选项名、=、选项值之间不允许有空白字符)。另外,在配置文件中,我们可以使用#来添加注释,从#出现直到行尾的内容都属于注释内容,读取配置文件时会忽略这些注释内容。为了大家更容易对比启动选项在命令行和配置文件中指定的区别,我们再把命令行中指定option1和option2两个选项的格式写一遍看看:
--option1 --option2=value2
注意`defaults-extra-file`和`defaults-file`的区别,使用`defaults-extra-file`可以指定额外的配置文件搜索路径(也就是说那些固定的配置文件路径也会被搜索)
二、系统变量
MySQL服务器程序运行过程中会用到许多影响程序行为的变量,它们被称为MySQL系统变量
1)查看系统变量
我们可以使用下列命令查看MySQL服务器程序支持的系统变量以及它们的当前值:
SHOW VARIABLES [LIKE 匹配的模式];
由于系统变量实在太多了,如果我们直接使用SHOW VARIABLES查看的话就太多了,所以通常都会带一个LIKE过滤条件来查看我们需要的系统变量的值,比方说这么写:
mysql> SHOW VARIABLES LIKE 'default_storage_engine';
mysql> SHOW VARIABLES like 'max_connections';
2)设置系统变量
1、通过启动选项设置
1.通过命令行添加启动选项。
比方说我们在启动服务器程序时用这个命令:
mysqld --default-storage-engine=MyISAM --max-connections=10
2.通过配置文件添加启动选项
我们可以这样填写配置文件:
[server]
default-storage-engine=MyISAM
max-connections=10
2、服务器程序运行过程中设置
系统变量比较强的一点就是,对于大部分系统变量来说,它们的值可以在服务器程序运行过程中进行动态修改而无需停止并重启服务器
系统变量的作用范围的概念,具体来说作用范围分为这两种:
GLOBAL:全局变量,影响服务器的整体操作。
SESSION:会话变量,影响某个客户端连接的操作。(注:SESSION有个别名叫LOCAL)
以default_storage_engine举例,在服务器启动时会初始化一个名为default_storage_engine,作用范围为GLOBAL的系统变量。之后每当有一个客户端连接到该服务器时,服务器都会单独为该客户端分配一个名为default_storage_engine,作用范围为SESSION的系统变量,该作用范围为SESSION的系统变量值按照当前作用范围为GLOBAL的同名系统变量值进行初始化。
1.在服务器程序运行期间通过客户端程序设置系统变量的语法:
SET [GLOBAL|SESSION] 系统变量名 = 值;
或者写成这样也行:
SET [@@(GLOBAL|SESSION).]var_name = XXX;
比如我们想在服务器运行过程中把作用范围为GLOBAL的系统变量default_storage_engine的值修改为MyISAM,也就是想让之后新连接到服务器的客户端都用MyISAM作为默认的存储引擎,那我们可以选择下边两条语句中的任意一条来进行设置:
语句一:SET GLOBAL default_storage_engine = MyISAM;
语句二:SET @@GLOBAL.default_storage_engine = MyISAM;
如果只想对本客户端生效,也可以选择下边三条语句中的任意一条来进行设置:
语句一:SET SESSION default_storage_engine = MyISAM;
语句二:SET @@SESSION.default_storage_engine = MyISAM;
语句三:SET default_storage_engine = MyISAM;
从上边的语句三也可以看出,如果在设置系统变量的语句中省略了作用范围,默认的作用范围就是SESSION。也就是说SET 系统变量名 = 值和SET SESSION 系统变量名 = 值是等价的。
2.查看不同作用范围的系统变量
既然系统变量有作用范围之分,那我们的SHOW VARIABLES语句查看的是什么作用范围的系统变量呢?
答:默认查看的是SESSION作用范围的系统变量。
当然我们也可以在查看系统变量的语句上加上要查看哪个作用范围的系统变量,就像这样:
SHOW [GLOBAL|SESSION] VARIABLES [LIKE 匹配的模式];
下边我们演示一下完整的设置并查看系统变量的过程:
mysql> SHOW SESSION VARIABLES LIKE 'default_storage_engine';
mysql> SHOW GLOBAL VARIABLES LIKE 'default_storage_engine';
mysql> SET SESSION default_storage_engine = MyISAM;
mysql> SHOW SESSION VARIABLES LIKE 'default_storage_engine';
mysql> SHOW GLOBAL VARIABLES LIKE 'default_storage_engine';
如果某个客户端改变了某个系统变量在`GLOBAL`作用范围的值,并不会影响该系统变量在当前已经连接的客户端作用范围为`SESSION`的值,只会影响后续连入的客户端在作用范围为`SESSION`的值。
并不是所有系统变量都具有GLOBAL和SESSION的作用范围。比方说max_connections,只具有GLOBAL作用范围。比如default_storage_engine既具有GLOBAL作用范围,也具有SESSION作用范围。
有些系统变量是只读的,并不能设置值。比方说version,表示当前MySQL的版本,我们客户端是不能设置它的值的,只能在SHOW VARIABLES语句里查看。
三、启动选项和系统变量的区别
启动选项是在程序启动时我们程序员传递的一些参数,而系统变量是影响服务器程序运行行为的变量,它们之间的关系如下:
大部分的系统变量都可以被当作启动选项传入。
有些系统变量是在程序运行过程中自动生成的,是不可以当作启动选项来设置,比如auto_increment_offset、character_set_client啥的。
有些启动选项也不是系统变量,比如defaults-file。
四、状态变量
MySQL服务器程序中维护了好多关于程序运行状态的变量,它们被称为状态变量。比方说Threads_connected表示当前有多少客户端与服务器建立了连接,Handler_update表示已经更新了多少行记录
由于状态变量是用来显示服务器程序运行状况的,所以它们的值只能由服务器程序自己来设置,我们程序员是不能设置的。与系统变量类似,状态变量也有GLOBAL和SESSION两个作用范围的,所以查看状态变量的语句可以这么写:
SHOW [GLOBAL|SESSION] STATUS [LIKE 匹配的模式];
类似的,如果我们不写明作用范围,默认的作用范围是SESSION,比方说这样:
mysql> SHOW STATUS LIKE 'thread%';
所有以Thread开头的SESSION作用范围的状态变量就都被展示出来了。
【Mysql】了解Mysql中的启动参数和系统变量的更多相关文章
- MySQL的启动选项和系统变量该如何配置?
MySQL的配置信息可以通过两种方式实现,一种是命令行形式,在启动MySQL服务时后边带上相关配置参数,此种方式会在MySQL重启后失效.另外一种是通过写入配置文件,如my.cnf,启动或者重启MyS ...
- 第三节:MySQL的调控按钮——启动选项和系统变量
一.命令行上使用启动选项 启动选项的通用格式 --启动选项1[=值1] --启动选项2[=值2] ... --启动选项n[=值n] 禁止TCP/IP链接 略 修改MySQL服务的默认存储引 ...
- 深入理解mysql-进阶知识点,启动项、系统变量、字符集介绍!
mysql数据库是当前应用最为的广泛的数据库,在实际工作中也经常接触到.真正用好mysql也不仅仅是会写sql就行,更重要的是真正理解其内部的工作原理.本文先从宏观角度介绍一些mysql相关的知识点, ...
- cad快捷图标中的启动参数
!!!转载 http://blog.sina.com.cn//s/blog_6848608101017v4w.html 有时候需要判断一下是否是硬件加速.Ribbon等原因造成了软件的问题,需要在 ...
- WPF 中对启动参数的处理
/// <summary> /// Interaction logic for App.xaml /// </summary> public partial ...
- Mysql(Mariadb)之SET语法分析以及系统变量和用户变量分析(英文&中文)(转载)
SET Syntax SET variable_assignment [, variable_assignment] ... variable_assignment: user_var_name = ...
- idea指定启动参数、环境变量
1. 点击Edit Configurations 2 # VM Arguments 是设置的虚拟机的属性 # VM options # 环境变量参数 这里需要指定-D参数 -server -XX:M ...
- Form开发:字段关系-消息-快速编码-参数和系统变量
1.字段关系 清除依赖字段:在挂LOV的名称字段的WHEN-VALIDATE-ITEM调用:app_field.clear_dependent_fields 设置字段依赖:在主字段的WHEN ...
- Mysql向存储过程中传递中文参数变成乱码的解决方案
今天做程序需要用到一个存储过程,然后用php程序调用. 存储过程如下: delimiter $$ CREATE PROCEDURE disagree_upgrade_detail(a int,b t ...
随机推荐
- 关于ML.NET v1.0 的发布说明
今天,我们很高兴宣布发布 ML.NET 1.0.ML.NET 是一个免费的.跨平台的开源机器学习框架,旨在将机器学习(ML)的强大功能引入.NET 应用程序. ML.NET GitHub:https: ...
- 第16讲:ODBC&JDBC简介
一.ODBC简介 1. ODBC的概念 ①ODBC:Open DataBase Connection,即开放数据库连接 ②ODBC是一种标准,它规定了不同语言的应用程序与不同数据库服务器之间通讯的方式 ...
- itest(爱测试) 3.3.7 发布,开源BUG 跟踪管理& 敏捷测试管理软件
v3.3.7 下载地址 :itest下载 itest 简介:查看简介 V3.3.7 增加了 5个功能增强,和8个BUG修复 ,详情如下所述. 5个功能增强 :(1)任务看板中,除了显示任务外,增加测试 ...
- Java面试题-基础篇二(干货)
11.是否可以从一个static方法内部发出对非static方法的调用? 不可以.因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用 ...
- Vue.js面试整理
Vue项目结构介绍 build 文件夹:用于存放 webpack 相关配置和脚本. config 文件夹:主要存放配置文件,比如配置开发环境的端口号.开启热加载或开启gzip压缩等. dist 文件夹 ...
- jquery和bootstrap:
事件:绑定bind和解绑unbind: $('选择器').bind('事件',function(){ // 操作 }) $('选择器').unbind('事件') $('选择器').c ...
- Tensorflow的不足之处
Tensorflow还是有不足的地方.第一体现在Tensorflow的数据机制,由于tensor只是占位符,在没有用tf.Session().run接口填充值之前是没有实际值的.
- ionic4 ion-picker用法
ion-picker实际开发中肯定多处使用,所以封装成服务的形式调用 新建picker.service服务模块 ionic g service picker import { Injectable ...
- Linux学习笔记-第13天 最近有点跟不上节奏阿
难度上来了.最近工作也忙起来了..有点跟不上节奏.加油吧
- jquery模拟点击事件
在某些情况下,我们需要自动执行一些点击事件.比如:一些 tab 一般是通过点击事件来加载不同的数据内容. 而如果要页面加载完直接显示第三个 tab,怎么办呢?此时就需要用到 jQuery 的模拟点击事 ...