粉丝4.1万获赞10.0万

在 stm 三十二开发中经常会碰的 x 文件并文件与 x 屯件这三个文件有什么区别呢? x 文件是边一默认生成的文件,不仅包含代码数据, 而且还包含着调试信息。在 mdk 里进行 dbug 调试用的就是这个文件。 x 文件是一种使用十六禁止符号表示的代码记录, 记录了代码应该存储到 fres 的哪个地址。 x 键要在 mdk 里勾选十六精致选项才可以生成。电影文件是根据 x 文件生成的,是最小的可以运行的下载文件了,其包含最直接的代码印象。

哎,聊个天,做咱们这行,最怕的是啥?没错,就是数据丢了,那可真是天塌下来了。 所以啊,今天咱们就来扒一扒 my cq 的 老底,看看他到底藏了什么黑科技,能保证咱们辛辛苦苦录进去的数据,不管发生啥都能安然无恙。 来想象这么个场景啊,夜深人静,你正准备说功呢,突然服务器挂了,你脑子里嗡的一下,第一个念头是啥?是不是?哎呦我的妈呀,刚才那个用户的订单,那条刚注册的信息还在不在啊? 没错,这个让人心惊肉跳的问题就是,咱们今天必须得搞的明明白白的核心啊,靠的就是一条特别简单的规则, 行话叫预写式自制,英文是 right ahead logging, 简称 w a l, 听着玄乎,其实特好理解。你就把它想成是记账, 再把真金白银锁进保险柜之前,你是不是得先在账本上记一笔,某某某存入多少钱,对吧? myxico 也是这个路子,它在真正去动硬盘上的数据之前,会先把我要干个啥这事,老老实实地记在一个专门的日制本上。 那么问题来了,这本账本到底是啥呢?嗯,它其实不止一本。 my secret 派出了两位核心的账房先生来保护你的数据。 咱们先来认识第一位,大名鼎鼎的二、禁制日制,也就是咱们天天挂在嘴边的编 log。 你 可以把它看作是 my secret 的 官方流水大账本,它会一五一十特别忠实地记录下所有改变数据的操作。 这个编 log 的 写入过程啊,还挺有意思,就像一场接力赛。你看啊,每个事物一开始会先把日记内容写到自己专属的一个小本本上,这叫编 log cash。 然后呢,等事物准备提交了,他就把这个小本本上的内容交接给一个大家共用的更大的日记文件。但重点来了啊,这时候,这些日记内容可能还只是在操作系统的内存里飘着呢,就像你写了个草稿,还没存档。 这最后,也是最关键的一步,才是把它咔嚓一下,牢牢地刻在物理磁盘上,这下才算真正落地了。 要想彻底搞懂刚才那个过程,咱们必须得分清楚两个电脑操作,一个叫 right, 一个叫 fink。 你 看 right 就 好比你把一份文件随手往办公桌上一扔,速度是快,刷一下就完事了, 那要是办公室突然停电了,桌上的文件可能就找不着了,对吧?而 f sync 呢,这才是真正的落袋为安,它就相当于你不仅把文件放好了,还特意把它锁进的保鲜柜,也就是我们的物理硬盘。那这个操作你想想肯定会慢一点,毕竟开锁关锁都需要时间嘛。 那问题又来了,到底什么时候该用快的 right, 什么时候用安全的 f sync 呢?嘿嘿, mycoco 特别贴心,他把这个选作权交给了我们,通过一个叫 syncbinlog 的 参数来控制。你看这张表啊,一目了然。 如果你把它设成零,那就是开启了性能狂飙模式,每次提交就只管往内存里扔,啥时候存进保险柜儿,让操作系统自己看着办,代价就是万一服务器崩啦,桌上的东西就没了。 如果你设成 e 呢?那就是安全偏执狂模式,每完成一笔交易,立刻锁进保险柜,双物寄绝对安全,但可想而知,磁盘会忙得团团转。当然,还有个折中的办法,设成 n, 就是 攒够 n 笔交易,再一起锁进保险柜,在性能和安全之间找个平衡点。 好,刚才我们认识了第一位守护神, binlock, 但这儿还只是第一道防线,还不够。 咱们最常用的那个存储引擎叫 inno db 对 吧?它自己啊,还有一套更专业的保险机制。这就是咱们要介绍的第二位守护神,重作日制,也就是 riddolog。 你 可以把 riddolog 理解成是 inno db 引擎给自己准备的一个秘密武器,专门防止它自己突然失忆。 你可么已经猜到了这个 redo log 啊,跟编 log 的 套路差不多,它也不是嗖的一下就直接写到硬盘里的,它也得经历一个从内存到硬盘的旅程。这张图呢,就从宏观上展示了它要走的几步。来,咱们马上把它拆开看个仔细。 你看, redo log 的 这一生,简直跟编 log 是 一个模子刻出来的,也分三步走。 第一站呢,是在内存里一个叫 redo log buffer 的 地方出生。第二站呢,通过 right 操作,被送到了操作系统的页面缓冲里,进入一个削定讹的中间状态。 最后也是最关键的一站,通过 f sync 这个动作,才算真正的安全地落在了硬盘上,完成了它的历史使命。 嘿,你肯定猜到了,跟 blog 一 样, inno db 也给了你一个宽,该来做选择。就是这个名字有点长的参数,叫 inno db flush log at trx commit。 规则也大同小异,设成一,老规矩,最安全的每次提交都 f s sync 到硬盘。 设成二呢,是先 write 到系统缓冲,这个能扛得住 my sql 进程自己崩掉,但如果整个服务器都断电了,那还是没辙。至于设成零,这个日制就只待在 my sql 自己的内存里,风险太高了。咱们生产环境记住,绝对绝对不能用 好。那么当我们把 sync bin log 和 inodeb flash log at tracks comit 这两个参数都设成最安全的那个值,也就是一的时候,我们就得到了传说中的双一配置, 这就是保证数据万无一失的黄金标准,业界的最高安全等级。但是这也带来了一个听起来非常可怕的问题, 这意味着每提交一个事物,我们都得跟硬盘打两次交道,做两次最慢的 fink 操作。我的天呐,这性能听起来是不是要崩盘了? 这就对嘛,这里头有个巨大的矛盾,如果真这么搞,那性能得差成什么样?别急,接下来就是见证奇迹的时刻了,咱们来看看 my circle 到底用了什么神仙操作来解决这个看似无解的难题。 咱们来算一笔账啊,这就是那个核心的性能谜题。你想,就算你用了一块不错的高性能 ssd 硬盘, 它每秒钟最多也就能处理两万次读写操作,也就是我们说的两万 i o p s。 那 按照双一的逻辑,每个事物需要两次 f s think, 也就是两次 i o 操作,那理论上这块盘每秒最多也就只能处理一万个实物,对吧?也就是一万 t p s。 但为什么我们在实际测试中,常常能看到 mexico 在 这种配置下跑到两万 tps 呢?这多出来的一万是从哪儿变出来的?答案就藏在这三个字里,组提交 group commit 这个机制的核心思想,说白了就跟咱们拼车一样,别一个人一个人的打车了,太浪费资源。咱们等一等凑一波人,一辆车就把大家都送到了,省钱还高效。 来,咱们直接到案发现场看一看组提交是怎么运作的。假设现在是业务高峰期,并发量很大,几乎是同一时间有三个事务,咱们叫他们 trx 一、 trx 二和 trx 三 都处理完了自己的业务逻辑,然后把各自的 redo log 都写进了内存里的那个 redo log buffer。 这时候啊,第一个冲到终点线的 trx 一, 他就被大家推选为这个临时小组的队长。这个队长特别有集体荣誉感,他不会自己一个人傻乎乎地就去敲硬盘的门,而是会稍微等一下下,回头看看有没有同伴跟上来。 就在这个里子里,他很幸运,等到了 trx 二和 trx 三也加入了他的队伍,然后神奇的一幕就发生了, 队长 trx 一 签头发起了一次 fink 操作,但这次操作他带上了整个队伍的行李,也就是从 trx 一 到 trx 三所有人的 redo log, 一 口气连续地写入了磁盘。 这个操作一完成,他就马上通知 trx 二和 trx 三兄弟们搞定了,咱们的日制都安全落地了,可以给客户回信说成功了,你看,就用了一次 f sync, 一 次磁盘 i o 就 搞定了。三个事物的持久化性能翻倍的秘密就在这儿, 等一下,别高兴的太早,刚才说的只是 redog 的 组提交,那咱们的老朋友编 log 怎么办呢? 可别忘了,为了保证这两个日制本上的内容绝对一致, mexico 用了一个叫两阶段提交的机制。简单来说就是分两步走,先写一个准备好了状态的 redon log, 然后跑去写 blog, 等 blog 写完了再回来把 redon log 的 状态正式改成已提交。 而这张图就揭示了 mysq 社群里我认为最天才的一个地方,他在写完哪个准备好的 redo log 之后,并不会马上就去 fink, 他 会利用这个空档先去处理 blog 的 写入。 就这么一个小小的顺序调整,简直是神来之笔。他不仅给了更多事务的 redo log 上车的机会,形成了更大的 redo log 组。更妙的是,当他去写 blog 的 时候, blog 自己也能 one 提交。 这么一来,通过这个精妙的流程设计, readlog 和 binlog 这两个最耗时的步骤,都吃到了主题胶带来的巨大红利。所以你看,聊到最后,我们还是回到了那个经典的选择题,是选择极致的性能,还是选择偏值的安全? 明白了这些底层原理之后啊,你就可以像一个专业的赛车技师一样去调教你的数据库了。比如说,想让组提交的效果更好,让队长多等一会儿,攒更多的人,那你可以微调一下 binlog group commit sync delay 这个参数。 如果你的业务场景能容忍一丁点的风险,想换取更高的吞吐量,那可以考虑把 sync binlog 设成一个比一大的数,比如一百或者一千,或者把 enigma flush log atrix commit 设成二。 但是我得再强调一遍,那个底线呢? inodib flashlog atrix commit 这个参数在生产环境绝对绝对不能设成零。 那么折腾了半天, mysl 到底给了我们一个什么样的承诺呢?它的捆别安全保证其实可以总结成一句话,只要你的应用程序从 mysl 那 里收到了成功的响应,那么你就可以百分之百地放心,这笔数据已经被永久地保存下来了。 那如果收到的是明确的错误信息,或者干脆是网络超时之类的异常呢?这时候你就得自己写代码去查一下,确认那笔交易的最终状态到底是什么。 好,最后留一个问题给你,也留给我自己回去看一看你负责的生产数据库,它现在是运行在最安全的双一模式下吗?还是说你为了性能已经对这些参数做了一些调整? 你是基于什么样的业务考量,在速度和安全之间做出了你自己的权衡呢?

来吧,老铁,十个月的车要赔掉多少个 w? 就是 我身后这台二五年上户的王者,六百六十匹马力符合版的车型, 搭配的是康明斯十五升的发动机,杜沃手动挡的变速箱,带着原车液的缓冲器,三层大梁局部加强,前三后四的板簧,四八五的护墙,三点九一的速比,无钥匙进入,一键启动,大屏导航,液晶仪表,三六零环镜像全部都有, 驻车、空调、采暖应有尽有。有想了解这台车的卡友们直接后台评论私信我吧,咱们下期再见!

更简单的固件销路方法,它来了,不会使用这个 i do you know i d e 进行销路的同学们也有福了,经过我一晚上的学习,我也是知道了如何把这个 i know 文件变成 b 文件,然后我们就可以使用这个 flash download two 进行销路了。 现在我讲解一下销路的具体步骤,就是到时候你们在网盘下载的时候,会看见这个销路工具的压缩包,然后你把它解压,解压之后打开会是这样一个界面,然后打开这个 exe 文件,在这里边选择 esp 三二 c 三这一个,点击, ok。 这些都是我之前尝试留下的痕迹,删掉,删掉,全部删掉,这个也删掉,这些都删掉,全都删掉,删掉。嗯,这就是你们打开以后的样子。然后点击这三个小点,找到这个 merged 并后缀的文件, 选择它点击打开,到时候我只会把这一个文件传到网盘上,你们直接用就可以了。然后这边输入零乘零 这个城市 x 小 写字母 x, 然后连接下你的开发板,连接开发板要先按住不的键不放手,然后插入已经连接电脑的数据线,记住一定是数据线才可以,不能随便拿一根充电线。 数据线 usb 先接电脑,这里会有一个开发版端口,可能是 com 三,也可能是 com 四,然后下边选择十一万五千两百上面的方框,点上对勾,点击开始导入,等这个条条全都变成绿色显示商录完成之后就可以了。 这时候开发版还是没有动静,但是不要慌,直接拔掉这个 usb, 然后重新再上电,然后我们就会发现这个表情出现了,说明已经烧录成功了,所有的固件和工具我都上传到网盘中去了,这次为了省事,不用一一回复私信,我创建了一个粉丝群, 有兴趣的同学可以加我的粉丝群,就可以直接在群公告中获取网盘链接了。好的,就是这样了。

lex 的 目录结构就像一座精心设计的城市,每个区域都有其特定的功能。理解这个结构是我们在 linux 世界里高效导航解决问题的基石。我们先来看根目录,也就是斜杠,这可是整个 linux 系统的顶梁柱,所有文件路径的绝对起点。 你可以把它想象成城市规划中的中央广场,所有的街道建筑都从这里延伸出去。这里存放着系统最核心的东西,比如内核基本命令和关键配置,权限非常高,一般用户没权直接动它, 而且它还是个交通枢纽,能挂在各种外部存储设备,让它们成为系统的一部分。可以说,没有根目录就没有 linux 系统本身。 接下来是 bin 和 s bin 目录,这两个目录存放的是二禁制可执行文件,也就是我们常说的命令。 bin 里的命令像是 aos 查看文件、 c p 复制文件、 mv 移动文件,这些是普通用户日常操作离不开的。而 s bin 里的命令,比如 f disk 分 区、 if config 配置网络、 reboot 重启系统,这些通常需要管理员权限才能执行。 简单说,病是给普通市民用的, s 病是给城市管理者用的。特别要注意的是,系统启动初期,很多出土化脚本就需要依赖兵下的这些基本命令来运行,所以它们的位置和内容有关重要。 然后是 etc 目录,这个目录堪称 linux 系统的大脑或者神经中书,这里存放着几乎所有系统服务和应用程序的配置文件。 你想想,从网络设置、用户账户、服务启动项到各种软件的具体参数,几乎都在这里定义。这些配置文件大多是纯文本格式,用编辑器打开就能看懂和修改,但正因为如此重要,修改起来也得格外小心,一旦改错了,可能导致系统无法正常工作。 所以动手修改之前,强烈建议先备份一下原始文件,这是个好习惯,能避免很多麻烦。再来看看 home 目录,这个目录就像是每个用户的私人住宅区,系统里每个用户都有一个以自己用户名命名的子目录,比如用户 alice 就 有一个 home alice 这里存放的是这个用户的个人文件,下载的东西、文档、邮件等等。用户可以在这里自由的创建、删除文件,定制自己的工作环境,比如修改到 bios c 文件来改变命令行提示符。不同用户的加目录是相互隔离的,保证了数据的安全性和隐私。 当你登录系统时,默认就会进入自己的这个加目录,非常方便。接下来是 u s r 目录,这个目录有点复杂,但你可以把它理解为用户、程序和数据的大本营。 它主要存放用户安装的各种应用程序库文件,以及一些静态数据。比如常见的 patch web 服务器、 mysq 数据库,很多都是安装在 usr 目录下的子目录里。 一般来说, usr 目录在系统安装后是只读的,由系统管理员负责写入新的软件包,普通用户通常只需要读取其中的内容。 它和 opt 目录有点像,都是放用户程序的地方,但 usr 是 系统默认的更标准的位置,而 opt 更多用于那些可选的独立的第三方软件包。 然后是 vr 目录,这个目录的名字就告诉我们它的特点, variable, 也就是可变的。这里存放的是系统运行过程中会不断变化的数据,最典型的就是各种日制文件,比如系统日制、应用程序日制都放在 vlog 子目录下, 还有像网页服务器的缓存、数据库、文件、邮件队列等等,都会在这里动态增长。你可以把它想象成陈氏的档案馆和数据中心,记录着系统运行的各种信息。正因为这些数据会持续变化且非常重要,所以 vr 目录下的内容往往是系统备份的重点对象。 接下来是 tmp 和瓦尔 tmp 这两个目录,它们都是用来存放临时文件的,你可以把它们想象成临时工棚或者周转仓库。 比如你在编一个程序时产生的中间文件,或者浏览器下载文件时创建的临时文件都可能出现在这里。这些文件通常生命周期比较短,要么是程序用完就删了,要么是系统重启时自动清理掉。 区别在于, t n p 目录下的文件通常在系统重启后就会被清除,而瓦尔 t n p 目录下的文件相对持久一些,适合存放那些需要跨系统重启保留的临时数据。但是千万不要把重要的数据长期存放在这两个目录里,因为它们都不是为了长期存储设计的。 我们看看迪外目录,这个目录有点特别,它里面存放的不是普通的文件,而是代表各种硬件设备的特殊文件,我们称之为设备文件。比如你的硬盘、键盘、鼠标、打印机,甚至虚拟终端都有对应的设备文件,这些文件分为字母设备和快设备两大类。 应用程序想要跟硬件打交道,就需要通过访问这些设备文件来实现。内核会为每个设备驱动程序创建相应的设备文件。还有两个很有意思的特殊设备文件, devnote 像个黑洞,你往里面写任何数据都会被丢弃。 devzero 则像一个永不停止产生空字符的水龙头,读取它就能得到源源不断的空数据流。 接下来是两个非常特殊的母路,斜杠 prok 和斜杠 cs。 它们都不是真实存在于词盘上的文件,而是由 linux 内核动态深沉的虚拟文件系统。 你可以把它们看作是内核暴露给自己和应用程序的窗口或接口。斜杠 prok 主要提供关于进程的信息,比如每个进程的 id、 内存使用情况、打开的文件等等。你可以通过读取斜杠 prok 下的文件来监控当前有哪些进程在运行以及它们的状态。 而斜杠 six 则提供了访问内核参数和硬件信息的途径,比如 cpu 的 型号、内存的大小、各种设备的状态等。 这两个目录对于系统监控和调试来说非常有用,可以直接读取里面的文件来获取实时的系统状态信息。 再来看 mnt 和 media 这两个目录,它们的主要作用是作为挂载点。什么是挂载点呢?简单说就是把一个外部存储设备,比如另一个硬盘光盘连接到 linux 文件系统树中的一个位置, 这样你就可以像访问本地文件一样访问这个外部设备里的内容了。 mnt 是 一个比较传统的挂载点,通常由系统管理员手动指定挂在哪个设备到哪里。 而 media 则是现代 linux 发行版更常用的,它通常会自动检测并挂在插入的外部设备,并在 media 下创建相应的目录。比如插入一个名为 m y usb 的 u 盘,系统可能会自动创建 media m u usb 让用户可以直接访问,非常方便,体现了即插即用的理念。 接下来是 run 目录,这个目录存放的是系统运行时产生的临时数据,比如近尘的 p i t 文件、各种所文件、 utmp 日制文件等等, 这些数据反映了系统当前的运行状态。在早期的 linux 版本中, run 的 数据实际上是存储在内存里的,这意味着系统重启后这些数据就会丢失。不过,现在的 linux 系统通常会把 run 挂在到一个叫做 tmpfs 的 特殊文件系统上。 tmpfs 是 一种基于内存的文件系统,速度快,但重启后数据也会丢失。不过它比纯粹的内存映射更灵活,可以配置一定的持久性。 总之, run 是 一个反应系统即时状态的重要区域。最后,我们来看看 lost 加 found 这个目录。这个名字听起来就有点神秘, 它的作用是在文件系统出现问题时,比如系统意外断电导致文件系统损坏。进行文件系统检查 fisk 时,可能会发现一些孤立的、无法确定归属的文件碎片。 sec 工具会把这些找不到主人的文件暂时放到 lost 加放的目录下,你可以把它想象成一个失误招灵处。 如果你的系统因为某种原因崩溃了,重启后可以检查一下 lost 加 found 目录,看看有没有找回你丢失的重要文件。当然,里面的文件可能不完整或者难以识别,但这仍然是一个数据恢复的最后希望之一。今天,我们快速浏览了 linux 目录结构中的一些核心目录, 从根目录到各种功能分区,再到虚拟文件系统和特殊用途目录,它们共同构成了 linux 高效有序的文件管理体系。 理解这些目录的作用和关系,不仅能帮助我们更好地管理 linux 系统,进行故障排查和性能优化,更是深入理解 linux 系统运作机制的关键一步。记住,这是一个不断发展的领域,保持学习才能游刃有余。

不少网盘容量大,不限速,可以代替 u 盘、硬盘做启动盘和安装盘。电脑要想从网盘启动系统,需要在手机上使用两个开源工具,第一个是 open list, 用来挂在网盘,提供 web buff, 让电脑能访问网盘。第二个是 ipx 引导程序,引导程序需要一个配置文件,这是启动 windows pe 的 配置文件,这是启动 linux 系统的配置文件,记得 ip 地址和文件路径要正确。做好这些后,需要进入电脑 bios 设置 h t t p 启动项, 此处填写的完整文件路径。如果你是老电脑,不支持 h t t p 启动,可以使用能入的老手机, 使用 d mask 部署 max 启动环境,设置好后,点击保存开机,选择 h t t p 启动, 就可以选择哪个系统启动,因为体积小,启动过程透明,即使是安装完成的 linux 系统,也可以从网盘启动。而 windows 只适合启动 isos 和 pe 系统。这个方法可以多台电脑同时启动使用,不受局域网限制,十分方便。

哎,聊个天,做咱们这行,最怕的是啥?没错,就是数据丢了,那可真是天塌下来了。 所以啊,今天咱们就来扒一扒 my cq 的 老底,看看他到底藏了什么黑科技,能保证咱们辛辛苦苦录进去的数据,不管发生啥都能安然无恙。 来想象这么个场景啊,夜深人静,你正准备说功呢,突然服务器挂了,你脑子里嗡的一下,第一个念头是啥?是不是?哎呦我的妈呀,刚才那个用户的订单,那条刚注册的信息还在不在啊? 没错,这个让人心惊肉跳的问题就是,咱们今天必须得搞的明明白白的核心,其实啊,靠的就是一条特别简单的规则, 行话叫预写式自制,英文是 right ahead logging, 简称 w a l, 听着玄乎,其实特好理解。你就把它想成是记账, 再把真金白银锁进保险柜之前,你是不是得先在账本上记一笔,某某某存入多少钱,对吧? myxico 也是这个路子,它在真正去动硬盘上的数据之前,会先把我要干个啥这事,老老实实地记在一个专门的日制本上。 那么问题来了,这本账本到底是啥呢?嗯,它其实不止一本。 my secret 派出了两位核心的账房先生来保护你的数据。 咱们先来认识第一位,大名鼎鼎的二禁制日制,也就是咱们天天挂在嘴边的编 log。 你 可以把它看作是 my secret 的 官方流水大账本,它会一五一十特别忠实地记录下所有改变数据的操作。 这个编 log 的 写入过程啊,还挺有意思,就像一场接力赛。你看啊,每个事物一开始会先把日记内容写到自己专属的一个小本本上,这叫编 log cash。 然后呢,等事物准备提交了,他就把这个小本本上的内容交接给一个大家共用的更大的日记文件。但重点来了啊,这时候,这些日记内容可能还只是在操作系统的内存里飘着呢,就像你写了个草稿,还没存档。 这最后,也是最关键的一步,才是把它咔嚓一下,牢牢地刻在物理磁盘上,这下才算真正落地了。 要想彻底搞懂刚才那个过程,咱们必须得分清楚两个电脑操作,一个叫 right, 一个叫 fink。 你 看 right 就 好比你把一份文件随手往办公桌上一扔,速度是快,刷一下就完事了, 那要是办公室突然停电了,桌上的文件可能就找不着了,对吧?而 f sync 呢,这才是真正的落袋为安,它就相当于你不仅把文件放好了,还特意把它锁进的保鲜柜,也就是我们的物理硬盘。那这个操作你想想肯定会慢一点,毕竟开锁关锁都需要时间嘛。 那问题又来了,到底什么时候该用快的 right, 什么时候用安全的 f sync 呢?嘿嘿, mycoco 特别贴心,他把这个选作权交给了我们,通过一个叫 syncbinlog 的 参数来控制。你看这张表啊,一目了然。 如果你把它设成零,那就是开启了性能狂飙模式,每次提交就只管往内存里扔,啥时候存进保险柜儿,让操作系统自己看着办,代价就是万一服务器崩啦,桌上的东西就没了。 如果你设成 e 呢?那就是安全偏执狂模式,每完成一笔交易,立刻锁进保险柜,双物寄绝对安全,但可想而知,磁盘会忙得团团转。当然,还有个折中的办法,设成 n, 就是 攒够 n 笔交易,再一起锁进保险柜,在性能和安全之间找个平衡点。 好,刚才我们认识了第一位守护神 binlock, 但这儿还只是第一道防线,还不够。 咱们最常用的那个存储引擎叫 inno db 对 吧?它自己啊,还有一套更专业的保险机制。这就是咱们要介绍的第二位守护神,重作日制,也就是 riddolog。 你 可以把 riddolog 理解成是 inno db 引擎给自己准备的一个秘密武器,专门防止它自己突然失忆。 你可么已经猜到了,这个 redo log 啊,跟编 log 的 套路差不多,它也不是嗖的一下就直接写到硬盘里的,它也得经历一个从内存到硬盘的旅程。这张图呢,就从宏观上展示了它要走的几步。来,咱们马上把它拆开看个仔细。 你看, redo log 的 这一生,简直跟编 log 是 一个模子刻出来的,也分三步走。 第一站呢,是在内存里一个叫 redo log buffer 的 地方出生。第二站呢,通过 right 操作,被送到了操作系统的页面缓冲里,进入一个削定讹的中间状态。 最后也是最关键的一站,通过 f sync 这个动作,才算真正的安全地落在了硬盘上,完成了它的历史使命。 嘿,你肯定猜到了,跟 blog 一 样, inno db 也给了你一个宽,该来做选择。就是这个名字有点长的参数,叫 inno db flush log at trx commit。 规则也大同小异,设成一,老规矩,最安全的每次提交都 f s sync 到硬盘。 设成二呢,是先 write 到系统缓冲,这个能扛得住 my sql 进程自己崩掉,但如果整个服务器都断电了,那还是没辙。至于设成零,这个日制就只待在 my sql 自己的内存里,风险太高了。咱们生产环境记住,绝对绝对不能用 好。那么当我们把 sync bin log 和 inodeb flash log at tracks comit 这两个参数都设成最安全的那个值,也就是一的时候,我们就得到了传说中的双一配置, 这就是保证数据万无一失的黄金标准,业界的最高安全等级。但是这也带来了一个听起来非常可怕的问题, 这意味着每提交一个事物,我们都得跟硬盘打两次交道,做两次最慢的 fink 操作。我的天呐,这性能听起来是不是要崩盘了? 这就对嘛,这里头有个巨大的矛盾,如果真这么搞,那性能得差成什么样?别急,接下来就是见证奇迹的时刻了,咱们来看看 my circle 到底用了什么神仙操作来解决这个看似无解的难题。 咱们来算一笔账啊,这就是那个核心的性能谜题。你想,就算你用了一块不错的高性能 ssd 硬盘, 它每秒钟最多也就能处理两万次读写操作,也就是我们说的两万 i o p s。 那 按照双一的逻辑,每个事物需要两次 f s think, 也就是两次 i o 操作,那理论上这块盘每秒最多也就只能处理一万个实物,对吧?也就是一万 t p s。 但为什么我们在实际测试中,常常能看到 mexico 在 这种配置下跑到两万 tps 呢?这多出来的一万是从哪儿变出来的?答案就藏在这三个字里,组提交 group commit 这个机制的核心思想,说白了就跟咱们拼车一样,别一个人一个人的打车了,太浪费资源。咱们等一等凑一波人,一辆车就把大家都送到了,省钱还高效。 来,咱们直接到案发现场看一看组提交是怎么运作的。假设现在是业务高峰期,并发量很大,几乎是同一时间有三个事务,咱们叫他们 trx 一、 trx 二和 trx 三 都处理完了自己的业务逻辑,然后把各自的 redo log 都写进了内存里的那个 redo log buffer。 这时候啊,第一个冲到终点线的 trx 一, 他就被大家推选为这个临时小组的队长。这个队长特别有集体荣誉感,他不会自己一个人傻乎乎地就去敲硬盘的门,而是会稍微等一下下,回头看看有没有同伴跟上来。 就在这个里子里,他很幸运,等到了 trx 二和 trx 三也加入了他的队伍,然后神奇的一幕就发生了, 队长 trx 一 签头发起了一次 fink 操作,但这次操作他带上了整个队伍的行李,也就是从 trx 一 到 trx 三所有人的 redo log, 一 口气连续地写入了磁盘。 这个操作一完成,他就马上通知 trx 二和 trx 三兄弟们搞定了,咱们的日制都安全落地了,可以给客户回信说成功了,你看,就用了一次 f sync, 一 次磁盘 i o 就 搞定了。三个事物的持久化性能翻倍的秘密就在这儿, 等一下,别高兴的太早,刚才说的只是 redog 的 组提交,那咱们的老朋友编 log 怎么办呢? 可别忘了,为了保证这两个日制本上的内容绝对一致, mexico 用了一个叫两阶段提交的机制。简单来说就是分两步走,先写一个准备好了状态的 redon log, 然后跑去写 blog, 等 blog 写完了再回来把 redon log 的 状态正式改成已提交。 而这张图就揭示了 mysq 社群里我认为最天才的一个地方,他在写完哪个准备好的 redo log 之后,并不会马上就去 fink, 他 会利用这个空档先去处理 blog 的 写入。 就这么一个小小的顺序调整,简直是神来之笔。他不仅给了更多事务的 redo log 上车的机会,形成了更大的 redo log 组。更妙的是,当他去写 blog 的 时候, blog 自己也能 one 提交。 这么一来,通过这个精妙的流程设计, readlog 和 binlog 这两个最耗时的步骤,都吃到了主题胶带来的巨大红利。所以你看,聊到最后,我们还是回到了那个经典的选择题,是选择极致的性能,还是选择偏值的安全? 明白了这些底层原理之后啊,你就可以像一个专业的赛车技师一样去调教你的数据库了。比如说,想让组提交的效果更好,让队长多等一会儿,攒更多的人,那你可以微调一下 binlog group commit sync delay 这个参数。 如果你的业务场景能容忍一丁点的风险,想换取更高的吞吐量,那可以考虑把 sync binlog 设成一个比一大的数,比如一百或者一千,或者把 enigma flush log atrix commit 设成二。 但是我得再强调一遍,那个底线呢? inodib flashlog atrix commit 这个参数在生产环境绝对绝对不能设成零。 那么折腾了半天, mysl 到底给了我们一个什么样的承诺呢?它的捆别安全保证其实可以总结成一句话,只要你的应用程序从 mysl 那 里收到了成功的响应,那么你就可以百分之百地放心,这笔数据已经被永久地保存下来了。 那如果收到的是明确的错误信息,或者干脆是网络超时之类的异常呢?这时候你就得自己写代码去查一下,确认那笔交易的最终状态到底是什么。 好,最后留一个问题给你,也留给我自己回去看一看你负责的生产数据库,它现在是运行在最安全的双一模式下吗?还是说你为了性能已经对这些参数做了一些调整? 你是基于什么样的业务考量,在速度和安全之间做出了你自己的权衡呢?

如果你的电脑提示了这个,说明电脑需要激活了,不然会导致电脑很多功能无法运行。教你输入两行代码,彻底激活安排,先在桌面上新建一个文本文档,双击打开,打开后在里面输入这两行代码指令,然后将文本保存好, 回到桌面。接着将文本中后缀名更改为 bat 格式。回车 右击文本以管理员身份运行,然后点击确定,等待一会就能看到系统被成功激活了。


每天获得一款高质量开源项目。第十七款 venara, 这也是一款漫画开源软件,跟我之前推荐的麦汉的区别在于它不需要翻墙就能够看无广告的漫画了,接下来直接展示,点开之后, 首先去设置一下大家喜欢的看的模式,个人比较喜欢从上到下连续的设置好了,来到首页的漫画园, 可以翻墙的点击漫画原列表开源,直接获取无法获取的。我这边有一个免费的漫画原压缩包,只需要点击就能加载了,我这边随便加载几个,然后可以直接在左边看了,随便点一步看一下, 直接就可以看了,也是非常的方便和简单,感谢大家看到最后。