原文链接:
https://relph1119.github.io/mysql-learning-notes/#/mysql/02-MySQL%E7%9A%84%E8%B0%83%E6%8E%A7%E6%8C%89%E9%92%AE-%E5%90%AF%E5%8A%A8%E9%80%89%E9%A1%B9%E5%92%8C%E7%B3%BB%E7%BB%9F%E5%8F%98%E9%87%8F
我们可以发现在日常生活中大多数软件都有自己的默认设置项,对于在程序启动时指定的设置项称之为启动选项
先不用去管mysql中的每个选项具体作用是什么
在命令行上使用选项
-h
参数后面紧跟着的服务器的IP地址,意味着客户端和服务器之间需要通过TCP/IP
网络进行通信。
- 如果我们在启动服务器程序的时候禁止各客户端使用
TCP/IP
网络进行通信,使用以下命令
mysqld --skip-networking
我们可以注意到在命令行中指定启动选项的时候需要在选项名前加上--
前缀,然后单词之间使用-
或者_
来凝结
改变默认的存储引擎:
mysqld --default-storage-engine=MyISAM
启动选项的通用格式:
--启动选项1[=值1] --启动选项2[=值2]
对于不需要值的启动选项,如skip-networking
,就不需要指定对应的值
default-storage-engine
就需要显示指定相关的值
mysqld_safe --help
可以看到mysql_safe支持的启动选项
查看mysqld支持的选项不一样
mysqld --verbose --help
mysql时客户端程序,使用mysql命令时,实际上启动了一个MySQL客户端会话
mysqld是MySQL服务器的主要二进制执行文件,负责启动,管理和运行数据库服务
选项的长形式和段形式
我们前面提到的skip-networking
、default-storage-engine
称之为长形式的选项(因为它们很长)
|长形式|短形式|含义| |-|-|-| |--host
|-h
|主机名| |--user
|-u
|用户名| |--password
|-p
|密码| |--port
|-P
|端口| |--version
|-V
|版本信息|
使用短形式前面就只需要使用一个-,而不是--
使用短形式可以有间隙,也可以直接用空白字符隔开
配置文件中使用选项
在命令行中设置启动选项只对当次启动有效,如果需要永久修改,
我们需要把设置的启动选项写在配置文件
当中
配置文件的类路径(Windows)
MySQL会按照以下路径来寻找配置文件
|路径名|备注| |-|-| |%WINDIR%\my.ini
, %WINDIR%\my.cnf
|| |C:\my.ini
, C:\my.cnf
|| |BASEDIR\my.ini
, BASEDIR\my.cnf
|| |defaults-extra-file
|命令行指定的额外配置文件路径| |%APPDATA%\MySQL\.mylogin.cnf
|登录路径选项(仅限客户端)|
如果我们在多个配置文件中设置了相同的启动选项,就医最后一个配置文件中的为准
defaults_file的使用:
如果我们不想让MySQL
到默认的路径下搜索配置文件,可以在命令行指定default-file选项
mysqld.exe --defaults-file=C:\tmp\myconfig.txt
有些选项只能出现在命令行之中
defaults-extra-file
,defaults-file
这两种,这个是用来修改参照的配置文件的
前面的东西我们直接修改my.ini就行了,或者直接搜怎么修改配置大概都有
系统变量
mysql服务器程序运行过成中会用到许多影响程序行为的变量,他们被称为MySQL
系统变量
允许同时连入的客户端数量用系统变量max_connection
表示
类似的还有default_storage_engine
大多数系统变量的值可以在程序运行过程中修改,无需停止并重新修改它
查看系统变量
SHOW VARIABLES [LIKE 匹配的模式]
精准匹配:
模糊匹配:
设置系统变量
通过命令行添加启动选项
或者是配置文件
我试了通过命令行添加启动选项,但是结果并没有改变
一般要去配置文件里面,my.ini直接修改
然后才是最重要的一步,要用管理员身份运行
net stop mysql80
net start mysql80
如果你和我一样启动不了,去计算机管理,点击服务,找到mysql80,右击启动就行,然后会发现,修改成功了
设置不同作用范围的系统变量
因为多个客户端可以同时连接到一个服务器程序,所以对于同一个系统变量,不同的客户端需要具有不同的值,这是很正常的事情
但是每个变量都可以针对单个客户端是不现实而且是没有必要的
例如:
max_connection
这是对于服务器而言的,客户端设置是完全不合适的
还有一个问题是设置的这个选项是全局(对服务器而言)的还是部分的(对客户端而言),这也很重要
所以我们提出了作用范围
这个概念
-
GLOBAL
:全局变量,影响服务器 -
SESSION
:会话变量,影响某一个客户端
显然,通过启动选项设置的系统变量的作用范围都是GLOBAL
SET [GLOBAL|SESSION] 系统变量名 = 值
第二种写法:
SET [@@(GLOBAL|SESSION).]var_name = XXX;
如果我们想让后面来的客户端的某个值都变成相同的就是用GLOBAL
//假设修改default_storage_engine
SET GLOBAL default_storage_engine = MyISAM;
SET @@GLOBAL.default_storage_engine = MyISAM;
如果只想对本客户端生效,我感觉我们掌握简单的一种就行,反正都一样
SET SESSION default_storage_engine = MyISAM;
SET default_storage_engine = MyISAM;
如果我们省略了作用范围,默认的作用范围就是SESSION
客户端设置了global的系统变量,并不会对已经连接上的客户端的系统变量产生影响,只会对后面连接的客户端产生影响
并不是所有系统变量都具有GLOBAL
和SESSION
的作用范围。
有些系统变量是只读的,并不能设置值。
启动选项和系统变量的区别:
启动选项
是程序启动的时候,我们传递的一些参数
系统变量
是影响服务器程序运行行为的变量
-
大部分的系统变量都可以作为启动选项进行传入
-
有些系统变量是在程序运行过程中自动生成的
-
有些启动选项不是系统变量
状态变量
我们通过状态变量
来了解服务器程序的运行情况
如:
Threads_connected
表示当前有多少客户端与服务器建立了连接
状态变量
是用来显示服务器程序的运行状况的,所以他们的值只能由服务器程序自己来设置,程序员是不能设置的
不过,状态变量也有GLOBAL
and SESSION
两个作用范围
查看状态变量的语句:
show [global|session] status [like匹配的模式];
同样我们不写明作用范围的话,默认的就是session