没有合适的资源?快使用搜索试试~ 我知道了~
首页MySQL内核深度解析:走向工程师进阶
MySQL内核深度解析:走向工程师进阶
需积分: 50 149 下载量 100 浏览量
更新于2024-07-06
2
收藏 18.06MB PDF 举报
"《从根儿上理解MySQL》是一本面向已有基本数据库知识(如增删改查和SQL语言基础)的IT从业者的小白进阶书籍,而非初学者入门教程。作者并非专业的大佬或学术专家,而是以通俗易懂的方式讲解MySQL的工作原理及其对程序员的影响,特别强调通过本书帮助读者解决实际工作和面试中的问题,提升技术能力。 该书不同于传统的严谨学术著作,主要采用图表形式来阐述,避免冗长的理论论述。书名中的“从根儿上理解”是吸引读者注意的策略,并非真正意义上的基础知识讲解。书中强调阅读时需保持专注,因为内容是有结构和依赖性的,比如在理解InnoDB数据页结构之前,前文的知识是必不可少的。 购买这本书的建议是作为专业学习的一部分,而不是随意的碎片化阅读。由于是Markdown编写,电脑端阅读体验佳,但手机阅读可能会影响效果。为了获得最佳阅读体验,读者需要按照书中的逻辑顺序逐步学习,确保概念之间的连贯性,这样才能更有效地提升MySQL技术素养。 阅读此书并不能立即使人成为业界大佬或数据库专家,但它为职业发展提供了一个坚实的基础。如果对MySQL有进一步兴趣,鼓励读者深入研究,或许能发掘出成为数据库大师的潜力。《从根儿上理解MySQL》是一本实用且系统化的MySQL进阶指南,适合希望提升数据库技能的程序员使用。"
资源详情
资源推荐
![](https://csdnimg.cn/release/download_crawler_static/80654842/bg10.jpg)
mysql> SHOW ENGINES;
+--------------------+---------+----------------------------------------------------------
------+--------------+------+------------+
| Engine | Support | Comment
| Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------
------+--------------+------+------------+
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign key
s | YES | YES | YES |
| MRG_MYISAM | YES | Collection of identical MyISAM tables
| NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables
| NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disapp
ears) | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine
| NO | NO | NO |
| CSV | YES | CSV storage engine
| NO | NO | NO |
| ARCHIVE | YES | Archive storage engine
| NO | NO | NO |
| PERFORMANCE_SCHEMA | YES | Performance Schema
| NO | NO | NO |
| FEDERATED | NO | Federated MySQL storage engine
| NULL | NULL | NULL |
+--------------------+---------+----------------------------------------------------------
------+--------------+------+------------+
9 rows in set (0.00 sec)
mysql>
其中的 Support 列表示该存储引擎是否可用, DEFAULT 值代表是当前服务器程序的默认存储引擎。 Comment 列
是对存储引擎的一个描述,英文的,将就着看吧。 Transactions 列代表该存储引擎是否支持事务处理。 XA 列代
表着该存储引擎是否支持分布式事务。 Savepoints 代表着该列是否支持部分事务回滚。
小贴士:
好吧,也许你并不知道什么是个事务、更别提分布式事务了,这些内容我们在后边的章节会详细唠叨,
现在瞅一眼看个新鲜就得了。
1.8.2 设置表的存储引擎
我们前边说过,存储引擎是负责对表中的数据进行提取和写入工作的,我们可以为不同的表设置不同的存储引
擎,也就是说不同的表可以有不同的物理存储结构,不同的提取和写入方式。
1.8.2.1 创建表时指定存储引擎
我们之前创建表的语句都没有指定表的存储引擎,那就会使用默认的存储引擎 InnoDB (当然这个默认的存储引
擎也是可以修改的,我们在后边的章节中再说怎么改)。如果我们想显式的指定一下表的存储引擎,那可以这么
写:
CREATE TABLE 表名(
建表语句;
) ENGINE = 存储引擎名称;
![](https://csdnimg.cn/release/download_crawler_static/80654842/bg11.jpg)
比如我们想创建一个存储引擎为 MyISAM 的表可以这么写:
mysql> CREATE TABLE engine_demo_table(
-> i int
-> ) ENGINE = MyISAM;
Query OK, 0 rows affected (0.02 sec)
mysql>
1.8.2.2 修改表的存储引擎
如果表已经建好了,我们也可以使用下边这个语句来修改表的存储引擎:
ALTER TABLE 表名 ENGINE = 存储引擎名称;
比如我们修改一下 engine_demo_table 表的存储引擎:
mysql> ALTER TABLE engine_demo_table ENGINE = InnoDB;
Query OK, 0 rows affected (0.05 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql>
这时我们再查看一下 engine_demo_table 的表结构:
mysql> SHOW CREATE TABLE engine_demo_table\G
*************************** 1. row ***************************
Table: engine_demo_table
Create Table: CREATE TABLE `engine_demo_table` (
`i` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.01 sec)
mysql>
可以看到该表的存储引擎已经改为 InnoDB 了。
2 第2章 MySQL的调控按钮-启动选项和系统变量
标签:MySQL 是怎样运行的
如果你用过手机,你的手机上一定有一个设置的功能,你可以选择设置手机的来电铃声、设置音量大小、设置解
锁密码等等。假如没有这些设置功能,我们的生活将置于尴尬的境地,比如在图书馆里无法把手机设置为静音,
无法把流量开关关掉以节省流量,在别人得知解锁密码后无法更改密码~ MySQL 的服务器程序和客户端程序也
有很多设置项,比如对于 MySQL 服务器程序,我们可以指定诸如允许同时连入的客户端数量、客户端和服务器通
信方式、表的默认存储引擎、查询缓存的大小吧啦吧啦的设置项。对于 MySQL 客户端程序,我们之前已经见识过
了,可以指定需要连接的服务器程序所在主机的主机名或IP地址、用户名及密码等信息。
这些设置项一般都有各自的默认值,比方说服务器允许同时连入的客户端的默认数量是 151 ,表的默认存储引擎
是 InnoDB ,我们可以在程序启动的时候去修改这些默认值,对于这种在程序启动时指定的设置项也称之为启动
选项(startup options),这些选项控制着程序启动后的行为。在 MySQL 安装目录下的 bin 目录中的各种可执行
文件,不论是服务器相关的程序(比如 mysqld 、 mysqld_safe )还是客户端相关的程序(比如 mysql 、
mysqladmin ),在启动的时候基本都可以指定启动参数。这些启动参数可以放在命令行中指定,也可以把它们
![](https://csdnimg.cn/release/download_crawler_static/80654842/bg12.jpg)
y q ),在启动的时候基本都可以指定启动参数。这些启动参数可以放在命令行中指定,也可以把它们
放在配置文件中指定。下边我们会以 mysqld 为例,来详细唠叨指定启动选项的格式。需要注意的一点是,我们
现在要唠叨的是设置启动选项的方式,下边出现的启动选项不论大家认不认识,先不用去纠结每个选项具体的作
用是啥,之后我们会对一些重要的启动选项详细唠叨。
2.1 在命令行上使用选项
如果我们在启动客户端程序时在 -h 参数后边紧跟服务器的IP地址,这就意味着客户端和服务器之间需要通过
TCP/IP 网络进行通信。因为我的客户端程序和服务器程序都装在一台计算机上,所以在使用客户端程序连接服
务器程序时指定的主机名是 127.0.0.1 的情况下,客户端进程和服务器进程之间会使用 TCP/IP 网络进行通信。
如果我们在启动服务器程序的时候就禁止各客户端使用 TCP/IP 网络进行通信,可以在启动服务器程序的命令行
里添加 skip-networking 启动选项,就像这样:
mysqld --skip-networking
可以看到,我们在命令行中指定启动选项时需要在选项名前加上 -- 前缀。另外,如果选项名是由多个单词构成
的,它们之间可以由短划线 - 连接起来,也可以使用下划线 _ 连接起来,也就是说 skip-networking 和
skip_networking 表示的含义是相同的。所以上边的写法与下边的写法是等价的:
mysqld --skip_networking
在按照上述命令启动服务器程序后,如果我们再使用 mysql 来启动客户端程序时,再把服务器主机名指定为
127.0.0.1 (IP地址的形式)的话会显示连接失败:
mysql -h127.0.0.1 -uroot -p
Enter password:
ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (61)
这就意味着我们指定的启动选项 skip-networking 生效了!
再举一个例子,我们前边说过如果在创建表的语句中没有显式指定表的存储引擎的话,那就会默认使用 InnoDB
作为表的存储引擎。如果我们想改变表的默认存储引擎的话,可以这样写启动服务器的命令行:
mysqld --default-storage-engine=MyISAM
我们现在就已经把表的默认存储引擎改为 MyISAM 了,在客户端程序连接到服务器程序后试着创建一个表:
mysql> CREATE TABLE sys_var_demo(
-> i INT
-> );
Query OK, 0 rows affected (0.02 sec)
这个定义语句中我们并没有明确指定表的存储引擎,创建成功后再看一下这个表的结构:
mysql> SHOW CREATE TABLE sys_var_demo\G
*************************** 1. row ***************************
Table: sys_var_demo
Create Table: CREATE TABLE `sys_var_demo` (
`i` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8
1 row in set (0.01 sec)
可以看到该表的存储引擎已经是 MyISAM 了,说明启动选项 default-storage-engine 生效了。
所以在启动服务器程序的命令行后边指定启动选项的通用格式就是这样的:
![](https://csdnimg.cn/release/download_crawler_static/80654842/bg13.jpg)
--启动选项1[=值1] --启动选项2[=值2] ... --启动选项n[=值n]
也就是说我们可以将各个启动选项写到一行中,各个启动选项之间使用空白字符隔开,在每一个启动选项名称前
边添加 -- 。对于不需要值的启动选项,比方说 skip-networking ,它们就不需要指定对应的值。对于需要指定
值的启动选项,比如 default-storage-engine 我们在指定这个设置项的时候需要显式的指定它的值,比方说
InnoDB 、 MyISAM 啦什么的~ 在命令行上指定有值的启动选项时需要注意,选项名、=、选项值之间不可以有空
白字符,比如写成下边这样就是不正确的:
mysqld --default-storage-engine = MyISAM
每个MySQL程序都有许多不同的选项。大多数程序提供了一个--help选项,你可以查看该程序支持的全部启动选
项以及它们的默认值。例如,使用 mysql --help 可以看到 mysql 程序支持的启动选项, mysqld_safe --help
可以看到 mysqld_safe 程序支持的启动选项。查看 mysqld 支持的启动选项有些特别,需要使用 mysqld --
verbose --help 。
2.1.1 选项的长形式和短形式
我们前边提到的 skip-networking 、 default-storage-engine 称之为长形式的选项(因为它们很长),设计
MySQL 的大叔为了我们使用的方便,对于一些常用的选项提供了短形式,我们列举一些具有短形式的启动选项来
瞅瞅( MySQL 支持的短形式选项太多了,全列出来会刷屏的):
长形式 短形式 含义
--host -h
主机名
--user -u
用户名
--password -p
密码
--port -P
端口
--version -V
版本信息
短形式的选项名只有一个字母,与使用长形式选项时需要在选项名前加两个短划线 -- 不同的是,使用短形式选
项时在选项名前只加一个短划线 - 前缀。有一些短形式的选项我们之前已经接触过了,比方说我们在启动服务器
程序时指定监听的端口号:
mysqld -P3307
使用短形式指定启动选项时,选项名和选项值之间可以没有间隙,或者用空白字符隔开( -p 选项有些特殊, -p
和密码值之间不能有空白字符),也就是说上边的命令形式和下边的是等价的:
mysqld -P 3307
另外,选项名是区分大小写的,比如 -p 和 -P 选项拥有完全不同的含义,大家需要注意一下。
2.2 配置文件中使用选项
在命令行中设置启动选项只对当次启动生效,也就是说如果下一次重启程序的时候我们还想保留这些启动选项的
话,还得重复把这些选项写到启动命令行中,这样真的神烦唉!于是设计 MySQL 的大叔们提出一种 配置文件
(也称为 选项文件 )的概念,我们把需要设置的启动选项都写在这个配置文件中,每次启动服务器的时候都从
这个文件里加载相应的启动选项。由于这个配置文件可以长久的保存在计算机的硬盘里,所以只需我们配置一
次,以后就都不用显式的把启动选项都写在启动命令行中了,所以我们推荐使用配置文件的方式来设置启动选
项。
2.2.1 配置文件的路径
![](https://csdnimg.cn/release/download_crawler_static/80654842/bg14.jpg)
MySQL 程序在启动时会寻找多个路径下的配置文件,这些路径有的是固定的,有的是可以在命令行指定的。根据
操作系统的不同,配置文件的路径也有所不同,我们分开看一下。
2.2.1.1 Windows操作系统的配置文件
在 Windows 操作系统中, MySQL 会按照下列路径来寻找配置文件:
路径名 备注
%WINDIR%\my.ini , %WINDIR%\my.cnf
C:\my.ini , C:\my.cnf
BASEDIR\my.ini , BASEDIR\my.cnf
defaults-extra-file
命令行指定的额外配置文件路径
%APPDATA%\MySQL\.mylogin.cnf
登录路径选项(仅限客户端)
在阅读这些 Windows 操作系统下配置文件路径的时候需要注意一些事情:
在给定的前三个路径中,配置文件可以使用 .ini 的扩展名,也可以使用 .cnf 的扩展名。
%WINDIR% 指的是你机器上 Windows 目录的位置,通常是 C:\WINDOWS ,如果你不确定,可以使用这个命令
来查看:
echo %WINDIR%
BASEDIR 指的是 MySQL 安装目录的路径,在我的 Windows 机器上的 BASEDIR 的值是:
C:\Program Files\MySQL\MySQL Server 5.7
第四个路径指的是我们在启动程序时可以通过指定 defaults-extra-file 参数的值来添加额外的配置文件路
径,比方说我们在命令行上可以这么写:
mysqld --defaults-extra-file=C:\Users\xiaohaizi\my_extra_file.txt
这样 MySQL 服务器启动时就可以额外在 C:\Users\xiaohaizi\my_extra_file.txt 这个路径下查找配置文
件。
%APPDATA% 表示 Windows 应用程序数据目录的值,可以使用下列命令查看:
echo %APPDATA%
列表中最后一个名为 .mylogin.cnf 配置文件有点儿特殊,它不是一个纯文本文件(其他的配置文件都是纯
文本文件),而是使用 mysql_config_editor 实用程序创建的加密文件。文件中只能包含一些用于启动客户
端软件时连接服务器的一些选项,包括 host 、 user 、 password 、 port 和 socket 。而且它只能被客户
端程序所使用。
小贴士:
mysql_config_editor实用程序其实是MySQL安装目录下的bin目录下的一个可执行文件,这个实用程序
有专用的语法来生成或修改 .mylogin.cnf 文件中的内容,如何使用这个程序不是我们讨论的主题,可
以到MySQL的官方文档中查看。
2.2.1.2 类Unix操作系统中的配置文件
在类 UNIX 操作系统中, MySQL 会按照下列路径来寻找配置文件:
路径名 备注
/etc/my.cnf
剩余388页未读,继续阅读
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![r](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://profile-avatar.csdnimg.cn/dd56797ecb6f49948314314139769b63_qq_40222895.jpg!1)
你若盛开|清风自来
- 粉丝: 5
- 资源: 3
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
最新资源
- 岩石滑动与断层冲击地压:声发射特征分析
- 新时代煤炭工业八大战略新取向剖析
- 开采强度对华亭矿区冲击地压危险性的影响分析
- 新安煤矿探采对比:影响安全生产的关键因素与技术支撑
- 210MW循环流化床锅炉引风机变频改造优化与节能效果
- 浅埋煤层开采沉陷预测:方法应用与影响分析
- 优化巷道过陷落柱支护方案:数值模拟与现场试验
- 坚硬顶板定向断裂爆破技术:安全高效采煤新方案
- 北航2019算法课作业解析:投资策略与凸子多边形优化
- 断层破碎带垮冒下堆积体边界抗力分布关键影响因素
- 哈拉沟选煤厂优化末煤系统提高效率与处理能力
- 瓦斯涌出影响下采动煤体蠕变失稳研究
- 提升煤矿装载效率的可控箕斗定量装载设备设计
- 水分调控下烟煤瓦斯吸附特性对比研究
- 重介质悬浮液密度控制硬件设计与选型探讨
- 坚硬顶板巷道支护参数设计:现场测试与数值分析
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)