共计 4031 个字符,预计需要花费 11 分钟才能阅读完成。
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