手记

【学习打卡】第11天 MySQL面试指南 第4章

课程名称:MySQL面试指南

课程章节:对比配置文件同MySQL运行配置参数

主讲老师:sqlercn

课程内容:

今天学习的内容包括:

关于MySQL的变量

比较系统运行配置和配置文件中的配置

课程收获:

关于MySQL的变量

MySQL的变量分为两种:系统变量(System Variable)、用户变量(User Variable)。

其中系统变量又根据作用域区分为:全局变量(Global Variable)、会话变量(Session Variable)。

为了时运行时设置的环境变量能保存到配置文件中,以便下一次自动载入,因此诞生了
持续的全局变量(Persist Global Variable),通过persist设置的全局变量会写入一个配置文件中,
MySQL重启后会自动载入。

+----------+----------+---------------------------------------------------------------+
|   类型   |   子类    |                           说明                                |
+----------+----------+---------------------------------------------------------------+
|          |          | MySQL服务器启动时会使用其软件内置的变量(俗称写死在代码中的)      |
|          |          | 和配置文件中的变量(如果允许,是可以覆盖源代码中的默认值的)       |
|          |          | 来初始化整个MySQL服务器的运行环境,这些变量通常就是我们所说的      |
|          |          | 全局变量。                                                     |
|          |          |---------------------------------------------------------------+
|          | 全局变量  | show global variables;             | 查看所有全局变量          |
|          |  Global  | show global variables like 'sql_%';| 查看部分全局变量          |
|          | Variable | select @@global.sql_mode;          | 查看某个全局变量          |
|          |          |------------------------------------+--------------------------+
|          |          | set global sql_mode='xxx';         | 设置某个全局变量          |
|          |          | set @@global.sql_mode='xxx';       | 设置某个全局变量          |
|          |          |------------------------------------+--------------------------+
|          |          | set persist sql_mode='xxx';        | 设置某个全局变量并写入配置 |
| 系统变量  |          | set @@persist.sql_mode='xxx';      | 设置某个全局变量并写入配置 |
|  System  |----------+---------------------------------------------------------------+
| Variable |          | 当有客户端连接到MySQL服务器的时候,MySQL服务器会将这些全局变量     |
|  ( @@ )  |          | 的大部分复制一份作为这个连接客户端的会话变量,这些会话变量与客户端  |
|          |          | 连接绑定,连接的客户端可以修改其中允许修改的变量,但是当连接断开时  |
|          |          | 这些会话变量全部消失,重新连接时会从全局变量中重新复制一份。        |
|          |          |---------------------------------------------------------------+
|          | 会话变量  | show session variables;             | 查看所有会话变量         |
|          | Session  | show session variables like 'sql_%';| 查看部分会话变量          |
|          | Variable | select @@session.sql_mode;          | 查看某个会话变量          |
|          |          |-------------------------------------+-------------------------+
|          |          | set session sql_mode='xxx';         | 设置某个会话变量          |
|          |          | set @@session.sql_mode='xxx';       | 设置某个会话变量          |
+----------+----------+----------------------------------------------------------------+
|          |          | 当客户端连接上MySQL服务器之后就可以自己定义一些变量,这些变量在     |
|          |          | 整个连接过程中有效,当连接断开时,这些用户变量消失。                |
|          | 用户变量  |---------------------------------------------------------------+
|          |   User   | select @v1;                         | 查看某个用户变量          |
|          | Variable |-------------------------------------+-------------------------+
|          |  ( @ )   | set @v1 = 'xxx';                    | 设置某个用户变量          |
| 用户变量  |          | select @v1 := 'xxx';                | 设置某个用户变量在查询时   |
|  User    |----------+-------------------------------------+--------------------------+
| Variable |          | 通常由 declare 关键字来定义,经常出现在存储过程中,非常类似于C和    |
|          |          | C++函数中的局部变量,而存储过程的参数也和这种变量非常相似,基本上    |
|          |          | 可以作为同一种变量来对待。                                        |
|          | 局部变量  |----------------------------------------------------------------+
|          |  Local   | create [procedure|function] xxx() begin [局部域] end;           |
|          | Variable |----------------------------------------------------------------+
|          |          | declare num int default 0;          | 定义某个局部变量           |
|          |          | set num = num + 1;                  | 修改某个局部变量           |
+----------+----------+-------------------------------------+--------------------------+

比较系统运行配置和配置文件中的配置

  • MySQL8.0以前如果动态修改了global的变量,要手动在my.cnf中做相同的修改。
  • MySQL8.0以后可以通过persist动态修改global变量,修改的值会自动存入到mysqld-auto.cnf中。
  • 使用pt-config-diff工具比较配置文件:
    pt-config-diff h=localhost,P=3306,u=root,p=1234 /etc/mysql/my.cnf
    比较两个运行中的MySQL的系统变量差异:
    pt-config-diff h=localhost,P=3306,u=root,p=1234 h=192.168.1.107,P=3306,u=root,p=4321

0人推荐
随时随地看视频
慕课网APP