Linux安装MySQL 8.0.36
- 0. 不知道选择什么版本的MySQL?
- 1. 创建MySQL安装目录、文件存放相关目录
- 2. 上传MySQL至服务器、解压MySQL到指定目录
- 3. 创建MySQL用户及用户组
- 4. 设置文件和目录的权限
- 5. 配置MySQL环境变量及配置文件my.cnf
- 6. 初始化数据库
- 7. 修改mysql.server脚本
- 8. 管理MySQL服务、设置MySQL开机自启动
- 9. 登录 MySQL
0. 不知道选择什么版本的MySQL?
根据服务器系统选择对应的MySQL版本:https://blog.youkuaiyun.com/qq_41929714/article/details/136717388
1. 创建MySQL安装目录、文件存放相关目录
创建安装路径以及存放文件相关路径:
mkdir -p /my_soft/db/mysql/mysql-8.0.36/{
data,log,conf,lock,tmp,sockets} && mkdir -p /my_soft/db/mysql/mysql-8.0.36/log/{
error,binlog,slow_query,redo,undo,relay} && mkdir -p /my_soft/db/mysql/mysql-8.0.36/sockets/{
mysqld,xplugin}
参数说明:
- lock:指定了MySQL服务器的锁定目录。
- mysql-8.0.36:这里的
mysql-8.0.36
我用MySQL版本号命名 - log子路径:按照功能创建文件夹
- sockets子路径:socket文件时临时文件,按照服务来创建socket文件的临时存放的文件夹
2. 上传MySQL至服务器、解压MySQL到指定目录
2.1 上传文件至服务器
上传文件至服务器,位置自选,我的位置是/my_soft/db/mysql/
:
上传后查看如下:
cd /my_soft/db/mysql && ll
2.2 解压MySQL到指定目录
解压执行命令:
tar -xvf /my_soft/db/mysql/mysql-8.0.36-linux-glibc2.28-x86_64.tar.xz -C /my_soft/db/mysql && cd /my_soft/db/mysql && ll
在tar命令中,-xvf是三个选项的组合。下面解释这些选项的含义:
- -x: 表示解压缩(或提取)操作,即从tar存档文件中提取文件。
- -v: 表示详细模式,它会显示每个文件的详细信息,包括文件名、大小等。
- -f: 表示指定后跟的参数为tar存档文件的名称。
- –overwrite:选项用于强制覆盖目标目录中已存在的同名文件。
- -C:指定了解压缩后的文件应该被提取到的目标目录。
2.3 拷贝解压文件到MySQL安装目录
解压完成后,将文件夹mysql-8.0.36-linux-glibc2.28-x86_64
的内容移动到mysql-8.0.36
,不要用 mv
,如果在重命名文件夹时,新的文件夹名称已经存在,mv
命令将会把原始文件夹移动到新的文件夹内。使用rsync
命令递归地复制解压文件夹mysql-8.0.36-linux-glibc2.28-x86_64
内容到mysql-8.0.36
,完成之后删除解压文件夹mysql-8.0.36-linux-glibc2.28-x86_64
:*
rsync -av --remove-source-files /my_soft/db/mysql/mysql-8.0.36-linux-glibc2.28-x86_64/ /my_soft/db/mysql/mysql-8.0.36/ && rm -r /my_soft/db/mysql/mysql-8.0.36-linux-glibc2.28-x86_64 && cd /my_soft/db/mysql&& ll
命令解析:rsync
命令用法
rsync -av --remove-source-files old_folder_name/ new_folder_name/ && rm -r old_folder_name
这个命令将先使用 rsync
命令递归地复制源文件夹中的文件和子目录到目标文件夹中,并在复制完成后执行 rm -r
命令来删除源文件夹及其内容。在上述命令中,参数的含义如下:
- -a: 递归地复制所有文件和子目录,保留文件属性、权限等。
- -v: 显示详细输出,以查看正在进行的操作。
- –remove-source-files: 在复制完成后,从源文件夹中删除已复制的文件。
注意:最后的斜杠 /
是必需的,它用于指定要复制的文件夹的内容而不是整个文件夹本身。确保将 old_folder_name
替换为源文件夹的实际名称,new_folder_name
替换为目标文件夹的实际名称。
3. 创建MySQL用户及用户组
注意:在创建用户和用户组时,请确保使用适当的安全性措施,并为用户设置合适的权限和访问限制。
3.1 创建用户组
在设计用户组命名规范时,可以考虑以下几个方面来确保命名的一致性和可读性:
易于理解和识别:选择具有描述性的名称,能够清晰地表达用户组的职责、权限或关联。使用有意义的词汇和术语,避免使用过于复杂或晦涩的命名。
角色或职责导向:命名应基于用户组的角色或职责,以便更好地区分其功能和权限。例如,可以使用 “dev” 表示开发人员组,“admin” 表示管理员组等。
层级结构:如果你的系统需要多层次的用户组结构,可以采用层级的方式来命名。例如,可以使用 "sales"作为顶级用户组,然后在其下创建子用户组如 “sales_representatives” 和 “sales_managers”。
统一前缀或后缀:为了更好地标识用户组,可以使用统一的前缀或后缀。例如,所有与数据库相关的用户组可以使用以 “db_” 开头的命名,或者以"_group" 结尾等。
简洁明了:尽量保持名称简短,并尽量使用常见的缩写或约定俗成的命名方式,以提高可读性和易记性。
避免冲突:确保用户组名称在系统中唯一,避免与已有的用户组或其他标识符冲突。
标准化文档:建议记录和维护一个命名规范文档,以便团队成员了解和遵循统一的命名约定。
最重要的是,根据组织的需求和实际情况来制定适合自己的用户组命名规范。这样可以提高权限管理的一致性、可读性和可维护性,并使团队成员更容易理解和使用这些用户组。
创建用户组,mysql_rwx_group(读+写+执行)
,由用户组来管理MySQL用户:
sudo groupadd mysql_rwx_group && cat /etc/group
注意:目录的权限和归属权限的结构,从左到右对应,属主,属组,其他用户,每个对应三个权限。因此没有必要建一个mysql_r_group(读)
的用户组,在一定程度上,这个用户组的权限等价于其他用户。这里不懂得可以看本文后面的章节:6. 设置文件和目录的权限。
命令解析:创建用户组
执行以下命令创建新的用户组,其中<group_name>
是您想要创建的用户组的名称:
sudo groupadd <group_name>
命令解析:删除用户组
执行以下命令来删除用户组:
sudo groupdel <group_name>
在上述命令中,将 <group_name>
替换为要删除的实际用户组名称。
如果用户组不存在或者无法删除(因为它仍然包含成员),则可能会显示一条错误消息。在这种情况下,您可以选择先将用户从用户组中移除,然后再删除用户组。
执行以下命令将用户从用户组中移除:
sudo gpasswd -d <username> <group_name>
将 <username>
替换为要移除的用户名,<group_name>
替换为目标用户组的名称。再次尝试删除用户组。
注意:删除用户组时,请确保该用户组不再需要,并且没有任何关联的文件、目录或进程依赖于该用户组。删除用户组后,与该用户组相关的文件和权限也将被删除。务必在操作前进行适当的备份和确认,并谨慎行事,以避免不可逆的数据丢失或系统不稳定。
命令解析:查看用户组
使用 cat 命令结合 /etc/group 文件来查看所有用户组:
cat /etc/group
3.2 创建MySQL用户、并设置密码
创建MySQL用户mysql_rwx_hk
并设置密码:
sudo useradd mysql_rwx_hk && sudo passwd mysql_rwx_hk
输入上述命令后,系统会提示您输入新用户的密码。请按照提示设置密码,并确认密码。
命令解析:查看用户
使用 cat
命令结合 /etc/passwd
文件来查看所有用户,/etc/passwd
文件包含了系统中所有用户的信息,每个用户对应一行记录:
cat /etc/passwd
命令解析:删除用户并同时删除用户的家目录,即/home
目录下的用户目录
在Linux系统中,要删除用户并同时删除用户的家目录,你可以使用userdel
命令的-r
选项。这会删除用户及其关联的文件和目录。
sudo userdel -r 用户名
3.3 将MySQL用户添加到用户组
更改mysql_rwx_hk
用户的主用户组为mysql_rwx_group
用户组,并删除创建用户时自动生成的同用户名的主用户组mysql_rwx_hk
,然后查看mysql
相关的用户组:
sudo usermod -g mysql_rwx_group mysql_rwx_hk && sudo groupdel mysql_rwx_hk && cat /etc/group | grep 'mysql'
命令解析:为新用户添加附加用户组
将用户添加到一个用户组中,可以使用以下命令:
sudo usermod -aG <group_name> <username1>
其中 <group_name>
是目标用户组的名称,<username1>
是要添加到该用户组的用户名。
注意:使用 -aG
选项会将指定的用户追加到目标用户组的附加用户列表中,而不会覆盖其现有的附加用户组。这样,这些用户将成为指定用户组的成员。
命令解析:查看用户组
例如,假设您要查看用户组 <group_name>
,请运行以下命令:
cat /etc/group | grep '<group_name>'
使用 cat
命令读取 /etc/group
文件,文件中的每一行记录表示一个用户组,包括组名、组密码(通常为空)。
比如查看mysql
相关的用户组(可以发现创建'mysql_rwx_hk'
用户的同时,自动创建了同名的用户组'mysql_rwx_hk'
):
cat /etc/group | grep 'mysql'
可以看到每个组的名称(如 group1、group2、group3),以及组密码(表示为 x,实际密码存储在 /etc/shadow 文件中)。最后,每个组都列出了属于该组的用户列表。
在某些系统中,用户组的命名规则可能与用户名相同或类似,导致在 /etc/group
文件中看到用户组名称与您的用户名相匹配,如图中的'mysql_rwx_hk'
。
这是因为在某些 Linux 发行版中,默认情况下会为每个用户创建一个同名的用户组,用于归属该用户。这样做的目的是使得每个用户都有自己独立的用户组(这个用户组还是主用户组),方便管理权限。因此,在输出的 /etc/group
文件中,您可能会注意到您的用户名在最左侧也列出了对应的用户组。这是正常情况。
命令解析:更改用户的主用户组为指定用户组
在更改用户的主用户组后,可能需要注销并重新登录才能使更改生效)以下是更改主用户组的步骤,不更改执行groupdel
删除主用户组时会报错groupdel: cannot remove the primary group of user 'username'
)。
确认用户当前所属的用户组以及主用户组,将命令中的 “用户名” 替换为您想要更改主用户组的实际用户名:
id 用户名
更改用户的主用户组:
sudo usermod -g 新的用户组 用户名
4. 设置文件和目录的权限
4.1 设置目录及其子文件的属主、属组
设置/my_soft/db/mysql
目录及其子文件的属主为mysql_rwx_hk
,属组为mysql_rwx_group
:
chown -R mysql_rwx_hk:mysql_rwx_group /my_soft/db/mysql && cd /my_soft/db/mysql && ll && cd /my_soft/db/mysql/mysql-8.0.36 && ll
注意:用户也要改,用户root
改为mysql_rw_hk
,因为后面初始化MySQL也是用mysql_rw_hk
用户,否则初始化生成日志的时候,会没有权限操作文件,因为新文件创建的属主和属组还是root。
4.2 设置目录及其子文件的权限
为/my_soft/db/mysql
目录及其子文件分配权限,给属主(u)和属组(g)分配读、写、执行权限,给其他用户(o)分配读和执行权限:
chmod -R ug=rwx /my_soft/db/mysql && chmod o=rx /my_soft/db/mysql && cd /my_soft/db/mysql/mysql-8.0.36/ && cd /my_soft/db/mysql/mysql-8.0.36 && ll
命令解析:查看文件/目录的权限和归属
使用ll
就可以查看文件/目录的权限和归属
ll
补充:目录的权限和归属权限的结构
目录的权限和归属权限的结构是这样划分的,从左到右对应,属主,属组,其他用户,每个对应三个权限:
补充:认识三种访问权限、三种角色
访问权限:
- 读取r:允许查看文件内容、显示目录列表
- 写入w:允许修改文件内容,允许在目录中新建、移动、删除文件或子目录
- 可执行x:允许运行程序、切换目录归属
三种角色:
- 属主(user): 文件或目录的所有者
- 属主(group): 文件或目录的所有者
- 其他用户
命令解析:设置目录与文件归属
在Linux系统中,你可以使用chown和chgrp命令来设置文件和目录的所有者(owner)和所属组(group)。
以下是一些基本的用法示例:
- 更改文件所有者:
chown newowner filename
- 更改文件所属组:
chgrp newgroup filename
- 同时更改文件所有者和所属组:
chown newowner:newgroup filename
- 递归更改目录中所有文件和子目录的所有者和所属组:
chown -R newowner:newgroup directory
:
后面的部分表示所属组,如果你只想更改所属组而保持所有者不变,可以留空。如果你只想更改所有者而保持所属组不变,可以省略冒号前的部分。
命令解析:设置文件和目录的权限chmod,chmod命令格式
chmod -R [ugoa] [+-=] [rwx] 文件或目录
- [ugoa]: 表示用户类别,包括以下选项:
u
: 文件或目录的所有者(user)g
: 文件或目录的所属组(group)o
: 其他用户a
: 所有用户(等同于 ugo 的组合)
- [±=]: 表示操作符,包括以下选项:
+
: 添加权限-
: 移除权限=
: 设置权限,覆盖之前的权限设置
- [rwx]: 表示权限,包括以下选项:
r
: 读权限w
: 写权限x
: 执行权限
- [-R]: 如果你想使用
chmod
命令为文件、目录及其子目录设置权限,你可以使用-R
选项,它表示递归操作。
权限及其对应符号,以及二进制表示方法
权限 | 符号 | 二进制 |
---|---|---|
读、写、执行 | rwx | 111 |
读、写 | rw- | 110 |
读、执行 | r-x | 101 |
读 | r– | 100 |
写、执行 | -wx | 011 |
写 | -w- | 010 |
执行 | –x | 001 |
无 | — | 000 |
命令解析:删除用户及其权限
要删除用户及其权限,需要执行以下操作:
-
删除用户的登录账号:使用 userdel 命令来删除用户的登录账号。语法如下:
sudo userdel -r 用户名
其中,
-r
选项将会连同用户的家目录一并删除。如果不需要删除用户的家目录,可以省略-r
选项。 -
撤销用户的特权:使用
sudo
命令和编辑器打开/etc/sudoers
文件,将该用户从该文件中的特权行中删除。请确保在编辑此文件时谨慎操作,以免影响其他用户或损坏文件。首先,以
root
用户身份打开/etc/sudoers
文件(建议使用 visudo 命令,它可以检查文件的语法错误):sudo visudo /etc/sudoers
找到包含用户特权的行(通常以 %组名 或 用户名 开头),将该行删除或注释掉(添加 # 符号在行首)。
保存修改后的文件并退出编辑器。
-
撤销用户对文件和目录的权限:使用
chown
和chgrp
命令修改用户对文件和目录的所有权和所属组。使用-R
选项可以递归地将所有子目录和文件的权限一并更改。sudo chown -R 新的所有者:新的所属组 文件或目录路径
5. 配置MySQL环境变量及配置文件my.cnf
在Linux系统上,默认情况下,MySQL的配置文件通常被放置在/etc目录下。这是因为/etc目录是用于存放系统配置文件的标准位置。
然而,MySQL的配置文件位置不是固定的,可以根据需要进行自定义。MySQL服务器在启动时会按照一定的顺序搜索配置文件,并选择第一个找到的配置文件进行加载。
以下是MySQL查找配置文件的顺序:
- 如果指定了
--defaults-file
选项,MySQL将使用该选项指定的配置文件路径。 - MySQL会查找
/etc/my.cnf
或/etc/mysql/my.cnf
或/usr/local/mysql/etc/my.cnf
文件,这是默认的全局配置文件。 - MySQL会查找在
$MYSQL_HOME/my.cnf
路径下的配置文件,其中$MYSQL_HOME
是MySQL安装目录。 - MySQL还会查找用户主目录下的
.my.cnf
文件,例如~/.my.cnf
,这里存放的是特定用户的配置。
所以,虽然默认情况下建议将MySQL的配置文件放在/etc目录下,但是您仍然可以在其他位置创建并指定自定义的配置文件路径。只需确保MySQL能够找到并加载该配置文件即可。
我个人喜欢和安装目录放在一起,这样找起来比较方便。
5.1 配置MySQL环境变量
在Linux系统中,$MYSQL_HOME
是一个环境变量,用于指定MySQL的安装目录。默认情况下,MySQL并没有自动设置这个环境变量。不设置的话,使用mysql命令,会不识别。
如果希望使用$MYSQL_HOME
作为 MySQL 配置文件的搜索路径,需要手动设置该环境变量。可以通过以下步骤进行设置:
-
打开用户主目录下的
.bashrc
文件:vim ~/.bashrc
-
添加 MySQL 环境变量相关的配置:
# MySQL Configuration MYSQL_HOME="/my_soft/db/mysql/mysql-8.0.36" MYSQL_UNIX_PORT="/my_soft/db/mysql/mysql-8.0.36/sockets/mysqld/mysql.sock" if ! [[ "$PATH" =~ "$MYSQL_HOME/bin:" ]]; then PATH="$MYSQL_HOME/bin:$PATH" fi export PATH export MYSQL_HOME export MYSQL_UNIX_PORT
参数解析:
- 设置
MYSQL_HOME
变量:MySQL 安装目录 - 设置
MYSQL_UNIX_PORT
变量:这个环境变量用于指定 Unix 套接字文件(Unix socket file)的路径。Unix 套接字文件是一种在同一台机器上的进程间进行通信的方法,通常用于本地连接 MySQL 服务器。当你设置了MYSQL_UNIX_PORT
环境变量后,MySQL 客户端和其他相关工具会识别这个环境变量,并使用其中指定的路径来连接 MySQL 服务器,而不是使用默认的 Unix 套接字路径。当你运行类似mysql -uroot -p
的命令时,MySQL 客户端会检查MYSQL_UNIX_PORT
环境变量,并使用其中指定的路径连接到 MySQL 服务器。不需要mysql -uroot -p --socket=/my_soft/db/mysql/mysql-8.0.36/sockets/mysqld/mysql.sock
- 检查
MYSQL_HOME
是否已经在PATH
中,如果没有,则将它添加到PATH
的最前面 - 使用
export
导出了变量,使其成为环境变量
- 设置
-
保存并关闭文件,然后运行以下命令使更改生效:
source ~/.bashrc
-
验证是否生效:
mysql --version
通过上述步骤,您已经设置了$MYSQL_HOME
环境变量并将其指向MySQL的安装目录。
注意:即使设置了$MYSQL_HOME
环境变量,MySQL也会按照一定顺序搜索配置文件,而不仅仅是检查$MYSQL_HOME/my.cnf
路径。因此,确保在正确位置创建并命名配置文件以供MySQL找到和加载。
5.2 编写MySQL配置文件my.cnf
在/my_soft/db/mysql/mysql-8.0.36/conf
创建配置文件my.cnf
:
vim /my_soft/db/mysql/mysql-8.0.36/conf/my.cnf
my.cnf配置文件概览
配置文件启用 X Plugin相关配置,使用自定义socket路径。
内容如下
#
###
### my.cnf for MySQL 8.0.36版本
###
### 服务器配置:
### - 2C4G(分配1G内存给MySQL),CPU为1颗(物理核心数)2核(逻辑核心数)
### - 磁盘(通用型SSD云硬盘)50GB,单盘最大 IOPS 10000,单盘最大吞吐量 190MB/s
###
### 查看 服务器物理核心数/逻辑核心数 命令:
### - Linux 查看物理核心数:cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l
### - Linux 查看逻辑核心数:cat /proc/cpuinfo | grep "processor" | wc -l
###
### 注意:
### - 个别建议可能需要根据实际情况作调整,请自行判断,本人不对这些建议结果负相应责任
### - 当配置中提到服务器有多个 CPU 核心时,通常是指物理核心而不是逻辑核心
### - 逻辑核心数通常是物理核心数乘以每个物理核心的线程数(比如超线程技术下的线程数)
### - 在一些支持超线程的 CPU 上,逻辑核心数可能会大于物理核心数
###
#
########################################################################################################################
###
### [client] 节:用于配置与 MySQL 客户端相关的参数。只影响 MySQL 客户端工具的连接行为。例如连接到 MySQL 服务器时使用的用户名、密码、主机等。
###
########################################################################################################################
[client]
# 设置连接 MySQL 客户端时要使用的套接字路径
# 套接字是通信两端之间的一种通信机制,用于进程间的通信
#
# socket 文件路径在配置文件中设置不完整会报错,如下:
# ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
#
# 这一般是由于修改了配置文件导致的,如修改“[mysql]”选项下的“socket”参数,而未指定“[client]”、“[mysql]”选项的“socket”参数而引起的,
# 导致mysql使用默认的socket文件位置去寻找socket文件,从而导致未找到socket文件而引发此错误。
# 解决办法是修改配置文件,将“[mysql]”、“[client]”、“[mysql]”选项的“socket”参数值,指向的socket文件路径完全一致即可。
socket = /my_soft/db/mysql/mysql-8.0.36/sockets/mysqld/mysql.sock
# 设置连接 MySQL 服务器的端口号
# 在 [client] 部分指定 port 参数将影响 MySQL 客户端连接 MySQL 服务器时所使用的端口
port = 3306
########################################################################################################################
###
### [mysql] 节:用于配置 MySQL 客户端相关的参数,类似于 [client] 节。只影响 MySQL 客户端的行为。例如监听的端口、数据存储路径等。
###
########################################################################################################################
[mysql]
# 设置连接 MySQL 客户端时要使用的套接字路径
# 套接字是通信两端之间的一种通信机制,用于进程间的通信
socket = /my_soft/db/mysql/mysql-8.0.36/sockets/mysqld/mysql.sock
# 设置 MySQL 命令行提示符的格式
# 该参数允许您自定义命令行提示符,以便在交互式使用 MySQL 时提供更多信息
# 参考网址:https://dev.mysql.com/doc/refman/8.0/en/mysql-commands.html,最后面表格有参数说明
#
# 可用的值包括:
# - \C:当前连接标识符
# - \c:为您发出的每个语句递增的计数器
# - \D:当前完整日期
# - \d:当前数据库未选中(使用默认数据库)
# - \h:服务器主机名
# - \l:当前分隔符
# - \m:当前时间的分钟数
# - \n:换行符
# - \O:当前月份的三个字母格式(Jan、Feb、...)
# - \o:数字格式的当前月份
# - \P:上午/下午
# - \p:当前 TCP/IP 端口或套接字文件
# - \R:当前时间,采用 24 小时军用时间 (0–23)
# - \r:当前时间,标准 12 小时时间 (1–12)
# - \S:分号
# - \s:当前时间的秒数
# - \T:如果当前会话位于事务块内,则打印星号 (*)(从 MySQL 8.0.28 开始)
# - \t:制表符
# - \U:您的完整 user_name@host_name 帐户名
# - \u:你的用户名
# - \v:服务器版本
# - \w:三字母格式的当前星期几(Mon、Tue、...)
# - \Y:当前年份,四位数字
# - \y:当前年份,两位数
# - \_:一个空格
# - \ :一个空格(反斜杠后面有一个空格)
# - \':单引号
# - \":双引号
# - \\:由于反斜杠 \ 在字符串中具有特殊含义,因此需要进行转义,使用双反斜杠 \\ 来表示单个反斜杠
prompt = (\\u@\\h) [\\d] \\r:\\m:\\s>\\_
########################################################################################################################
###
### [mysqld] 节:用于配置 MySQL 服务器的参数。只影响 MySQL 服务器本身的配置
###
########################################################################################################################
[mysqld]
################################################ MySQL X Plugin 设置 开始 ################################################
###---------------------------------------------------------------------------------------------------------------------
###
### X Plugin [参考网址:https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html]
###
### X Plugin 是 MySQL 8 中引入的插件,它主要用于支持新的 MySQL Shell 和 X Protocol,以下是一些 X Plugin 的主要功能和新特性:
### - 1. X Protocol:
### X Plugin 引入了 X Protocol,这是一种面向文档型数据库的通信协议。
### 与传统的 SQL 协议相比,X Protocol 更适合处理 JSON 数据和文档型存储。它允许客户端以更灵活的方式与 MySQL 服务器进行通信。
### - 2. X MySQL Shell:
### X Plugin 与 MySQL Shell 紧密集成。MySQL Shell 是一个交互式的命令行工具,支持 JavaScript、Python 和 SQL。
### 它允许开发人员使用多种编程语言和 SQL 查询与 MySQL 数据库进行交互。
### - 3. X Document Store 支持:
### X Plugin 支持 MySQL 的 Document Store 功能。这使得 MySQL 可以作为关系型数据库和文档型数据库同时使用。