MySQL的binlog、redo log和undo log怎么使用

mysql的binlog、redo log和undo log怎么使用

1、binlog

Binlog是用于记录数据库中执行的写入操作的信息,它排除了查询操作,并且以二进制格式保存在磁盘上。binlog是mysql的逻辑日志,并且由Server层进行记录,使用任何存储引擎的mysql数据库都会记录binlog日志。

逻辑日志:可以简单得理解为sql语句;

物理日志:MySQL中数据都是保存在数据页中的,物理日志记录的是数据页上的变更;在这里插入代码片

binlog是通过追加的方式进行写入的,可以通过max_binlog_size参数设置每个binlog文件的大小,当文件大小达到给定值之后,会生成新的文件来保存日志。

binlog使用场景
项目 在实际应用中,binlog的主要使用场景有两个,分别是主从复制和数据恢复。

主从复制:在Master端开启binlog,然后将binlog发送到各个Slave端,Slave端重放binlog从而达到主从数据一致。

数据恢复:通过使用mysqlbinlog工具来恢复数据。

MySQL主从同步原理
MySQL的binlog、redo log和undo log怎么使用MySQL的binlog、redo log和undo log怎么使用

主节点 binlog dump 线程
当从节点连接主节点时,主节点会创建一个log dump 线程,用于发送binlog的内容。在读取binlog中的操作时,此线程会对主节点上的binlog加锁,当读取完成,甚至在发动给从节点之前,锁会被释放;

从节点I/O线程
当从节点上执行start slave命令之后,从节点会创建一个I/O线程用来连接主节点,请求主库中更新的binlog。I/O线程接收到主节点binlog dump进程发来的更新之后,保存在本地relaylog中;

从节点SQL线程
SQL线程负责读取relaylog中的内容,解析成具体的操作并执行,最终保证主从数据的一致性;
MySQL 数据库主从同步原理

binlog的内容
上面说了,binlog是一种逻辑日志,可以简单得理解为sql语句,但是实际上还包含着执行的sql语句的反向逻辑。delete对应着delete本身以及反向的insert信息;update包含着对应的update执行前后数据行的相关信息;insert包含自身的insert以及对应的delete信息。

binlog的格式
binlog共有三种格式,分别是statement、row以及mixed。MySQL 5.7.7版本之前默认使用的是statement,MySQL 5.7.7之后默认使用的是row。日志的格式可以通过my.ini配置文件中的binlog-format来修改。
(1)statement:基于sql语句的复制(statement-based replication,SBR),每一条修改数据的sql语句都会记录到binlog中。

优点:不需要具体记录某一行的变化,节约空间,减少io,提高性能;

缺点:在执行sysdate()或者sleep()等操作的时候,可能导致主从数据不一致的情况;

(2)row:基于行记录的复制(row-based replication,RBR),不记录sql语句上下文相关信息,而是记录哪条记录被修改的细节。

优点:非常详细地记录每一行记录修改的细节,因而不会出现数据无法被正确复制的情况;

缺点:由于会非常详细地记录每一条记录修改的细节,这样会产生大量的日志内容。假设现在有一条update语句,修改了很多条记录,则每条修改记录都会记录到binlog中。特别地,alter table这个操作,由于表结构的变化,每行记录都会发生变化,导致日志量暴增;

(3)mixed:根据上面所说的,statement和row各有优缺点,因此出现了mixed这个版本,将这二者进行混合。一般情况下使用statement格式来进行保存,当遇到statement无法解决时,切换为row格式来进行保存。
特别地,上面说了,新版本(MySQL 5.7.7之后)默认使用的row格式,这里的row也做了相应的优化,在遇到alter table这个操作时采用statement格式进行记录,其余操作仍然使用row格式。

binlog刷盘时机

对于InnoDB存储引擎来说,只有在事务提交的时候才会记录binlog,此时记录还在内存中,MySQL通过sync_binlog来控制binlog的刷盘时机,取值范围为0-N:

0:不强制刷到磁盘,由系统自行判断何时写入磁盘中;

1:每次提交后都要将binlog写入磁盘中;

N:每N个事务,才会将binlog写入磁盘中;

从上面可以看出,sync_binlog最安全的是设置是1,这也是MySQL 5.7.7之后版本的默认值。但是设置一个大一些的值可以提升数据库性能,因此实际情况下也可以将值适当调大,牺牲一定的一致性来获取更好的性能。

binlog的物理文件大小

通过配置max_binlog_size参数,可以控制binlog的大小,这一参数位于my.ini配置文件中。系统会创建一个新的文件以继续存储日志,当日志的大小超过binlog文件的容量限制时。当一个事务比较大时,或者是当日志越来越多的时候,此时占据的物理空间太大怎么办?MySQL提供了一种自动删除的机制,还是在my.ini配置文件中,可以通过配置expire_logs_days这个参数来解决,单位为天。当这个参数为0,表示永不删除;为N时,表示第N天后自动删除。

2、redo log

redolog是InnoDB引擎专有的日志系统。主要是用来实现事务的持久性以及实现crash-safe功能。redolog属于物理日志,记录的是sql语句执行之后数据页上的具体修改内容。
我们都知道,当MySQL运行的时候,会将数据从磁盘中加载到内存当中。当执行sql语句对数据进行修改时,修改后的内容其实都只是暂时保存到内存当中,如果此时断电或者出现其他情况,这些修改就会丢失。因而,当修改完数据之后,MySQL会寻找机会将这些内存中的记录刷回到磁盘当中。但这就出现一个性能问题,主要有两个方面:

InnoDB中是以页为数据单位与磁盘进行交互的,而一个事务很可能只是修改了一个页上的几个字节,如果将一个完整的数据页刷回磁盘当中,浪费资源;

SpeakingPass-打造你的专属雅思口语语料 SpeakingPass-打造你的专属雅思口语语料

使用chatGPT帮你快速备考雅思口语,提升分数

SpeakingPass-打造你的专属雅思口语语料 25 查看详情 SpeakingPass-打造你的专属雅思口语语料

一个事务可能涉及到多个数据页,这些数据页只是逻辑上连续,在物理上并不连续,使用随机IO性能太差;

因此,MySQL设计了redolog来记录事务对数据页具体做了哪些修改,之后将redolog再刷回磁盘当中。你可能会有疑惑,本来就是想减少io,这不又加上一次io么?InnoDB的设计者在设计之初就已经考虑到了这些。Redo log 文件通常都很小,而且在刷新磁盘的过程中采用的是顺序 I/O。与随机 I/O 相比,性能更好。

redo log基本概念
redolog由两部分组成,一个是内存中的日志缓存redo log buffer,一个是磁盘中的日志文件redo log file。当每次对数据记录进行修改的时候,都会将这些修改内容先写入redo log buffer中,后续等待合适的时机将内存中的修改刷回到redo log file中。这种先写日志,再写磁盘的技术就是WAL(Write-Ahead Logging)技术。需要注意的是redolog比数据页先刷回磁盘,聚簇索引,二级索引,undo页面的修改,均需要记录redolog。

在计算机操作系统中,用户空间(user space)下的缓冲区数据一般情况下是无法直接写入磁盘的,中间必须经过操作系统内核空间(kernel space)缓冲区(OS Buffer)。因此,redo log buffer写入redo log file实际上是先写入OS Buffer,然后再通过系统调用fsync()将其刷到redo log file中,过程如下:
MySQL的binlog、redo log和undo log怎么使用
mysql支持三种将redo log buffer写入redo log file的时机,可以通过innodb_flush_log_at_trx_commit参数配置,各参数值含义如下:

参数值 含义

0(延迟写)事务提交时不会将redo log buffer中日志写入到os buffer,而是每秒写入os buffer并调用fsync()写入到redo log file中。也就是说设置为0时是(大约)每秒刷新写入到磁盘中的,当系统崩溃,会丢失1秒钟的数据。1(实时写,实时刷)事务每次提交都会将redo log buffer中的日志写入os buffer并调用fsync()刷到redo log file中。这种方式即使系统崩溃也不会丢失任何数据,但是因为每次提交都写入磁盘,IO的性能较差。2(实时写,延迟刷)每次提交都仅写入到os buffer,然后是每秒调用fsync()将os buffer中的日志写入到redo log file。

MySQL的binlog、redo log和undo log怎么使用
redo log记录形式
redolog采用固定大小,循环写入的格式,当redolog写满之后,会重新从头开始写。为什么这么设计呢?
redo log存在的意义主要就是降低对数据页刷盘的要求。redolog记录了数据页上的修改,但是当数据页也刷回到磁盘后,这些记录就失去作用了。因此当MySQL判断之前的redolog已经失去作用之后,新数据会将这些失效的数据进行覆盖。那如何判断该不该进行覆盖呢?
MySQL的binlog、redo log和undo log怎么使用
上图是redo log file的示意图,write pos表示redolog当前记录的日志序列号LSN(log sequence number)。当数据页也已经刷回磁盘之后,会更新redo log file中的LSN,表示到这个LSN之前的数据已经落盘,这个LSN就是check point。write pos到check point之间的部分是redolog空余的部分,用于记录新的记录;check point到write pos之间是redolog已经记录的数据页修改部分,但此时数据页还未刷回磁盘的部分。当write pos追上check point时,会先推动check point向前移动,空出位置再记录新的日志。

启动innodb的时候,不管上次是正常关闭还是异常关闭,总是会进行恢复操作。恢复时,会先检查数据页中的LSN,如果这个LSN小于redolog中的LSN,即write pos位置,说明在redolog上记录着数据页上尚未完成的操作,接着就会从最近的一个check point出发,开始同步数据。

那有没有可能数据页中的LSN大于redolog中的LSN呢?答案是当然可能。出现这种情况时,这时超出redolog的部分将不会重做,因为这本身就表示已经做过的事情,无需再重做。
redo log与binlog区别

redo log binlog

文件大小redo log的大小是固定的。binlog可通过配置参数max_binlog_size设置每个binlog文件的大小。实现方式redo log是InnoDB引擎层实现的,并不是所有引擎都有。binlog是Server层实现的,所有引擎都可以使用 binlog日志记录方式redo log 采用循环写的方式记录,当写到结尾时,会回到开头循环写日志。binlog 通过追加的方式记录,当文件大小大于给定值后,后续的日志会记录到新的文件上适用场景redo log适用于崩溃恢复(crash-safe)binlog适用于主从复制和数据恢复

由binlog和redo log的区别可知:binlog日志只用于归档,只依靠binlog是没有crash-safe能力的。但只有redo log也不行,因为redo log是InnoDB特有的,且日志上的记录落盘后会被覆盖掉。因此需要binlog和redo log二者同时记录,才能保证当数据库发生宕机重启时,数据不会丢失。
两阶段提交
上面简单介绍了redolog和binlog,在对数据进行修改时,他们都会对这些修改进行保存落地,只是一个是物理日志,一个是逻辑日志。那他俩具体在修改过程中是如何执行的呢?

假设现在有一条update语句要执行,update from table_name set c=c+1 where id=2,执行流程如下:

先定位到id=2这一条记录;

执行器拿到引擎给的行数据,把这个值加上 1,得到新的一行数据,再调用引擎接口写入这行新数据;

引擎将这行新数据更新到内存中,同时将这个更新操作记录到redolog里面,此时 redolog 处于 prepare 状态。然后告知执行器执行完成了,随时可以提交事务;

执行器生成这个操作的 binlog,并把binlog写入磁盘;

执行器调用引擎的提交事务接口,引擎把刚刚写入的 redo log 改成提交(commit)状态,更新完成;

示意图如下所示:
MySQL的binlog、redo log和undo log怎么使用
这种将redolog的写入拆分成prepare和commit两个步骤的过程称之为两阶段提交。

redolog 和binlog都可以用于表示事务的提交状态,而两阶段提交就是让这两个状态保持逻辑上的一致。如果不使用两阶段提交,而是先写其中一个再写另外一个可能会带来一些问题。

此时还是使用update来举例。假设当前id=2,有一个字段c=0,分别分析以下情况:
先写redolog再写binlog
假设先写redolog,当redolog写完,但是binlog还未写完的时候,此时MySQL突然出现异常导致重启。由于之前redolog已经写完,系统重启后,修改的记录仍然存在,所以恢复后这一行 c 的值是 1。但由于系统重启,binlog中并未有这条记录。之后备份日志的时候,存起来的binlog里面就没有这条语句。然后你会发现,如果需要用这个 binlog 来恢复临时库的话,由于这个语句的binlog丢失,这个临时库就会少了这一次更新,恢复出来的这一行 c 的值就是 0,与原库的值不同。
先写binlog再写redolog
假如先写binlog,然后写redolog的时候系统重启。重启之后,redolog中没有对c进行修改的记录,此时c的值还是0。但是 binlog里面已经记录了“把 c 从 0 改成 1”这个日志。所以,在之后用 binlog来恢复的时候就多了一个事务出来,恢复出来的这一行 c 的值就是 1,与原库的值不同。

因此,综上所述,如果是先写某一个日志再写另一个日志,就会出现数据库的状态与使用binlog恢复出来的库的状态不一致的情况。

3、undo log

undolog主要用来记录某条行记录被修改之前的状态,记录的是修改前的数据。使用undolog可以在事务回滚时将记录恢复到事务开始前的状态。事务的原子性和持久性也是依靠undolog来实现的。undo log主要记录了数据的逻辑变化,比如一条INSERT语句,对应一条DELETE的undo log,对于每个UPDATE语句,对应一条相反的UPDATE的undo log,这样在发生错误时,就能回滚到事务之前的数据状态。在数据恢复过程中,使用binlog和redolog相结合,可确保数据恢复的准确性。

undolog的作用流程如下所示:
MySQL的binlog、redo log和undo log怎么使用

在事务开始之前将修改前的版本写入到undo log中;

开始进行修改,将修改过的数据保存到内存当中;

将undolog持久化到磁盘当中;

将数据页刷回到磁盘当中;

事务提交;

和redolog一样,undolog也需要先于数据页刷回磁盘。如果undolog完整,可以使用其中记录的信息来回滚事务,以恢复数据。

在一个事务当中,可能会对同一条数据进行多次修改,那么是不是每一次修改前的记录都要记录到undolog中呢?这样的话,会导致undolog日志量太大,此时redolog就要上场了。在一个事务当中,如果是对同一条记录进行修改,undolog只会记录事务开始前的原始记录,当再次对这条记录进行修改时,redolog会记录后续的变化。数据恢复过程中,通过协调redolog和undolog的作用,前滚和回滚操作来完成数据的恢复。过程如下所示:
MySQL的binlog、redo log和undo log怎么使用

以上就是MySQL的binlog、redo log和undo log怎么使用的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/259974.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
遇到无薪试岗应该如何维权?详情介绍
上一篇 2026年10月11日 08:22:38
响应式设计实践:在jQuery Mobile中动态控制底部导航栏的显示
下一篇 2025年12月23日 15:12:12

相关推荐

  • MySQL回表查询与索引覆盖的区别是什么

    回表查询 innodb索引分为两大类,一类是聚集索引(clustered index),一类是非聚集索引(secondary index) 聚集索引(聚簇索引):叶子节点中存的是整行数据,找到索引也就找到了数据,索引即数据,表中行的物理顺序与键值的逻辑(索引)顺序相同,一个表只能包含一个聚集索引。因…

    2026年10月11日
    000
  • MySQL视图、函数和存储过程是什么

    一、视图 所谓视图,是指由 sql 查询语句检索出的结果集,以虚拟表的形式出现,与实际物理表不同,它在数据库中并不存在。视图的作用是为了简化复杂的查询,将多表关联和过滤操作集中到一个视图中,然后通过查询该视图来获取需要的结果。视图具有以下几个特点: 视图不存储数据,而是根据 SELECT 语句的结果…

    2026年10月11日
    100
  • MySQL中如何获取当月最后一天的日期

    LAST_DAY(date ):获取date当月最后一天的日期 天工 昆仑万维推出的通用AI智能体平台,原天工AI 212 查看详情 SELECT LAST_DAY(SYSDATE()) SELECT LAST_DAY(‘2015-02-02′) SELECT LAST_DAY(‘2015-02-0…

    2026年10月11日
    000
  • mysql中with…as的用法是什么

    mysql中with…as的用法是什么mysql中with…as的用法是什么mysql中with…as的用法是什么mysql中with…as的用法是什么

    最近无意中接触到了一篇文章,里面写了一个sql的用法,是with…as,中午抽空记录一下 用MySQL试了一下,发现并不支持该语法(版本:5.7) 于是换作以下(版本:8.0)不会报错: 法语写作助手 法语助手旗下的AI智能写作平台,支持语法、拼写自动纠错,一键改写、润色你的法语作文。 …

    2026年10月11日 • 用户投稿
    100
  • node.js对于数据库MySQL基本操作方法有哪些

    数据库MySQL基本操作(增删改查) 整个博客统一表结构为:users表 四个字段id username password status,四个字段代表四列,其中id为自增列,status默认值为0,可选值0,1id自增, username分别为zs,ls,wu password分别为:123456 …

    2026年10月11日
    700
  • 技术分享 | MySQL Binlog 通过 MySQL 客户端导入数据库效率低的原因

    技术分享 | MySQL Binlog 通过 MySQL 客户端导入数据库效率低的原因技术分享 | MySQL Binlog 通过 MySQL 客户端导入数据库效率低的原因技术分享 | MySQL Binlog 通过 MySQL 客户端导入数据库效率低的原因技术分享 | MySQL Binlog 通过 MySQL 客户端导入数据库效率低的原因

    作者:郭斌斌 爱可生 DBA 团队成员,负责项目日常问题处理及公司平台问题排查。 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 一、背景 客户反馈在生产环境中,MySQL 5.7 使用 xtrabackup 和 Binlog 进行基于时间点的恢复…

    2026年10月11日 • 用户投稿
    000
  • linux如何为mysql设置提示符

    linux如何为mysql设置提示符linux如何为mysql设置提示符linux如何为mysql设置提示符linux如何为mysql设置提示符

    为 mysql 设置提示符 有时候需要同时连接到多台服务器的,并且操作不同的 mysql,由于 mysql 命令行默认没有用户或主机的提示符,这样容易误操作,所以可以在 /etc/my.cnf 文件中添加以下配置来显示 mysql 的提示符: [mysql] prompt=”u@h : d r:m:…

    2026年10月11日 • 用户投稿
    100
  • Mysql长事务的影响是什么

    1、长事务意味着系统中会有一个非常旧的事务视图。在提交此事务之前,应保留回滚记录,这将导致大量的存储空间。 2、长事务也会占用锁资源,可能会拖累数据库。 实例 影谱 汉语电影AI辅助创作平台 8 查看详情 SELECT ps.id ‘PROCESS ID’, ps.USER, ps.HOST, es…

    2026年10月11日
    100
  • 在CentOS中怎么安装配置MySQL

    第一步:安装MySQL数据库 为避免软件包冲突和不兼容,我们在安装MySQL之前应先运行以下命令,将系统软件包升级到最新版本。 yum -y update 接着,执行以下命令,安装MySQL数据库。 yum -y install mysql-server mysql 这个时候,MySQL已经安装完毕…

    2026年10月11日
    100
  • 这么利用Mysql计算地址经纬度距离实时位置

    这么利用Mysql计算地址经纬度距离实时位置这么利用Mysql计算地址经纬度距离实时位置这么利用Mysql计算地址经纬度距离实时位置这么利用Mysql计算地址经纬度距离实时位置

    前言 最近在做项目时候,遇到一个这样子的需求, 点到卡包里面卡券使用使用,需要展示卡券使用附近门店, 思路 数据库地址表设计 通用的区域街道地址表tz_sys_area 字段名称 类型 备注 area_idbigint区域IDarea_namevarchar(32)区域名称parent_idbigi…

    2026年10月11日 • 用户投稿
    200
  • MySQL事务隔离级别与乱码问题的关联分析

    事务隔离级别不会直接导致乱码,但可能在并发场景下使乱码问题更易被察觉。mysql的事务隔离级别包括读未提交、读已提交、可重复读和串行化,主要用于控制事务间的数据可见性,解决脏读、不可重复读和幻读等问题。而乱码通常由字符集设置不一致引起,例如客户端与服务器字符集不符、数据库表字段字符集配置不同或数据传…

    2026年10月11日
    100
  • MySQL提示“too many connections“错误怎么解决

    MySQL提示“too many connections“错误怎么解决MySQL提示“too many connections“错误怎么解决MySQL提示“too many connections“错误怎么解决MySQL提示“too many connections“错误怎么解决

    发现问题 最近使用mysql5.7的时候连接公司系统数据库时发现提示报错,出现mysql too many connection 的异常。查询后得知,错误是由于连接数超过mysql系统默认配置所导致的。 解决过程 1. 首先登录mysql终端,输入show variables like max_co…

    2026年10月11日 • 用户投稿
    100
  • linux怎么用yum删除mysql

    linux怎么用yum删除mysqllinux怎么用yum删除mysqllinux怎么用yum删除mysqllinux怎么用yum删除mysql

    删除方法:1、用“rpm -qa | grep -i mysql”命令查看mysql的全部依赖信息;2、用“yum remove mysql依赖”命令依次卸载全部依赖;3、用“rm -rf 文件或目录”命令删除mysql的相关文件目录即可。 本教程操作环境:linux5.9.8系统、mysql8版本…

    2026年10月11日 • 用户投稿
    300
  • Express连接MySQL及数据库连接池的示例分析

    Express连接MySQL及数据库连接池的示例分析Express连接MySQL及数据库连接池的示例分析Express连接MySQL及数据库连接池的示例分析Express连接MySQL及数据库连接池的示例分析

    Express连接MySQL 准备工作 打开webstorm新建项目选择express创建一个express项目。 创建成功后其页面如下: 为了连接mysql数据库还需要导入mysql模块。 创建配置文件 在项目中创建config文件,在config文件中创建congfigdb.js文件用来连接数据…

    2026年10月11日 • 用户投稿
    300
  • mysql锁机制的概念是什么

    mysql锁机制的概念是什么mysql锁机制的概念是什么mysql锁机制的概念是什么mysql锁机制的概念是什么

    Mysql锁: 要在多线程环境下确保数据的准确性,通常需要使用同步机制。同步就相当于是加锁。锁的作用在于当一个线程正在操作数据时,其他线程需要等待,这可以带来以下好处。当一个线程执行完毕后,释放锁。其他线程才能进行操作! 那么我们的MySQL数据库中的锁的功能也是类似的,处理事务的隔离性中,可能会出…

    2026年10月11日 • 用户投稿
    100
  • Mysql锁内部实现机制是什么

    Mysql锁内部实现机制是什么Mysql锁内部实现机制是什么Mysql锁内部实现机制是什么Mysql锁内部实现机制是什么

    概述 尽管现代关系型数据库越来越相似,但它们的实现背后可能有着截然不同的机制。实际使用方面,因为sql语法规范的存在使得我们熟悉多种关系型数据库并非难事,但是有多少种数据库可能就有多少种锁的实现方法。 Microsoft Sql Server2005之前只提供页锁,直到2005版本才开始支持乐观并发…

    2026年10月11日 • 用户投稿
    200
  • MySQL中SECOND函数怎么用

    SECOND(time) SELECT SECOND(‘11:22:33′) SELECT SECOND(‘2016-01-16 11:44:22′) -> 33-> 22 返回该time的minute值,值范围(0-59) 阿里云-虚拟数字人 阿里云-虚拟数字人是什么? ……

    2026年10月11日
    200
  • MySQL8.0/8.x忘记密码怎么更改root密码

    MySQL8.0/8.x忘记密码怎么更改root密码MySQL8.0/8.x忘记密码怎么更改root密码MySQL8.0/8.x忘记密码怎么更改root密码MySQL8.0/8.x忘记密码怎么更改root密码

    一、原理说明 1,authentication_string这是mysql8.0新做出的修改,在旧版本中使用的是password()函数。 2,在网上找到的“mysql忘记密码”的解决方案中,大多会使用UPDATE user SET authentication_string=”12345″ WHE…

    2026年10月11日 • 用户投稿
    200
  • 如何在GitHubActions中清晰追踪PHPUnit测试失败?使用mheap/phpunit-github-actions-printer让问题无处遁形

    可以通过一下地址学习composer:学习地址 在现代软件开发中,持续集成(ci)已经成为不可或缺的一环。我们常常将phpunit测试集成到github actions中,以确保每次代码提交都能通过严格的质量检查。然而,相信不少开发者都曾遇到这样的困扰:当测试套件庞大,且有多个测试失败时,githu…

    2026年10月11日
    100
  • ubuntu如何查mysql的端口号

    1、登录mysql。 打开终端输入命令:“# mysql -uroot -p”。 [root@localhost ~]# mysql -uroot -p Enter password: 输入数据库密码; 2、再输入命令“show global variables like ‘port&#…

    2026年10月11日
    000

发表回复

登录后才能评论
关注微信