From fc06f9132320b26922ffea8770af59f39a346863 Mon Sep 17 00:00:00 2001
From: heibaiying <31504331+heibaiying@users.noreply.github.com>
Date: Tue, 20 Aug 2019 13:28:39 +0800
Subject: [PATCH 1/6] =?UTF-8?q?Update=20MySQL=5F=E5=9F=BA=E7=A1=80.md?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
notes/MySQL_基础.md | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/notes/MySQL_基础.md b/notes/MySQL_基础.md
index 6bbed20..41e0a8a 100644
--- a/notes/MySQL_基础.md
+++ b/notes/MySQL_基础.md
@@ -45,6 +45,7 @@ InnoDB 是 MySQL 5.5 之后默认的存储引擎,它是一种兼具高可靠
+
### 1.2 MyISAM
MyISAM 是 MySQL 5.5 之前默认的存储引擎。创建 MyISAM 表时会创建两个同名的文件:
@@ -119,12 +120,15 @@ mysql> SELECT * FROM total;
**平衡二叉树数据结构**:
+
**红黑树数据结构**:
+
**Btree 数据结构**:
+
**B+ Tree 数据结构**
@@ -281,21 +285,25 @@ InnoDB 存储引擎完全支持 ACID 模型:
一个事务的更新操作被另外一个事务的更新操作锁覆盖,从而导致数据不一致:
+
**2. 脏读**
在不同的事务下,一个事务读取到其他事务未提交的数据:
+
**3. 不可重复读**
在同一个事务的两次读取之间,由于其他事务对数据进行了修改,导致对同一条数据两次读到的结果不一致:
+
**4.幻读**
在同一个事务的两次读取之间,由于其他事务对数据进行了修改,导致第二次读取到第一次不存在数据,或第一次原本存在的数据,第二次却读取不到,就好像之前的读取是 “幻觉” 一样:
+
### 4.4 隔离级别
想要解决以上问题,可以通过设置隔离级别来实现:InnoDB 支持以下四个等级的隔离级别,默认隔离级别为可重复读:
@@ -330,9 +338,9 @@ InnoDB 存储引擎完全支持 ACID 模型:
要求非主键列必须完全依赖于主键列,而不能存在部分依赖。示例如下:
-| mechanism_id (组织机构代码) | employee_id (雇员编号) | ename (雇员名称) | cname (组织机构名称) |
-| ----------------------------- | ------------------------ | ------------------ | ---------------------- |
-| 28193182 | 10001 | heibaiying | XXXX公司 |
+| mechanism_id (组织机构代码) | employee_id (雇员编号) | ename (雇员名称) | mname (机构名称) |
+| ----------------------------- | ------------------------ | ------------------ | ----------------|
+| 28193182 | 10001 | heibaiying | XXXX公司 |
以上是一张全市在职人员统计表,主键为:机构编码 + 雇员编号,这里的雇员名称完全依赖于此联合主键,但机构名称就只依赖于机构代码,这就出现了部分依赖,违背了第二范式。此时最好的解决方式就是建立一张组织机构与组织名称的字典表。
From ec5526036c634e4ba4703d1bdb3cac206dce587c Mon Sep 17 00:00:00 2001
From: heibaiying <31504331+heibaiying@users.noreply.github.com>
Date: Tue, 20 Aug 2019 13:32:38 +0800
Subject: [PATCH 2/6] =?UTF-8?q?Update=20MySQL=5F=E5=9F=BA=E7=A1=80.md?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
notes/MySQL_基础.md | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/notes/MySQL_基础.md b/notes/MySQL_基础.md
index 41e0a8a..e971e6d 100644
--- a/notes/MySQL_基础.md
+++ b/notes/MySQL_基础.md
@@ -53,7 +53,7 @@ MyISAM 是 MySQL 5.5 之前默认的存储引擎。创建 MyISAM 表时会创建
+ 扩展名为 `.MYD`(`MYData`):用于存储表数据;
+ 扩展名为 `.MYI` (`MYIndex`): 用于存储表的索引信息。
-在 MySQL 8.0 之后,只会创建上述两个同名文件,因为在该版本中表结构的定义存储在 MySQL 数据字典中,但在 MySQL 8.0 之前,还会存在一个扩展名为 `.frm` 的扩展文件,用于存储表结构信息。MyISAM 与 InnoDB 主要的区别其只支持表级锁,不支持行级锁,不支持事务,不支持自动崩溃恢复,但可以使用内置的 mysqlcheck 和 myisamchk 工具来进行检查和修复。
+在 MySQL 8.0 之后,只会创建上述两个同名文件,因为在该版本中表结构的定义存储在 MySQL 数据字典中,但在 MySQL 8.0 之前,还会存在一个扩展名为 `.frm` 的文件,用于存储表结构信息。MyISAM 与 InnoDB 主要的区别其只支持表级锁,不支持行级锁,不支持事务,不支持自动崩溃恢复,但可以使用内置的 mysqlcheck 和 myisamchk 工具来进行检查和修复。
### 1.3 MEMORY
@@ -342,7 +342,7 @@ InnoDB 存储引擎完全支持 ACID 模型:
| ----------------------------- | ------------------------ | ------------------ | ----------------|
| 28193182 | 10001 | heibaiying | XXXX公司 |
-以上是一张全市在职人员统计表,主键为:机构编码 + 雇员编号,这里的雇员名称完全依赖于此联合主键,但机构名称就只依赖于机构代码,这就出现了部分依赖,违背了第二范式。此时最好的解决方式就是建立一张组织机构与组织名称的字典表。
+以上是一张全市在职人员统计表,主键为:机构编码 + 雇员编号。表中的雇员名称完全依赖于此联合主键,但机构名称却只依赖于机构编码,这就是部分依赖,因此违背了第二范式。此时常用的解决方式是建立一张组织机构与组织名称的字典表。
#### 第三范式:避免传递依赖
@@ -352,7 +352,7 @@ InnoDB 存储引擎完全支持 ACID 模型:
| ------------------------ | ------------------ | ------------------ | ----------------- |
| 10001 | heibaiying | 06 | 开发部 |
-这里还是一张雇员表,雇员名称和所属的部门编号都依赖于主键 employee_id ,但部门名称却依赖于部门编号,此时就出现了非主键列依赖于其他非主键列,这就违背的第三范式。此时最好的解决方式就是建立一张部门表用于维护部门相关的信息。
+以上是一张雇员表,雇员名称和所属的部门编号都依赖于主键 employee_id ,但部门名称却依赖于部门编号,此时就出现了非主键列依赖于其他非主键列,这就违背的第三范式。此时常用的解决方式是建立一张部门表用于维护部门相关的信息。
#### 反范式设计
From 904ed4d1caead55e2cc5adedf364409822462472 Mon Sep 17 00:00:00 2001
From: heibaiying <31504331+heibaiying@users.noreply.github.com>
Date: Tue, 20 Aug 2019 13:36:52 +0800
Subject: [PATCH 3/6] =?UTF-8?q?Update=20MySQL=5F=E5=A4=87=E4=BB=BD.md?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
notes/MySQL_备份.md | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/notes/MySQL_备份.md b/notes/MySQL_备份.md
index de307f7..dafcc6d 100644
--- a/notes/MySQL_备份.md
+++ b/notes/MySQL_备份.md
@@ -65,11 +65,8 @@ mysqldump [options] --all-databases
options 代表可选操作,常用的可选参数如下:
+ **--host=host_name, -h host_name**
-
指定服务器地址。
-
+ **--user=user_name, -u user_name**
-
指定用户名。
+ **--password[=password], -p[password]**
@@ -379,4 +376,4 @@ mysqlbinlog --read-from-remote-server --raw --stop-never \
+ [Chapter 7 Backup and Recovery](https://dev.mysql.com/doc/refman/8.0/en/backup-and-recovery.html)
+ [mysqldump — A Database Backup Program](https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html)
+ [mysqlpump — A Database Backup Program](https://dev.mysql.com/doc/refman/8.0/en/mysqlpump.html)
-+ [Percona XtraBackup - Documentation](https://www.percona.com/doc/percona-xtrabackup/LATEST/index.html)
\ No newline at end of file
++ [Percona XtraBackup - Documentation](https://www.percona.com/doc/percona-xtrabackup/LATEST/index.html)
From 71d8ec5b16624800ba52b969b1105f8a3e731a2e Mon Sep 17 00:00:00 2001
From: heibaiying <31504331+heibaiying@users.noreply.github.com>
Date: Tue, 20 Aug 2019 13:37:43 +0800
Subject: [PATCH 4/6] =?UTF-8?q?Update=20MySQL=5F=E5=A4=87=E4=BB=BD.md?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
notes/MySQL_备份.md | 3 +++
1 file changed, 3 insertions(+)
diff --git a/notes/MySQL_备份.md b/notes/MySQL_备份.md
index dafcc6d..4ef8ba3 100644
--- a/notes/MySQL_备份.md
+++ b/notes/MySQL_备份.md
@@ -65,8 +65,11 @@ mysqldump [options] --all-databases
options 代表可选操作,常用的可选参数如下:
+ **--host=host_name, -h host_name**
+
指定服务器地址。
+
+ **--user=user_name, -u user_name**
+
指定用户名。
+ **--password[=password], -p[password]**
From 08192a6281174ec01ec5435d19ef04f9f647df1a Mon Sep 17 00:00:00 2001
From: heibaiying <31504331+heibaiying@users.noreply.github.com>
Date: Tue, 20 Aug 2019 13:39:55 +0800
Subject: [PATCH 5/6] =?UTF-8?q?Update=20MySQL=5F=E5=A4=87=E4=BB=BD.md?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
notes/MySQL_备份.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/notes/MySQL_备份.md b/notes/MySQL_备份.md
index 4ef8ba3..dd2dc19 100644
--- a/notes/MySQL_备份.md
+++ b/notes/MySQL_备份.md
@@ -201,7 +201,7 @@ mysqlpump 在 mysqldump 的基础上进行了扩展增强,其主要的优点
- 能够直接对备份文件进行压缩;
- 备份时能够显示进度指标(估计值);
-- 备份用户时生成的是 CREATE USER 与 GRANT 语句,而不是像 mysqldump 一样直接备份成数据,可以方便用户按需恢复。
+- 备份用户时生成的是 CREATE USER 与 GRANT 语句,而不是像 mysqldump 一样备份成数据,可以方便用户按需恢复。
### 3.2 常用参数
From 61edc9a15737f5dacbdeb68279ac02361bb05902 Mon Sep 17 00:00:00 2001
From: heibaiying <31504331+heibaiying@users.noreply.github.com>
Date: Tue, 20 Aug 2019 13:45:09 +0800
Subject: [PATCH 6/6] =?UTF-8?q?Update=20MySQL=5F=E5=A4=8D=E5=88=B6.md?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
notes/MySQL_复制.md | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/notes/MySQL_复制.md b/notes/MySQL_复制.md
index cc39e9c..f5f25e2 100644
--- a/notes/MySQL_复制.md
+++ b/notes/MySQL_复制.md
@@ -123,7 +123,7 @@ CHANGE MASTER TO MASTER_HOST='192.168.0.226',\
START SLAVE;
```
-查看从节点复制状态,主要参数有 Slave_IO_Running 和 Slave_SQL_Running,其状态都为 Yes 表示用于进行复制的 IO 进程已经开启。Seconds_Behind_Master 参数表示从节点复制的延迟量。此时可以在主库上进行任意更改,并在备库上查看情况。
+查看从节点复制状态,主要参数有 Slave_IO_Running 和 Slave_SQL_Running,其状态都为 Yes 表示用于复制的 IO 进程已经开启。Seconds_Behind_Master 参数表示从节点复制的延迟量。此时可以在主库上进行任意更改,并在备库上查看情况。
```shell
mysql> SHOW SLAVE STATUS\G
@@ -356,7 +356,7 @@ MMM (Master-Master replication manager for MySQL) 是由 Perl 语言开发的一
除了管理双主节点,MMM 也负责管理所有 Slave节点,在出现宕机、复制延迟或复制错误,MMM 会移除该节点的 VIP,直至节点恢复正常。MMM 高可用的架构示例图如下:
-
+
MMM 架构的缺点在于虽然其能实现自动切换,但却不会主动补齐丢失的数据,所以会存在数据不一致性的风险。另外 MMM 的发布时间比较早,所以其也不支持 MySQL 最新的基于 GTID 的复制,如果你使用的是基于 GTID 的复制,则只能采用 MHA。
@@ -364,7 +364,7 @@ MMM 架构的缺点在于虽然其能实现自动切换,但却不会主动补
MHA (Master High Availability) 是由 Perl 实现的一款高可用程序,相对于 MMM ,它能尽量避免数据不一致的问题。它监控的是一主多从的复制架构,架构如下图所示:
-
+
在 Master 节点宕机后,其处理流程如下: