Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions docs/database/mysql/MySQL三大日志.md
Original file line number Diff line number Diff line change
Expand Up @@ -217,7 +217,7 @@

`binlog`(归档日志)保证了`MySQL`集群架构的数据一致性。

虽然它们都属于持久化的保证,但是则重点不同
虽然它们都属于持久化的保证,但是侧重点不同

在执行更新语句过程,会记录`redo log`与`binlog`两块日志,以基本的事务为单位,`redo log`在事务执行过程中可以不断写入,而`binlog`只有在提交事务时才写入,所以`redo log`与`binlog`的写入时机不一样。

Expand Down Expand Up @@ -255,7 +255,7 @@

> 这部分内容为 JavaGuide 的补充:

我们知道如果想要保证事务的原子性,就需要在异常发生时,对已经执行的操作进行**回滚**,在 MySQL 中,恢复机制是通过 **回滚日志(undo log)** 实现的,所有事务进行的修改都会先先记录到这个回滚日志中,然后再执行相关的操作。如果执行过程中遇到异常的话,我们直接利用 **回滚日志** 中的信息将数据回滚到修改之前的样子即可!并且,回滚日志会先于数据持久化到磁盘上。这样就保证了即使遇到数据库突然宕机等情况,当用户再次启动数据库的时候,数据库还能够通过查询回滚日志来回滚将之前未完成的事务。
我们知道如果想要保证事务的原子性,就需要在异常发生时,对已经执行的操作进行**回滚**,在 MySQL 中,恢复机制是通过 **回滚日志(undo log)** 实现的,所有事务进行的修改都会先记录到这个回滚日志中,然后再执行相关的操作。如果执行过程中遇到异常的话,我们直接利用 **回滚日志** 中的信息将数据回滚到修改之前的样子即可!并且,回滚日志会先于数据持久化到磁盘上。这样就保证了即使遇到数据库突然宕机等情况,当用户再次启动数据库的时候,数据库还能够通过查询回滚日志来回滚将之前未完成的事务。

另外,`MVCC` 的实现依赖于:**隐藏字段、Read View、undo log**。在内部实现中,`InnoDB` 通过数据行的 `DB_TRX_ID` 和 `Read View` 来判断数据的可见性,如不可见,则通过数据行的 `DB_ROLL_PTR` 找到 `undo log` 中的历史版本。每个事务读到的数据版本可能是不一样的,在同一个事务中,用户只能看到该事务创建 `Read View` 之前已经提交的修改和该事务本身做的修改

Expand All @@ -277,4 +277,4 @@ MySQL InnoDB 引擎使用 **redo log(重做日志)** 保证事务的**持久性*
## MySQL 好文推荐

- [CURD 这么多年,你有了解过 MySQL 的架构设计吗?](https://mp.weixin.qq.com/s/R-1km7r0z3oWfwYQV8iiqA)
- [浅谈 MySQL InnoDB 的内存组件](https://mp.weixin.qq.com/s/7Kab4IQsNcU_bZdbv_MuOg)
- [浅谈 MySQL InnoDB 的内存组件](https://mp.weixin.qq.com/s/7Kab4IQsNcU_bZdbv_MuOg)
12 changes: 6 additions & 6 deletions docs/tools/Docker.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@

### 1.2 图解物理机,虚拟机与容器

关于虚拟机与容器的对比在后面会详细介绍到,这里只是通过网上的图片加深大家对于物理机、虚拟机与容器这三者的理解(下面的图片来源与网络)。
关于虚拟机与容器的对比在后面会详细介绍到,这里只是通过网上的图片加深大家对于物理机、虚拟机与容器这三者的理解(下面的图片来源于网络)。

**物理机:**

Expand Down Expand Up @@ -53,7 +53,7 @@
说实话关于 Docker 是什么并太好说,下面我通过四点向你说明 Docker 到底是个什么东西。

- **Docker 是世界领先的软件容器平台。**
- **Docker** 使用 Google 公司推出的 **Go 语言** 进行开发实现,基于 **Linux 内核** 提供的 CGroup 功能和 name space 来实现的,以及 AUFS 类的 **UnionFS** 等技术,**对进程进行封装隔离,属于操作系统层面的虚拟化技术。** 由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。
- **Docker** 使用 Google 公司推出的 **Go 语言** 进行开发实现,基于 **Linux 内核** 提供的 CGroup 功能和 namespace 来实现的,以及 AUFS 类的 **UnionFS** 等技术,**对进程进行封装隔离,属于操作系统层面的虚拟化技术。** 由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。
- **Docker 能够自动执行重复性任务,例如搭建和配置开发环境,从而解放了开发人员以便他们专注在真正重要的事情上:构建杰出的软件。**
- **用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。**

Expand Down Expand Up @@ -132,7 +132,7 @@

Docker 设计时,就充分利用 **Union FS** 的技术,将其设计为**分层存储的架构** 。镜像实际是由多层文件系统联合组成。

**镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。**比如,删除前一层文件的操作,实际不是真的删除前一层的文件,而是仅在当前层标记为该文件已删除。在最终容器运行的时候,虽然不会看到这个文件,但是实际上该文件会一直跟随镜像。因此,在构建镜像的时候,需要额外小心,每一层尽量只包含该层需要添加的东西,任何额外的东西应该在该层构建结束前清理掉。
**镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。** 比如,删除前一层文件的操作,实际不是真的删除前一层的文件,而是仅在当前层标记为该文件已删除。在最终容器运行的时候,虽然不会看到这个文件,但是实际上该文件会一直跟随镜像。因此,在构建镜像的时候,需要额外小心,每一层尽量只包含该层需要添加的东西,任何额外的东西应该在该层构建结束前清理掉。

分层存储的特征还使得镜像的复用、定制变的更为容易。甚至可以用之前构建好的镜像作为基础层,然后进一步添加新的层,以定制自己所需的内容,构建新的镜像。

Expand Down Expand Up @@ -233,7 +233,7 @@ mysql 5.7 f6509bac4980 3 months ago
通过 IMAGE ID 或者 REPOSITORY 名字即可删除

```shell
docker rmi f6509bac4980 # 或者 docker rmim mysql
docker rmi f6509bac4980 # 或者 docker rmi mysql
```

## 六 Build Ship and Run
Expand Down Expand Up @@ -266,7 +266,7 @@ Docker 技术是基于 LXC(Linux container- Linux 容器)虚拟容器技术

> LXC,其名称来自 Linux 软件容器(Linux Containers)的缩写,一种操作系统层虚拟化(Operating system–level virtualization)技术,为 Linux 内核容器功能的一个用户空间接口。它将应用软件系统打包成一个软件容器(Container),内含应用软件本身的代码,以及所需要的操作系统核心和库。通过统一的名字空间和共用 API 来分配不同软件容器的可用硬件资源,创造出应用程序的独立沙箱运行环境,使得 Linux 用户可以容易的创建和管理系统或应用容器。

LXC 技术主要是借助 Linux 内核中提供的 CGroup 功能和 name space 来实现的,通过 LXC 可以为软件提供一个独立的操作系统运行环境。
LXC 技术主要是借助 Linux 内核中提供的 CGroup 功能和 namespace 来实现的,通过 LXC 可以为软件提供一个独立的操作系统运行环境。

**cgroup 和 namespace 介绍:**

Expand All @@ -276,7 +276,7 @@ LXC 技术主要是借助 Linux 内核中提供的 CGroup 功能和 name space

- **CGroup 是 Control Groups 的缩写,是 Linux 内核提供的一种可以限制、记录、隔离进程组 (process groups) 所使用的物力资源 (如 cpu memory i/o 等等) 的机制。**

(以上关于 CGroup 介绍内容来自 https://www.ibm.com/developerworks/cn/linux/1506_cgroup/index.html ,更多关于 CGroup 的呢内容可以查看这篇文章 )。
(以上关于 CGroup 介绍内容来自 https://www.ibm.com/developerworks/cn/linux/1506_cgroup/index.html ,更多关于 CGroup 的内容可以查看这篇文章 )。

**cgroup 和 namespace 两者对比:**

Expand Down
8 changes: 4 additions & 4 deletions docs/tools/Docker从入门到实战.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

### 什么是 Docker?

说实话关于 Docker 是什么并太好说,下面我通过四点向你说明 Docker 到底是个什么东西。
说实话关于 Docker 是什么并不太好说,下面我通过四点向你说明 Docker 到底是个什么东西。

- Docker 是世界领先的软件容器平台,基于 **Go 语言** 进行开发实现。
- Docker 能够自动执行重复性任务,例如搭建和配置开发环境,从而解放开发人员。
Expand Down Expand Up @@ -213,7 +213,7 @@ MySQL 5.7.32 f07dfa83b528 11 days ago 448MB
MySQL 5.5 d404d78aa797 20 months ago 205MB
```

该指令还能够携带`-p`参数:`docker images -q` , `-q`表示仅显示镜像的 id:
该指令还能够携带`-q`参数:`docker images -q` , `-q`表示仅显示镜像的 id:

```shell
[root@izrcf5u3j3q8xaz ~]# docker images -q
Expand Down Expand Up @@ -282,7 +282,7 @@ docker image rm -f bf756fb1ae65

Docker 还提供了删除镜像的简化版本:`docker rmi 镜像名:版本标志` 。

此时我们即可借助`rmi`和`-p`进行一些联合操作,比如现在想删除所有的 MySQL 镜像,那么你需要查询出 MySQL 镜像的 id,并根据这些 id 一个一个地执行`docker rmi`进行删除,但是现在,我们可以这样:
此时我们即可借助`rmi`和`-q`进行一些联合操作,比如现在想删除所有的 MySQL 镜像,那么你需要查询出 MySQL 镜像的 id,并根据这些 id 一个一个地执行`docker rmi`进行删除,但是现在,我们可以这样:

```shell
docker rmi -f $(docker images MySQL -q)
Expand Down Expand Up @@ -632,4 +632,4 @@ Loaded image: my_tomcat:1.0
[root@centos-7 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
my_tomcat 1.0 79ab047fade5 7 minutes ago 463MB
```
```