认识MySQL
MySQL的客户端/服务器
MySQL服务器是运行在计算机中,直接与要存储的数据打交道的程序,多个客户端程序可以连接到这个服务器程序,向服务器发送增删改查的请求,然后服务器程序根这些请求,对存储的数据进行相应的处理。
MySQL社区版下载地址:https://dev.mysql.com/downloads/
日常使用场景
- 启动MySQL服务器
- 启动MySQL客户端,并连接服务器
- 在MySQL客户端输入命令语句,并将其作为请求发送给MySQL服务器。服务器在收到请求后,根据请求的内容操作对应的数据,并将结果返回给客户端程序。
什么是实例
MySQL实例是在计算机中运行的MySQL软件的单独副本。例如电脑中登陆1个QQ号,就是一个实例,登陆多个QQ号,则对应不同的实例。
MySQL的安装
MySQL可以运行在各种类型的操作系统是,以macOS和Windows为例,它们的安装目录分别如下。
macOS操作系统上的安装目录:
/usr/local/mysql/
Windows操作系统上的安装目录:
C:\Program Files\MySQL\MySQL Server 5.7\
bin目录下的可执行文件
以macOS为例,bin目录中的部分可执行文件如下所示。
|--mysql
|--mysql.server
|--mysqladmin
|--mysqlbinlog
|--mysqlcheck
|--mysqld
|--mysqld_multi
|--mysqld_safe
|--mysqldump
|--mysqlimport
|--mysqlpump
...
Windows的可执行文件与之类似,不过都是以.exe为扩展名。这些可执行文件中,有的是服务器程序,有的是客户端程序。在具备图形界面的操作系统中,可以通过鼠标点击的方式打开运行某个可执行文件。也可以使用命令行运行可执行文件。
以macOS为例使用命令行运行可执行文件:
- 使用可执行文件的相对/绝对路径
进入MySQL安装目录
cd /usr/local/mysql
./bin/mysqld
或直接进入bin目录
cd /usr/local/mysql/bin
mysql
- 将bin目录的绝对路径加入到环境变量PATH
不多说,参考Mac环境配置MySQL。
启动MySQL服务器
在macOS中启动服务器
用来启动MySQL的可执行文件有很多,大多数在安装目录的bin目录下,假设已经进入/bin/,使用如下可执行文件可启动MySQL服务器。
- mysqld
运行这个可执行文件就可以直接启动一个MySQL服务器进程。
- mysqld_safe
mysqld_safe是一个启动脚本,它会间接调用mysqld并持续监控服务器的运行状态。当服务器进程出现错误时,它还可以帮助重启服务器程序。另外,使用mysqld_safe启动MySQL服务器程序时,它会将服务器程序的出错信息和其他诊断信息输出到错误日志,以便后期查找错误原因。
出错日志默认写到一个以.err为扩展名的文件中,该文件位于MySQL的数据日志目录中。
- mysql.server
mysql.server也是一个启动脚本,它会间接地调用mysqld_safe。在执行mysql.server时,在后面添加start参数就可以启动服务器程序,如下所示:
mysql.server start
mysql.server文件其实是一个链接文件,它对应的是…/support-files/mysql.server。
- mysqld_multi
一台计算机中可以运行多个服务器实例,也就是启动多个服务器进程。mysqld_multi可执行文件可以启动或停止多个服务器进程,也能报告它们的运行状态。
在Windows中启动服务器
手动启动
进入安装目录的bin目录下,使用命令行输入mysqld,或者直接通过资源管理器双击mysqld文件,就可以启动MySQL服务器程序了。
如果没有启动成功,可以尝试使用mysqld -console命令启动服务器程序,这样可以把启动过程中的错误信息在终端窗口显示出来,以便查找错误原因。
以服务启动
如果需要在计算机中长时间运行MySQL,或者希望重启计算机时,能够自动启动MySQL服务器,可以将MySQL注册到服务。首先通过命令行进入到安装目录的bin目录运行下列命令。
mysqld --install
在把MySQL注册为Windows服务后,可以通过net命令启动MySQL服务程序了。
net start MySQL
关闭这个服务也非常简单,只需要把start换成stop就可以了。
net stop MySQL
也可以通过Windows的服务管理器并鼠标点击的方式启动和停止服务。
启动MySQL客户端
成功启动MySQL服务器程序后,可以通过MySQL客户端程序来连接这个服务器了。bin目录下有许多客户端程序,比如mysqladmmin、mysqldump、mysqlcheck等。
mysql可执行文件
以mysql为例使用如下命令,即可连接MySQL服务器,且打开mysql>提示符。
mysql -h主机名 -u用户名 -p密码
例如:
mysql -h192.168.31.3 -uroot -p123456
这些参数等含义如下表所示:
参数名 | 含义 |
---|---|
-h | 表示服务器进程所在计算机的域名或IP地址,“-h192.168.31.3”等价于“–host=192.168.31.3”。 |
-u | 表示用户名;“-uroot”等价于“–user=root”。 |
-p | 表示密码;“-p123456”等价于“–password=123456”。 |
像h、u、p这种名称只有一个英文字母的参数称为短形式的参数,使用时前面需要加单短划线;像host、user、password这种由多个字母组成的参数称为长形式的参数,使用时前面需要加双短划线,且若传入参数需使用等号赋值。
连接成功后,界面提示如下:
# mysql -uroot -p123456
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.25 MySQL Community Server - GPL
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
执行mysql语句后,想要断开客户端与服务器的连接,使用quit/exit/\q命令可以断开连接。以quit为例:
mysql> quit
Bye
输出Bye说明客户端程序已经关掉。注意,这是关闭客户端的方式,不是关闭服务器的方式。
连接注意事项
- 最好不要在一行命令中输入密码
在一些系统中,其他用户可以通过如ps之类的命令看到在命令行中输入的密码,非常不安全,我们在执行mysql命令连接服务器时,可以不显式地输入密码,如下所示:
# mysql -hlocalhost -urrot -p
Enter password:
通过这种方式输入的密码不会被显示出来,输入完成后按Enter就可以连接到服务器了。
- 如果需要显式的输入密码,-p和密码之间不能有空白字符,其他参数无此规定。
正确
mysql -h localhost -u root -p123456
错误
mysql -h localhost -u root -p 123456
这样写会导致服务器把123456当作数据库名称对待。
- mysql的各个参数的顺序没有硬性规定,这样写也是没问题的:
mysql -p -uroot -h localhost
- 如果服务器和客户端安装在同一台机器,可以省略-h
mysql -u root -p
- 使用类UNIX系统时,若省略-u参数,客户端会把登陆操作系统的用户名当作MySQL的用户名去处理。对于Windows系统来说,默认的用户名是ODBC,可以通过设置环境变量USER来添加一个默认用户名。
常见图形界面客户端
Navicat是一种商业数据库管理客户端,支持MySQL、PostgreSQL、Oracle、SQL Server和SQLite等多种数据库。它提供了一个简单的界面,可以帮助用户管理和维护数据库。Navicat支持多个语言,包括英语、中文、日语、法语、德语等,并且提供了许多高级特性,例如备份数据库、恢复数据库、数据同步等。
DataGrip是一款由JetBrains开发的跨平台数据库管理工具,可以支持多种数据库,包括MySQL、PostgreSQL、Oracle、Microsoft SQL Server等等。
客户端与服务器连接方式
运行中的服务器程序和客户端程序本质上都是计算机上的一个进程,客户端进程向服务器进程发送请求并得到响应的过程本质上是一个进程间通信的过程。MySQL支持下面几种客户端进程和服务器进程的通信方式。
TCP/IP
MySQL采用TCP作为服务器和客户端之间的网路通信协议,进程之间通过IP地址+端口号的方式就可以进行通信。MySQL服务器在启动时会默认申请3306端口号,之后就在这个端口号上等待客户端进行连接。
如果3306端口号被占用,或者想自定义该服务器监听的端口号,可以在启动服务器程序的命令行中添加-P参数指明端口号,如下所示:
mysqld -P3307
这样MySQL服务器在启动时就会监听3307端口。
在客户端想要通过TCP/IP连接服务器时,在-h参数后必须跟随IP地址来作为需要连接服务器进程的主机的主机名。如果服务器的端口号不是默认值3306,可以在使用mysql命令连接服务器时使用-P参数(注意这里是大写P,小写的p是用来指定密码的)指定需要连接的端口号。如下所示:
mysql -h192.168.31.3 -P3307 -uroot -p
命名管道和共享内存
如果MySQL服务器程序和MySQL客户端程序都运行在同一台Windows操作系统的机器上,可以使用命名管道和共享内存进行通信。
- 使用命名管道进行进程间通信:需要在启动服务器程序的命令中加上–enable-named-pipe参数,然后在启动客户端程序的命令中加上–pipe或–protocol=pipe参数。
- 使用共享内存进行进程间通信:需要在启动服务器程序的命令中加上–shared-memory参数。在成功启动服务器后,共享内存便成为本地客户端程序的默认连接方式。我们也可以在启动客户端程序的命令中加上–protocol=memory参数使用共享内存进行通信。
UNIX域套接字
如果MySQL服务器程序和MySQL客户端程序都运行在同一台类UNIX操作系统的机器上,则可以使用UNIX域套接字进行进程间通信。如果在启动客户端程序时没有指定主机名,或指定的主机名为localhost,又或者指定了–protocol=socket参数,那么服务器程序和客户端程序之间可以通过UNIX域套接字进行通信了。
MySQL服务器程序默认坚挺的UNIX域套接字文件名称为/temp/mysql.sock,客户端程序默认连接到这个UNIX域套接字文件名称。修改默认名称的方法是在启动服务器时指定socket,如下所示:
mysqld --socket=/tmp/a.txt
客户端修改如下:
mysql -hlocalhost -uroot --socket=/tmp/a.txt -p
服务器处理客户端请求
请求即客户端进程向服务器进程发送一段文本(SQL),服务器进程处理后再向客户端进程返回一段文本(处理结果)。一次查询请求执行过程如下图所示:
服务器程序在处理来自客户端的请求时,大致分为3部分:
连接管理
每当有一个客户端进程连接到服务器时,服务器进程会创建一个线程专门处理与该客户端的交互,建立连接后,服务器会一直等待客户端发送请求。;当客户端断开连接时,服务器不会立即销毁该线程,而是先缓存起来,等待另一个新的客户端连接时,把这个线程分配给该客户端使用。这样就不用频繁地创建和销毁线程,节省系统开销。
解析与优化
服务器接收到的请求只是一个文本消息,还要经过查询缓存、语法解析和查询优化处理。
- 查询缓存
服务器会把刚刚处理过的请求和结果缓存起来,下次有相同的请求,可以直接从缓存中查询结果,不必要进行后续的步骤,直接返回结果。但是,必须具备以下条件,才可以有效地使用缓存,以提高效率。
- 查询请求必须完全相同,字符、空格、注释、大小写都必须完全相同。
- 查询请求中不能包含某些导致两次调用会产生不同结果的函数、用户自定义变量和函数、系统表。
例如NOW函数,在两次执行中会产生不同结果;系统表包含mysql、information_schema、performance_schema等。
当表结构或者数据被修改时,例如使用了INSERT、UPDATE、DELETE、TRUNCATE TABLE、ALTER TABLE、DROP TABLE或DROP DATABASE等语句,则与该表有关的所有查询缓存都将变为无效并被删除。
MySQL 5.7.20开始,不推荐使用查询缓存,MySQL 8.0中查询缓存被删除。
- 语法解析
服务器对请求文本进行分析,判断语法是否正确,然后从文本中将要查询的表、查询条件提取出来放到MySQL服务器内部使用的一些数据结构上。
- 查询优化
服务器对请求文本中的语句进行优化,例如外连接转换为内连接、表达式简化、子查询转为连接等等。优化后生成一个执行计划,这个执行计划表明了用那些索引执行查询,以及表之间的连接顺序等。我们可以使用EXPLAIN语句查看某个SQL语句等执行计划。
存储引擎
MySQL服务器把数据等存储和提取操作都封装在存储引擎模块中。查询条件、函数的执行、结果的过滤和返回都在存储引擎以外的server中进行。server层完成了查询优化后,只需要按照生成的执行计划按照存储引擎的接口获取数据,并返回给客户端就好了。
例如一条SELECT语句,server层从存储引擎中取出数据,进行条件判断,若符合,发送到一个缓冲区;若不符合,则跳过该记录,取下一条记录继续判断。待缓冲区满了,或完成所有数据判断,才向客户端发送结果。
常用存储引擎
MySQL支持的存储引擎:
存储引擎 | 描述 |
---|---|
ARCHIVE | 用于数据存档,记录插入后不得修改 |
BLACKHOLE | 丢弃写操作,该操作会返回空内容 |
CSV | 以逗号分隔各个数据项 |
FEDERATED | 用来访问远程表 |
InnoDB | 支持事务、行级锁、外键 |
MEMORY | 数据存储在内存中,多用于临时表 |
MERGE | 用来管理多个MyISAM表构成的表集合 |
MyISAM | 主要的非事务处理存储引擎 |
NDB | MySQL集群专用存储引擎 |
查看当前服务器支持的存储引擎
在客户端中使用如下命令查看当前服务器程序所支持的存储引擎:
SHOW ENGINES;
其中Support列表示该存储引擎是否可用,DEFAULT值表示当前服务器默认使用存储引擎;Comment列表示对存储引擎的描述;Transactions列表示该存储引擎是否支持事务;XA列表示该存储引擎是否支持分布式事务;Savepoints列表示该存储引擎是否支持事务的部分回滚。
设置表的存储引擎
不同的表可以有不同的物理存储结构、不同的读写方式。我们可以为不同的表设置不同的存储引擎。
- 创建表时指定存储引擎
显示地指定存储引擎:
CREATE TABLE 表名(.....) ENGINES = 存储引擎名称;
例如:
CREATE TABLE student(
id int,
name varchar(10)
) ENGINES = MyISAM;
- 修改表的存储引擎
如果表已经创建好了,可以通过修改语句修改表的存储引擎:
ALTER TABLE 表名 ENGINES = 存储引擎名字;
例如:
ALTER TABLE student ENGINES = InnoDB;
启动选项和系统变量
启动选项
启动选项就是软件的设置,控制着MySQL软件启动后的行为,一般都有各自的默认值。在MySQL安装目录的bin目录下的各种可执行文件,无论是服务器相关的,还是客户端相关的,在启动时基本都可以指定启动选项。这些启动选项可以在命令行中指定,也可以在配置文件中指定。
启动命令
如果我们想在启动服务器时禁止客户端使用TCP/IP网络进行通信,可以在启动服务器程序的命令行中添加skip-networking启动选项,如下所示:
mysqld --skip-networking
在命令行中使用启动选项需要加上双短划线“–”,若选项由多单词组成,它们之间可以加“-”或"_"连接。如下写法也是正确且等价的:
mysqld --skip_networking
若在创建表的时候未显式指定存储引擎,则默认使用InnoDB。可以通过启动选项修改默认存储引擎,这样在创建表时,默认的存储引擎会改变。
mysqld --default-storage-engine=MyISAM
命令启动选项的通用格式:
可执行文件 --启动选项1[=值1] --启动选项2[=值2]...--启动选项n[=值n]
在命令中启动选项时需要注意,选项吗、等号、选项值之间不可以有空白字符。
错误:
mysqld --default-storage-engine = MyISAM
--skip-networking、–default-storage-engine这些启动选项都是长形式的选项,有一些常用的选项有短形式的简写。
长形式 | 短形式 | 含义 |
---|---|---|
–host | -h | 主机名 |
–user | -u | 用户名 |
-password | -p | 密码 |
–port | -P | 端口 |
–version | -v | 版本信息 |
使用短形式选项时,选项名和选项值之间可以没有间隙,也可以使用空白字符(-p除外);选项名称是区分大小写短。
配置文件
除了在启动程序时,通过在命令行中添加启动选项外,还可以通过配置文件中添加启动选项,这样可以避免每次输入过长启动命令时浪费时间。
MySQL在启动时会在多个路径下寻找配置文件,这些路径有的是固定的,有的是在命令行中指定的。根据操作系统不同,寻找配置文件的路径也不同。
- 配置文件的路径
在Windows操作系统中,MySQL会按照从上自下顺序一次寻找配置文件。
路径 | 备至 |
---|---|
5WINDIR%\my.ini, %WINDIR%\my.cnf | |
C:\my.ini, C:\my.cnf | |
BASEDIR\my.ini, BASEDIR\my.cnf | |
defaults-extra-file | 命令行指定的额外配置文件路径 |
%APPDAta%MySQL\mylogin.cnf | 登录路径选项(尽显客户端) |
- %WINDIR%指Windows目录的位置。
- BASEDIR指MySQL安装目录
- defaults-extra-file命令用法
mysqld --defaults-extra-file=C:\my_extra_file.txt
- %APPDATA%表示Windows应用程序数据目录,可以用echo %APPDATA%命令查看。
- .mylogin.cnf不是一个纯文本文件,只能被客户端使用,无法编辑。
在类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]
(选项...)
[mysql_safe]
(选项...)
[client]
(选项...)
[mysql]
(选项...)
[mysqladmin]
(选项...)
每个组还可以添加若干个启动选项,如下所示:
[server]
option1 # option1,该选项不需要值
option2 = value2 # option2,该选项有值
在配置文件中,不同的选项组是给不同的程序使用的,如[mysqld]和[mysql]是用来给服务器和客户端启动时使用的。[server]组下的选项作用于所有的服务器,[client]组下的选项作用于所有的客户端。
程序名 | 类别 | 能读取的组 |
---|---|---|
mysqld | 服务器 | [mysqld]、[server] |
mysqld_safe | 服务器 | [mysqld]、[server]、[mysqld_safe] |
mysql.server | 服务器 | [mysqld]、[server]、[mysql.server] |
mysql | 客户端 | [mysql]、[client] |
mysqladmin | 客户端 | [mysqladmin]、[client] |
mysqldump | 客户端 | [mysqldump]、[client] |
- 配置文件优先级
MySQL依次寻找配置文件,若不存在,则忽略。若多个配置文件中设置了相同的启动选项,则以最后读取到的启动选项为准。
同一个配置文件中,多个组中设置了相同的启动选项,将以最后一个出现的组中的启动选项为准。
命令行和配置文件优先级
如果同一个启动选项即出现在命令行中,又出现在配置文件中,那么以命令行为准。
如果命令行指定defaults-file=path,则不会去寻找默认路径下的配置文件,若指定路径不存在,则发生错误。
defaults-extra-file是指定额外的配置文件路径,默认路径还是会扫描;defaults-fils是只使用该指定的路径,不扫描其他。
系统变量
查看系统变量
使用下列命令查看MySQL服务器支持的系统变量以及当前值:
SHOW VARIABLES [LIKE 匹配的模式];
由于系统变量非常多,直接食用SHOW VARIABLES,结果太多,并不能找到想要的信息,通常使用LIKE过滤条件,例如:
mysql> SHOW VARIABLES LIKE 'default_storage_engine';
+------------------------+--------+
| Variable_name | Value |
+------------------------+--------+
| default_storage_engine | InnoDB |
+------------------------+--------+
1 row in set (0.01 sec)
也可使用模糊查询,例如:
mysql> SHOW VARIABLES LIKE 'default%';
+-------------------------------+-----------------------+
| Variable_name | Value |
+-------------------------------+-----------------------+
| default_authentication_plugin | caching_sha2_password |
| default_collation_for_utf8mb4 | utf8mb4_0900_ai_ci |
| default_password_lifetime | 0 |
| default_storage_engine | InnoDB |
| default_table_encryption | OFF |
| default_tmp_storage_engine | InnoDB |
| default_week_format | 0 |
+-------------------------------+-----------------------+
7 rows in set (0.00 sec)
设置系统变量
- 通过启动选项设置
- 通过命令行添加启动选项
mysqld --default-storage-engine=MyISAM --max-connection=10
- 通过配置文件添加启动选项
[server]
default-storage-engine=MyISAM
max-connection=10
与启动选项不同的是,系统变量多单词必须使用“_”连接,不可以使用"-"。
- 服务器程序运行中设置
(1)设置不同范围的系统变量
系统变量分为GLOBAL(全局范围)和SESSION(会话范围)。服务器会为每一个连接的客户端维护一份会话变量,客户端的会话变量在连接服务器时使用相应全局变量的当前值进行初始化。设置变量的语法如下:
SET [GLOBAL|SESSION] 系统变量名 = 值;
# 或
SET [@@(GLOBAL|SESSION).]系统变量名 = 值;
例如:
# 若想对全局生效
SET GLOBAL default_storage_engine = MyISAM;
SET @@GLOBAL.default_storage_engine = MyISAM;
# 若想对客户端生效
SET SESSION default_storage_engine = MyISAM;
SET @@SESSION.default_storage_engine = MyISAM;
如果在设置系统便利那个的雨中省略作用范围,则默认作用范围为SESSION。
(2)查看不同范围的系统变量
语法:
SHOW [GLOBAL|SESSION] VARIABLES [LIKE 匹配的模式];
- 若范围为GLOBAL,则结果为全局;
- 若范围为SESSION,则结果为会话,若某个系统变量无SESSION作用范围,则显示GLOBALE的值;
- 若范围省略,则与SESSION等价。
如果客户端改变了某个GLOBAL作用范围的值,并不会影响当前已连接的客户端作用范围为SESSION的值,只会影响后续连接的客户端的SESSION值。因为SESSION从GLOBAL的值初始化。
状态变量
状态变量为MySQL服务器维护的程序运行状态的变量,用来显示程序运行状态,所以它们的值只能查看,不能人为设置。与系统变量类似,状态变量也有GLOBAL和SESSION两个作用范围,查看状态变量语法如下:
SHOW [GLOBAL|SESSION] STATUS [LIKE 匹配的模式];
- 若范围为GLOBAL,则结果为全局;
- 若范围为SESSION,则结果为会话,若某个系统变量无SESSION作用范围,则显示GLOBALE的值;
- 若范围省略,则与SESSION等价。
字符集和比较规则
什么是字符集和比较规则
字符集简介
人为的规定字符与二进制数据的映射关系的集合范围和编码规则就是字符集。将字符集映射成二进制数据的过程叫做编码,将二进制数据映射到字符的过程叫做解码。
比较规则简介
在确定了字符集表示的字符范围及编码规则后,用来比较两个字符大小的规则称为比较规则。
一些重要的字符集
字符集名称 | 长度(字节) | 备注 |
---|---|---|
ASCII | 1 | 128个字符 |
GB2312/GBK | 1~2 | 若字符属于ASCII范围内,则1个字符可以表示,否则需要2个 |
UTF8 | 1~4 | 包含大多数国家的字符 |
UTF16 | 2或4 | |
UTF32 | 4 |
MySQL中utf8分为utf8mb3和utf8mb4,utf8mb3实际为阉割的utf8,无法显示emoji等表情。utf8为utf8mb3简称。
查看字符集
# 查询支持的字符集
SHOW (CHARACTER SET | CHARSET) LIKE ‘character name’
# 查询支持的比较序规则
SHOW COLLATION LIKE ‘collation name’
1️⃣服务器级
SHOW VARIABLE LIKE ‘character_set_server’
SHOW VARIABLE LIKE ‘collation_server’
2️⃣数据库级
USE db_name
SHOW VARIABLE LIKE ‘character_set_database’
SHOW VARIABLE LIKE ‘collation_database’
3️⃣数据表级
SHOW VARIABLE LIKE ‘character_set_server’
SHOW VARIABLE LIKE ‘collation_server’
4️⃣数据列级
SHOW VARIABLE LIKE ‘character_set_server’
SHOW VARIABLE LIKE ‘collation_server’
总结
- MySQL客户端通过发送请求给服务器,服务器收到请求后进行处理,并把处理结果返回给客户端。服务器执行过程中经历了如下步骤:
- 连接管理:负责连接的简历与信息的认证。
- 解析与优化:进行查询缓存、语法解析和查询优化。
- 存储引擎:负责在磁盘中读写数据。
- MySQL安装目录下的bin目录存放很多可执行文件,其中有一些是服务器程序(mysqld、mysqld_safe、mysql.server、mysqld_multi),还有一部分是客户端程序(mysql、mysqladmin)。
- 启动服务器的语法是
mysqld
- 启动客户端的语法是
mysql -h主机名 -u用户名 -p密码
- 设置存储引擎的语法是
# 创建表时指定
CREATE TABLE 表名(.....) ENGINES = 存储引擎名称;
# 修改表时指定
ALTER TABLE 表名 ENGINES = 存储引擎名字;
- 启动选项可以调整服务器启动后的一些行为,它们可以在命令行中指定,也可以将它们写入到配置文件中。
本文为《MySQL是怎样运行的:从根儿上理解 MySQL》阅读笔记,这本书非常棒,值得一阅。