MySQL体系架构解析(二):MySQL目录与启动配置全解析

MySQL中的目录和文件

bin目录

在 MySQL 的安装目录下有一个特别重要的 bin 目录,这个目录下存放着许多可执行文件。与其他系统的可执行文件类似,这些可执行文件都是与服务器和客户端程序相关的。

启动MySQL服务器程序

在 UNIX 系统中,用来启动 MySQL 服务器程序的可执行文件有很多,大多在 MySQL 安装目录的 bin 目录下。

  • mysqld

    mysqld 这个可执行文件就代表着 MySOL 服务器程序,运行这个可执行文件就可以直接启动一个服务器进程。但这个命令不常用。

  • mysqld_safe

    mysqld_safe 是一个启动脚本,它会间接的调用 mysqld,而且还顺便启动了另外一个监控进程,这个监控进程在服务器进程挂了的时候,可以帮助重启它。另外,使用 mysqld_safe 启动服务器程序时,它会将服务器程序的出错信息和其他诊断信息重定向到某个文件中,产生出错日志,这样可以方便我们找出发生错误的原因。

  • mysql.server

    mysql.server 也是一个启动脚本,它会间接的调用 mysqld_safe,在调用 mysql.server 时在后边指定start参数就可以启动服务器程序了

    mysql 复制代码
    mysql.server start

    需要注意的是,这个 mysql.server 文件其实是一个链接文件,它的实际文件是 support-files/mysql.server,所以如果在 bin 目录找不到,到 support-files下去找找,而且如果你愿意的话,自行用ln命令在 bin 创建一个链接。

    另外,我们还可以使用 mysql.server 命令来关闭正在运行的服务器程序,只要把 start 参数换成 stop 就好了:

    mysql 复制代码
    mysql.server stop
  • mysqld_multi

    其实我们一台计算机上也可以运行多个服务器实例,也就是运行多个 MySQL 服务器进程。 mysql_multi 可执行文件可以对每一个服务器进程的启动或停止进行监控。

客户端程序

在我们成功启动 MysTL 服务器程序后,就可以接着启动客户端程序来连接到这个服务器喽, bin 目录下有许多客户端程序,比方说mysqladmin 、mysqldump 、mysqlcheck 等等。

我们常会用的是可执行文件mysql,通过这个可执行文件可以让我们和服务器程序进程交互,也就是发送请求,接受服务器的处理结果。

  • mysqladmin :执行管理操作的工具,检查服务器配置,当前运行状态,创建、删除数据库,设置新密码。
  • mysqldump 数据库逻辑备份程序
  • mysqlbackup 备份数据表、整个数据库、所有数据库,一般来说 mysqldump 备份、mysql 还原。

启动选项和参数

配置参数文件

当MySQL实例启动时,数据库会先去读取一个配置参数文件,用来寻找数据库的各种文件所在的位置以及指定某些初始化参数,这些参数通常定义了某种内存结构有多大等。默认情况下,MySQL 实例会按照一定的顺序在指定的位置进行读取,用户只需要命令mysql --help grep my.cnf 来寻找即可。

当然,也可以在启动MySQL时,指定配置文件(非yum安装):

这时候,就会以启动时指定的配置文件为准。

MySQL数据库参数文件的作用和Oracle数据库的参数文件极其类似,不同的是,Oracle实例在启动时若找不到参数文件,是不能进行状态(mount)操作的。MySQL稍微有些不同,MySQL实例可以不需要参数文件,这时所有的参数值取决于编译MySQL时指定的默认值和源代码中指定参数的默认值。

MySQL数据库的参数文件是以文本方式进行存储的。可以直接通过一些常用的文本编辑软件进行参数的修改。

参数查看和修改

可以通过命令show variable查看数据库中的所有参数,也可以通过 LIKE 来过滤参数名,前面查找数据库引擎时已经展示过了。从 MySQL5.1 版本开始,还可以通过 information_schema 架构下的 GLOBAL_VARIABLES 视图来进行查找,推荐使用命令。
show variables,使用更为简单,且各版本的 MySQL 数据库都支持。

参数的具体含义还可参考MySQL官方手册

MySQL数据库中的参数可分为两类:动态(dynamic)参数和静态(static)参数。同时从作用范围又可以分为全局变量和会话变量。

  • 动态参数意味着可以在MySQL实例运行中进行更改,静态参数说明在整个实例生命周期内都不得进行更改,就好象是只读(read only)的。
  • 全局变量(GLOBAL)影响服务器的整体操作;会话变量(SESSION/LOCAL)影响某个客户端连接的操作。

举个例子,用 default_storage_engine 来说明,在服务器启动时会初始化一个名为 default_storage_engine ,作用范围为 GLOBAL 的系统变量。之后每当有一个客户端连接到该服务器时,服务器都会单独为该客户端分配一个名为 default_storage_engine ,作用范围为 SESSION 的系统变量,该作用范围为 SESSION 的系统变量值按照当前作用范围为 GLOBAL 的同名系统变量值进行初始化。

可通过SET命令对动态的参数值进行修改。

SET的语法如下

mysql 复制代码
-- set [global || session ] system_var_name= expr
-- 或者
-- set [@@global. || @@session.] system_var_name= expr
-- 比如:
set read_buffer_size=524288;
set session read_buffer_size=524288;
set @@global.read_buffer_size=524288;

MySQL所有动态变量的可修改范围,可参考MySQL官方手册的 Dynamic System Variables 相关内容

对于静态变量,若对其进行修改,会得到类似如下错误

相关推荐
写写闲篇儿19 小时前
微软面试之白板做题
面试·职场和发展
JIngJaneIL20 小时前
基于springboot + vue古城景区管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
敲敲了个代码20 小时前
隐式类型转换:哈基米 == 猫 ? true :false
开发语言·前端·javascript·学习·面试·web
微学AI20 小时前
复杂时序场景的突围:金仓数据库是凭借什么超越InfluxDB?
数据库
liang_jy20 小时前
Android LaunchMode
android·面试
廋到被风吹走20 小时前
【数据库】【Redis】定位、优势、场景与持久化机制解析
数据库·redis·缓存
LYFlied21 小时前
【每日算法】LeetCode 17. 电话号码的字母组合
前端·算法·leetcode·面试·职场和发展
有想法的py工程师21 小时前
PostgreSQL + Debezium CDC 踩坑总结
数据库·postgresql
Nandeska1 天前
2、数据库的索引与底层数据结构
数据结构·数据库
小卒过河01041 天前
使用apache nifi 从数据库文件表路径拉取远程文件至远程服务器目的地址
运维·服务器·数据库