没有合适的资源?快使用搜索试试~ 我知道了~
首页MySQL内核解析:小白进阶指南
MySQL内核解析:小白进阶指南
需积分: 11 33 下载量 27 浏览量
更新于2024-06-26
收藏 18.11MB PDF 举报
"从根儿上理解MySQL" 这本名为《从根儿上理解MySQL》的小册子并非数据库初学者的入门教程,而是针对已经具备基本SQL知识,了解增删改查操作的读者设计的。作者强调,这本书并不追求学术严谨,也不是传统意义上的教材,而是通过大量图表解释MySQL的工作原理,适合那些希望深入了解MySQL内核机制的程序员。 小册子的目标不是教授数据库设计的理论知识,例如概念设计、逻辑设计、物理设计或范式化,而是聚焦于MySQL的核心概念,帮助读者理解其内部运作方式,从而在实际工作中更有效地解决问题,应对面试挑战。虽然书名带有吸引眼球的成分,但作者明确指出,阅读此书并不能立刻让人成为行业专家,而是旨在促进读者的技术成长。 作者建议读者在阅读时要投入完整的时间,避免碎片化的学习,因为技术知识需要系统性的学习才能真正掌握。书本采用Markdown编写,适合在电脑端阅读,尽管也可以在手机上阅读,但体验可能不如前者。每个章节之间存在依赖性,因此读者需要按照顺序逐步学习,例如在理解InnoDB数据页结构之前,应先完成前文的学习。 书中还提及作者对某些知识传播者的看法,如认为罗辑思维后期过于商业化,而高晓松的节目则相对轻松有趣。这部分内容虽然与MySQL技术本身无关,但反映了作者对知识传播的态度和期望。 《从根儿上理解MySQL》是一本面向有一定基础的程序员,旨在通过直观易懂的方式讲解MySQL内核原理的进阶读物。它要求读者有一定的SQL背景,但承诺能帮助读者提升对MySQL的理解,以利于他们在实际工作和面试中更好地运用这一重要数据库系统。
资源详情
资源推荐
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 = 存储引擎名称;
比如我们想创建一个存储引擎为 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 ),在启动的时候基本都可以指定启动参数。这些启动参数可以放在命令行中指定,也可以把它们
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 生效了。
所以在启动服务器程序的命令行后边指定启动选项的通用格式就是这样的:
--启动选项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 配置文件的路径
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页未读,继续阅读
✪枫✪
- 粉丝: 136
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Vue实现iOS原生Picker组件:详细解析与实现思路
- Arduino蓝牙小车:参数调试与功能控制
- 百度Java面试精华:200页精选资源涵盖核心知识点
- Swift使用CoreData填坑指南:CoreData在Swift 3.0的变化
- 微距离无线充电器创新设计及其实验探索
- MTK Android平台开发全攻略:44步详解流程
- RecyclerView全面解析:替代ListView的新选择
- Android开发:自动适配中英文键盘解决方案
- Android调用WebService接口教程
- Android开发:BitmapUtil图片处理全解析与实例
- Android多线程断点续传实现详解
- PCA算法在人脸识别会议签到系统中的应用
- EventBus 3.0:Android事件总线详解与实战应用
- Android FileUtil:全面解析文件操作实用技巧与实例
- RecyclerView添加头部和尾部实战教程
- Android实现微博滑动固定顶部栏实战与优化
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功