MySql(一)——启动选项和系统变量
启动MySql服务器程序
mysqld
-
mysqld
这个可执行文件就代表着MySql
服务器程序,运行这个可执行文件就可以直接启动一个服务器进程。
-
mysqld_safe
-
mysqld_safe
是一个启动脚本,它会间接的调用mysql
,而且还顺便启动了另外一个监控服务,这个监控进程在服务器进程挂了的时候,可以帮助重启它。另外,使用mysqld_safe
启动服务器程序时,它会将服务器程序的出错信息和其他诊断信息重定向到某个文件中,产生出错误日志,这样可以方便我们找出发生错误的原因。
-
mysql.server
-
mysql.server
也是一个启动脚本,它会间接的调用mysql_safe
,在调用mysql.server
时在后边指定start
参数就可以启动服务器程序了: mysql.server start
-
mysqld_multi
- 一台计算机上可以运行多个服务器实例。
mysqld_multi
可以对每一个服务器进程的启动或停止进行监控。
- 一台计算机上可以运行多个服务器实例。
tips:
windows下,命令:
"完整的可执行文件路径" --install [-manual] [服务名]
可以指定程序注册为windows服务。
启动MySql客户端程序
mysql -h主机名 -u用户名 -p密码
参数名 | 含义 |
---|---|
-h | 计算机的域名或者IP地址 |
-u | 用户名 |
-p | 密码 |
客户端与服务器的连接过程
运行着的服务器程序和客户端程序本质上都是计算机上的一个进程,所以客户端进程向服务器进程发送请求并得到回复的过程本质上是一个进程间通信的过程!
MySql
支持下边三种客户端进程和服务器进程的通信方式。
TCP/IP
-
mysqld -P3307
,-P
可以改变MySql
服务器监听哪个端口 -
mysql -p3307
,-P
可以让客户端去连接服务器的指定端口
-
命名管道和共享内存
- 仅
windows
用户可用
- 仅
Unix域套接字文件
- 如果我们的服务器进程和客户端进程都运行在同一台操作系统为类Unix的机器上的话,我们可以使用Unix域套接字文件来进行进程间通信
- 如果我们在启动客户端程序的时候指定的主机名为
localhost
,或者指定了--protocal=socket
的启动参数,那服务器程序和客户端程序之间就可以通过Unix域套接字文件来进行通信了。MySql服务器程序默认监听的Unix域套接字文件路径为/tmp/mysql.sock
,客户端程序也默认连接到这个Unix域套接字文件。如果我们想改变这个默认路径,可以在启动服务器程序时指定socket参数 mysqld --socket=/tmp/a.txt
mysql -hlocalhost -uroot --socket=/tmp/a.txt -p
服务器处理客户端请求
- 其实不论客户端进程和服务器进程是采用哪种方式进行通信,最后实现的效果都是:
客户端进程向服务器进程发送一段文本(MySQL语句),服务器进程处理后再向客户端进程发送一段文本(处理结果)
。 大致是以下三个部分
连接管理:
- 每当有一个客户端进程连接到服务器进程时,服务器进程都会创建一个线程来专门处理与这个客户端的交互,当该客户端退出时会与服务器断开连接,服务器并不会立即把与该客户端交互的线程销毁掉,而是把它缓存起来,在另一个新的客户端再进行连接时,把这个缓存的线程分配给该新客户端。这样就起到了不频繁创建和销毁线程的效果,从而节省开销
解析与优化
- 查询缓存:如果两个查询请求在任何字符上的不同(例如:空格、注释、大小写),都会导致缓存不会命中。虽然查询缓存有时可以提升系统性能,但也不得不因维护这块缓存而造成一些开销,比如每次都要去查询缓存中检索,查询请求处理完需要更新查询缓存,维护该查询缓存对应的内存区域。从MySQL 5.7.20开始,不推荐使用查询缓存,并在MySQL 8.0中删除
- 语法解析:判断请求的语法是否正确
- 查询优化:
MySql
的优化程序会对我们的语句做一些优化
存储引擎
-
blackhole
、MyIsam
、InnoDB
…
-
关于存储引擎的一些操作
SHOW ENGINES;
- 创建表时指定存储引擎:
CREATE TABLE 表名( 建表语句; ) ENGINE = 存储引擎名称;
- 修改表的存储引擎:
ALTER TABLE 表名 ENGINE = 存储引擎名称;
启动选项和配置文件
在命令行上使用选项,格式:
–启动选项1[=值1] –启动选项2[=值2] … –启动选项n[=值n]
-
mysqld --skip-networking
:客户端不能用-h
(TCP/IP
)进行网络通信 -
mysqld --default-storage-engine=MyISAM
:把默认引擎设置为MyISAM
-
在命令行中设置启动选项只对当次启动生效
- 配置文件中使用选项
Windows操作系统的配置文件
路径名 | 备注 |
---|---|
%WINDIR%my.ini, %WINDIR%my.cnf | WINDIR通常是C:WINDOWS |
C:my.ini, C:my.cnf | |
BASEDIRmy.ini, BASEDIRmy.cnf | BASEDIR指的是MySQL安装目录的路径 |
defaults-extra-file | 命令行指定的额外配置文件路径 |
%APPDATA%MySQL.mylogin.cnf | 登录路径选项(仅限客户端) |
列表中最后一个名为
.mylogin.cnf
配置文件有点儿特殊,它不是一个纯文本文件(其他的配置文件都是纯文本文件),而是使用
mysql_config_editor
实用程序创建的加密文件。文件中只能包含一些用于启动客户端软件时连接服务器的一些选项,包括
host
、
user
、
password
、
port
和
socket
。而且它只能被客户端程序所使用。
类Unix操作系统中的配置文件
路径名 | 备注 |
---|---|
/etc/my.cnf | |
/etc/mysql/my.cnf | |
SYSCONFDIR/my.cnf | CMake 构建MySQL 时使用SYSCONFDIR 选项指定的目录 |
$MYSQL_HOME/my.cnf | 特定于服务器的选项(仅限服务器) |
defaults-extra-file | 命令行指定的额外配置文件路径 |
~/.my.cnf | 用户特定选项 |
~/.mylogin.cnf | 用户特定的登录路径选项(仅限客户端) |
配置文件的内容
[server]
option1 #这是option1,该选项不需要选项值
option2 = value2 #这是option2,该选项需要选项值
[mysqld]
(具体的启动选项...)
[mysqld_safe]
(具体的启动选项...)
[client]
(具体的启动选项...)
[mysql]
(具体的启动选项...)
[mysqladmin]
(具体的启动选项...)
如果我们在多个配置文件中设置了相同的启动选项,那以最后一个配置文件中的为准
启动命令 | 类别 | 能读取的组 |
---|---|---|
mysqld | 启动服务器 | [mysqld]、[server] |
mysqld_safe | 启动服务器 | [mysqld]、[server]、[mysqld_safe] |
mysql.server | 启动服务器 | [mysqld]、[server]、[mysql.server] |
mysql | 启动客户端 | [mysql]、[client] |
mysqladmin | 启动客户端 | [mysqladmin]、[client] |
mysqldump | 启动客户端 | [mysqldump]、[client] |
- defaults-file的使用
- 如果我们不想让
MySql
到默认的路径下搜索配置文件(就是上表中列出的那些),可以在命令行指定defaults-file
选项,比如这样(以UNIX
系统为例):mysqld --defaults-file=/tmp/myconfig.txt
。如果文件不存在或无法访问,则会发生错误。
命令行和配置文件中启动选项的区别
如果同一个启动选项既出现在命令行中,又出现在配置文件中,那么以命令行中的启动选项为准
系统变量
1.系统变量简介MySql
服务器程序运行过程中会用到许多影响程序行为的变量
SHOW [GLOBAL|SESSION] VARIABLES [LIKE 匹配的模式];
2.设置系统变量
- 通过启动选项设置:上面说的很具体
服务器程序运行过程中设置
- 系统变量比较牛逼的一点就是,对于大部分系统变量来说,它们的值可以在服务器程序运行过程中进行动态修改而无需停止并重启服务器
设置不同作用范围的系统变量
-
GLOBAL
:全局变量,影响服务器的整体操作。 -
SESSION
:会话变量,影响某个客户端连接的操作。(注:SESSION
有个别名叫LOCAL
)
服务器会为每个连接的客户端维护一组会话变量
设置:
SET [GLOBAL|SESSION] 系统变量名 = 值;
SET GLOBAL default_storage_engine = MyISAM
SET [@@(GLOBAL|SESSION).]var_name = XXX;
SET @@GLOBAL.default_storage_engine = MyISAM
SET default_storage_engine = MyISAM
如果在设置系统变量的语句中省略了作用范围,默认的作用范围就是
SESSION
如果某个客户端改变了某个系统变量在GLOBAL
作用范围的值,并不会影响该系统变量在当前已经连接的客户端作用范围为SESSION
的值,只会影响后续连入的客户端在作用范围为SESSION
的值。
3.启动选项和系统变量的区别
- 大部分的系统变量都可以被当作启动选项传入
- 有些系统变量是在程序运行过程中自动生成的,是不可以当作启动选项来设置,比如`auto_increment_offset`、`character_set_client`
- 有些启动选项也不是系统变量,比如`defaults-file`
4.状态变量
为了让我们更好的了解服务器程序的运行情况,MySQL服务器程序中维护了好多关于程序运行状态的变量。由于状态变量是用来显示服务器程序运行状况的,所以它们的值只能由服务器程序自己来设置,我们程序员是不能设置的。如:Threads_connected