MySQL 主从复制与高可用架构
一、MySQL 主从复制概述
(一)定义与作用
MySQL 主从复制是一种允许在多个 MySQL 数据库服务器之间进行数据同步的技术。简单来说,就是可以把数据从一个 MySQL 服务器(主服务器、主节点)复制到一个或多个从节点,使得从节点的数据与主节点保持一致。
其作用十分显著,首先在提高数据库可用性方面,当主服务器出现问题时,比如宕机、硬件故障等,可以快速切换到从服务器提供服务,避免业务中断,实现高可用架构。例如在一些电商平台的大促活动期间,如果主数据库服务器出现意外,从服务器能及时顶上,保障用户正常下单、查询订单等操作不受太大影响。
在提升性能上,通过主从复制能够实现读写分离,将增删改的请求操作发送到主库,而查询的请求操作引导至从库。这样可以分担主库的负载,尤其是在读取操作频繁的场景下,能有效缓解主库压力,提升整体数据库的响应速度。像新闻资讯类网站,大量用户同时访问查看新闻内容(读操作),利用从库来处理这些读请求,能让用户更快地获取到信息。
另外,主从复制对于数据备份恢复也极为重要。可以在从库上执行备份操作,避免备份期间影响主库服务,并且在遇到数据丢失等情况时,利用从库的数据进行恢复,保障数据的安全性和完整性。
(二)常见架构模式
1. 一主一从 / 一主多从
- 一主一从:这是最基础、成本相对较低的主从架构方式。一台服务器作为主服务器(M),负责写入或读取数据;另一台服务器作为从服务器(S),只负责读取数据,并且会从主服务器上下载数据来保持数据同步。它主要是用来做数据的热备,也就是当主节点挂掉的话,从节点能充当主节点继续提供服务,提高程序可用性,容灾性较好。不过它的适用场景相对有限,不存在数据一致性问题,因为只从一个节点中读取,但也有不足,比如无法做数据备份(非高可用),如果不小心在主节点执行了如 DROP 这类操作,从节点则马上同步这个操作,所以也无法在从节点中找回数据。例如一些小型的企业内部管理系统,对读写性能要求不是特别高,使用一主一从架构就能满足基本的数据备份和容灾需求。
- 一主多从:通常会选取一个节点做主服务器备份,如果主服务器挂了,则有从服务器马上充当主服务器节点继续进行服务。还可以选取另一个从节点,专门用来做慢查询、或统计操作等。这种架构适合写入较少,但读取较多的场景,能通过将大量的读请求通过负载均衡分布到多个从库上(对于实时性要求很高的读请求可以让从主库去读),降低主库的读取压力。不过随着从库数量的增加,主库的负载以及网络带宽压力也会相应增大,因为每个从库都会在主库上有一个独立的 BINLOG Dump 线程来获取数据。比如大型的社交平台,用户查看动态、消息等读操作非常频繁,采用一主多从架构,能更好地应对高并发的读请求。
2. 多主一从
从 MySQL 5.7 开始支持多主一从模式(多源主从复制技术,Multi-Source Replication),这种模式可以将多个库的数据备份到一个库中存储。它的优势在于能够汇聚数据,尤其是在分库分表的一些场景中,方便进行集中的数据统计分析操作,数据集中存放可避免服务器等软硬件资源浪费,也方便在一台服务器备份所有已收到的数据库数据,还可用于异地备份项目等。例如在一个集团公司内部,不同业务部门有各自独立的数据库(多个主库),需要将这些数据整合起来做统一的数据分析、报表生成等工作,就可以采用多主一从的架构,将各部门的数据同步到一个从库中进行处理。
3. 双主复制
双主复制的原理是两个 MySQL 服务器互做对方的从,也就是双方都可以同时进行读写操作,互为主从。它适用于写压力比较大的业务场景,例如一些大型的在线游戏平台,玩家频繁地进行游戏数据的更新(写操作),通过双主复制可以分担写的压力。同时,在 DBA 做维护需要主从切换时也比较方便,只要配置好互为主从的关系,切换过程相对简单。不过双主复制也存在一定风险,比如可能会出现数据冲突的情况,像两个主服务器同时对同一行数据进行修改,就需要采取相应的冲突检测和解决策略,比如采用最后修改者胜出的策略,或者采用合并的方式等。
4. 级联复制
在级联复制模式下,部分从节点连接到上一级从节点,而不是直接连接主节点。这样做的优点是可以缓解主服务器的压力,因为主服务器既要处理写操作,又要应对多个从节点的读请求,通过级联的从节点进行分压操作,能减少主服务器的负担。例如在一个有大量从服务器的架构中,让一部分从服务器先连接到几个中间的从服务器上,形成多级的结构。但这种模式也存在弊端,就是数据同步延迟可能会较大,相比于直接从主节点同步数据,经过多级传递会花费更多时间来保证数据的一致性。
二、MySQL 主从复制原理
(一)基于 Binlog 的复制流程
MySQL 主从复制是基于 Binary Log(二进制文件,简称 bin log)来实现的,其流程如下:
首先,在主数据库这边,当有写操作(例如 INSERT、UPDATE、DELETE 等语句执行)发生时,这些操作的记录会被按照相应的 binlog 格式记录到二进制日志文件(binlog)中。这相当于主数据库把自己数据的变更情况都详细记录了下来,就好比是在写日记一样,把每一笔重要的 “数据操作账” 都记好。
接着,从数据库会启动一个 IO 线程,这个 IO 线程会负责连接到主数据库,然后去请求获取主数据库的 binlog 内容。主数据库收到从数据库 IO 线程的请求后,就会把自己记录好的 binlog 信息传输给从数据库的 IO 线程,该线程获取到 binlog 内容后,会把这些内容先写入到从数据库本地的 Relay Log(中继日志)里面。
最后,从数据库还有一个 SQL 线程,它会不断地去监测 Relay Log,一旦发现里面有新的内容,就会从中读取相关的数据变更记录,并在从数据库中执行这些操作,把相应的数据变更应用到从数据库上,使得从数据库的数据和主数据库的数据保持一致。这样,通过这样一套基于 Binlog 的流程,就实现了主从数据库之间的数据复制。
(二)Bin Log 日志格式
1. STATEMENT 格式(语句模式)
STATEMENT 格式下,binlog 记录的是执行的 SQL 语句文本。比如说,执行了一条 “UPDATE user SET age = 25 WHERE name = ' 张三 '” 这样的 SQL 语句来更新用户表中张三的年龄信息,那么这条 SQL 语句的文本就会原原本本地被记录到 binlog 里面。
它有着明显的优点,一方面日志文件相对较小,因为只是记录了执行的语句,而不是详细到每一行数据具体的变化情况,这样就节省了一定的存储空间,也便于后续查看日志时进行理解和审计工作,查看日志就能清楚地知道执行过哪些操作语句了。
然而,它也存在缺点。由于不同的数据库环境可能会存在差异,例如在使用了非确定性函数(像 RAND () 函数生成随机数、SYSDATE () 获取系统时间等)、时间戳等情况下,当从数据库重放这些记录的 SQL 语句时,可能会因为环境不同而导致数据不一致的情况出现。比如主数据库执行时生成的随机数和从数据库执行时生成的随机数不一样,那就会让数据出现偏差了。
2. ROW 格式(行模式)
ROW 格式则是记录每一行数据更改的具体内容。比如在一张包含多条用户信息记录的表中,对某一行用户数据进行了修改,ROW 格式的 binlog 就会详细记录这一行原来是哪些数据,被修改后变成了哪些数据,是真正精确到每一行的具体变化情况的。
这种格式的优点很突出,它能够精确地记录数据变化,不管是在何种复杂的操作或者数据库环境下,都可以避免出现像 STATEMENT 格式那样因为环境依赖而导致的数据不一致问题,确保在从数据库重放这些数据变更时,能够得到和主数据库一致的结果。
但相应地,它也有不足之处。由于要记录每一行数据的详细变化,所以日志文件通常会比较大,尤其是在大量数据更新的情况下,会产生海量的日志记录内容,这无疑会增加 I/O 开销,对存储资源以及读取日志时的性能都会产生一定的影响。
3. MIXED 格式(混合模式)
MIXED 格式具有独特的特性,它可根据具体执行的 SQL 语句和操作自动选择使用 STATEMENT 或 ROW 格式。例如,对于一些普通的、不会导致数据一致性问题的简单数据修改语句,可能就会采用 STATEMENT 格式进行记录,而如果遇到像使用了某些特殊函数、或者涉及到复杂的数据变更情况时,它就会切换到 ROW 格式来记录,以此保证数据的准确复制。
它的优点在于结合了 STATEMENT 和 ROW 两种格式的长处,在保证数据一致性的同时,又尽可能地减小了日志文件的大小,试图在两者之间达到一种较好的平衡。
不过,这种格式也并非完美无缺,由于它需要根据不同情况自动切换记录格式,所以逻辑相对复杂,在实际使用中可能需要更复杂的管理和监控手段。而且在一些特定的复杂场景下,可能无法达到最优的性能或者确保完全的数据一致性,需要数据库管理员根据实际情况仔细权衡和调整。
(三)主从复制模式
1. 异步复制
异步复制是 MySQL 主从复制中最常见的一种模式。在这个模式下,主服务器会将数据修改操作记录到二进制日志(binlog)中,然后通过相应的机制把这些日志传输给从服务器。这里的关键在于 “异步”,也就是说主服务器在把 binlog 传输给从服务器后,并不会等待从服务器是否成功应用这些日志来更新数据,而是直接继续处理后续的事务操作,并且可以立即向使用者返回操作成功的响应,这样就保证了主服务器的处理性能不受从服务器的影响,能够及时响应使用者的各种请求,有着很好的响应及时性。
但这种模式也存在明显的缺点,由于主从之间的数据复制是异步进行的,所以就会存在一定的数据传输延迟情况,从服务器的数据更新可能会落后于主服务器,在极端情况下,如果主服务器出现故障,可能会有部分还没来得及复制到从服务器的数据丢失,导致复制过程的可靠性有所欠缺,数据的一致性无法时刻得到保证。
2. 半同步复制
半同步复制模式相较于异步复制有其独特之处。在这个模式下,主服务器在执行完一个事务并将相关数据修改操作记录到二进制日志(binlog)后,不会像异步复制那样直接返回给客户端操作成功的响应,而是会等待至少一个从服务器接收到这个 binlog 并成功将其应用到本地数据库,也就是确认从服务器已经把相应的数据变更完成后,主服务器才会向客户端返回事务提交成功的消息。
这样做的好处就是在数据一致性方面有了更强的保障,相比于异步复制,大大降低了主服务器崩溃时数据丢失的风险,因为至少有一个从服务器已经保存了最新的事务数据。不过,相应地它也有一定的代价,那就是写操作的响应时间会有所增加,毕竟主服务器需要等待从服务器的确认,性能上相比异步复制会略有下降,但又比完全同步复制那种需要所有从服务器都确认的模式延迟要小一些,它只需要有一个从服务器确认即可。这种模式适用于对数据一致性有一定要求,同时又能接受一定程度性能损耗的业务场景。
三、MySQL 主从复制实践操作
(一)配置主服务器
1. 添加配置参数
在主服务器的配置文件(my.cnf)中,我们需要添加几个关键的参数来实现主从复制功能。首先是设置服务器 ID(server-id),例如 “server-id = 1”,这个 ID 在整个主从复制架构中必须是唯一的,它用于区分不同的 MySQL 服务器实例,就好比每个人都有独一无二的身份证号码一样,服务器通过这个 ID 来识别彼此。
另外,要开启二进制日志(binary logging),通过设置 “log-bin = mysql-bin” 参数来实现(这里 “mysql-bin” 是二进制日志文件的文件名前缀,MySQL 会自动添加数字索引来区分不同的日志文件)。二进制日志的作用十分重要,它会记录主服务器上所有的数据变更操作,像 INSERT、UPDATE、DELETE 等语句执行时产生的数据变化都会被详细记录下来,为后续从服务器获取并同步这些变更提供依据。可以说,二进制日志是主从复制的核心 “数据源”,没有它,从服务器就不知道该如何去更新数据来保持和主服务器一致了。
2. 创建复制用户
在主服务器上,我们需要创建一个专门用于主从复制的用户。可以通过以下 SQL 命令来完成操作,例如创建一个名为 “replication_user”,密码为 “password”,且允许从指定 IP 地址(假设从服务器 IP 为 “192.168.1.100”)访问的用户,并授予其 REPLICATION SLAVE 权限,具体命令如下:
CREATE USER 'replication_user'@'192.168.1.100' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'192.168.1.100';
FLUSH PRIVILEGES;
这里,“CREATE USER” 语句用于创建新用户,指定用户名、访问主机(即从服务器的 IP 地址)以及密码;“GRANT REPLICATION SLAVE ON .” 则是授予该用户复制相关的权限,“.” 表示对所有数据库和所有表都有复制权限;最后 “FLUSH PRIVILEGES” 命令用于刷新权限,使刚才设置的权限立即生效。这样,从服务器就可以使用这个用户来连接主服务器,并获取二进制日志等相关数据进行复制操作了。
3. 查看主服务器状态
配置好上述参数和创建好复制用户后,我们需要查看主服务器的状态,通过执行 “SHOW MASTER STATUS;” 命令来实现。执行这个命令后,会展示出一些关键的信息,比如当前二进制日志文件的名称(File 值)以及在这个文件中的位置(Position 值)。
例如,可能会得到类似如下的结果:
File: mysql-bin.000010
Position: 1234
这些值一定要记录下来,因为后续在配置从服务器时,需要准确地指定从哪个二进制日志文件的哪个位置开始获取数据进行同步,它们就像是一个 “数据同步的起点坐标”,确保从服务器能准确无误地跟上主服务器的数据变更进度,保证主从数据的一致性。
(二)配置从服务器
1. 添加配置参数
在从服务器的配置文件(my.cnf)里,同样需要添加服务器 ID(server-id)参数,不过其值要和主服务器的不同,比如设置为 “server-id = 2”。记住,每个主从服务器的 ID 必须唯一,否则会导致复制出现问题,MySQL 无法准确区分不同的服务器角色。添加好参数后,需要重启从服务器,使得这个配置生效,只有重启后,服务器才能按照新的配置参数来运行相关服务,就像电脑安装了新的软件或者更新了配置后,有时候需要重启才能让这些改变生效一样。
2. 设置主服务器信息
在从服务器的 MySQL 中,要执行相应的命令来设置主服务器的相关信息,使用 “CHANGE MASTER TO” 语句,具体示例如下:
CHANGE MASTER TO
MASTER_HOST='192.168.1.101', -- 这里替换为主服务器的实际IP地址
MASTER_USER='replication_user', -- 之前在主服务器创建的复制用户
MASTER_PASSWORD='password', -- 对应的密码
MASTER_LOG_FILE='mysql-bin.000010', -- 之前在主服务器查看记录的File值
MASTER_LOG_POS=1234; -- 之前在主服务器查看记录的Position值
这里要特别注意,将命令中的各个参数都替换为实际准确的值,确保从服务器能够正确地连接到主服务器,并从对应的二进制日志位置开始进行数据同步操作,这样才能保证主从复制流程准确无误地启动起来。
3. 启动复制进程与检查状态
完成上述配置后,就可以在从服务器上启动复制进程了,通过执行 “START SLAVE;” 命令来开启。启动之后,为了确保复制是正常进行的,我们需要通过 “SHOW SLAVE STATUS\G;” 命令来检查从服务器的复制状态。在查看结果中,重点关注 “Slave_IO_Running” 和 “Slave_SQL_Running” 这两个线程状态的值,它们都应该为 “YES”,才表示主从复制正在正常工作。
例如,正常情况下会看到类似如下展示:
Slave_IO_Running: YES
Slave_SQL_Running: YES
如果这两个值其中有一个或者两个都是 “NO”,那就说明主从复制出现了问题,需要进一步去排查,可能是网络连接问题、权限问题或者配置参数错误等原因导致的,要及时发现并解决这些问题,以保障主从服务器之间的数据能够准确同步。
四、MySQL 高可用架构解析
(一)高可用架构的重要性
在实际的生产环境中,MySQL 高可用架构有着至关重要的意义,它是保障业务连续性的关键所在。一旦数据库出现故障,对于业务的影响往往是十分严重的。例如,对于电商平台而言,如果数据库发生故障,那么用户将无法正常下单、查询订单以及进行商品浏览等操作,这可能导致大量用户流失,给企业带来巨大的经济损失;又如在线支付系统,数据库故障会使支付流程中断,严重影响交易的正常进行,损害用户体验以及企业信誉。再比如一些大型企业的内部管理系统,若数据库不可用,员工无法进行诸如考勤、流程审批、资源调配等操作,整个企业的运营效率会大幅下降。所以,通过构建高可用架构,能在数据库面临各种意外情况时,确保业务依然可以正常运转,最大程度减少对业务的不良影响。
(二)常见高可用架构方案
1. MMM 架构
MMM(Master-Master replication manager for MySQL)架构是一套支持双主故障切换和双主日常管理的脚本程序,使用 Perl 语言开发,主要用于监控和管理 MySQL 的主主复制拓扑。
在 MMM 架构中,虽然是双主模式,但业务上同一时刻只有一个主对外提供写入服务,另一个则作为备份主,可提供部分读服务,这有助于在主主切换时刻加速备选主的预热。它具备读写 VIP(虚拟 IP),使得服务器角色的变更对前端应用来说是透明的,也就是应用无需关心后端数据库服务器的角色变化,都能正常访问。
从优点方面来看,它是完全开源的,提供了从服务器的延迟监控功能,并且在主数据库故障转移后,能方便地实现从服务器对新主的重新同步,还很容易让发生故障的主数据库重新上线。然而,MMM 架构也存在一些不足,比如发布时间比较早,不支持 MySQL 新的复制功能(像基于 GTID 的复制),没有读负载均衡的功能,在进行主从切换时容易造成数据丢失,而且其监控服务存在单点故障。
总体而言,MMM 架构适用于对数据一致性要求不是特别高,且读写操作相对不那么频繁、对成本有一定控制需求的场景,例如一些小型的企业内部办公系统等。
2. MHA 架构
MHA(Master High Availability)是由日本 MySQL 大牛用 Perl 编写的一套 MySQL 故障切换方案,旨在保证数据库系统的高可用。它能在宕机事件内(通常 10 - 30 秒)完成故障转移,可避免主从一致性问题,还能节约购买新服务器的费用,并且不影响服务器性能,安装相对容易,也不会改变现有部署架构。
其原理是 MHA 会监控 master 节点的故障情况,当检测到 master 节点出现故障时,它会通过分析各个从节点的中继日志等信息,找出拥有最新数据的从节点,然后将其提升为新的 master 节点。在此期间,MHA 会与其它从节点交互获取额外信息,来避免一致性方面的问题。此外,MHA 还提供了 master 节点的在线切换功能,可按需切换 master/slave 节点。
MHA 的优势较为明显,它可以支持 GTID 复制,能够选举最合适的从节点成为新的 master 节点,自动完成从 master 的监控到故障转移的全部流程(当然也可手动执行故障转移),可在秒级单位内实现故障转移,还具备在多个点上调用外部脚本的功能,能应对如电源 OFF 或者 IP 地址变化等故障转移情况,而且安装和卸载不用停止当前的 mysql 进程,自身不会增加服务器负担,也不依赖存储引擎以及二进制文件的格式(不论是 STATEMENT 模式还是 ROW 模式)。
不过,MHA 也存在一定的缺点,例如需要自行开发实现 VIP 的配置,并且它主要侧重于监控主节点是否可用,对于从节点的监控相对不足。MHA 架构比较适用于一主多从的环境,尤其是在 MySQL 的主从复制采用异步或是半同步方式,且对数据一致性有一定要求、希望能快速进行故障切换的业务场景中,比如一些互联网应用的后台数据库系统等。
3. Keepalived + 主主复制架构
Keepalived 结合 MySQL 主主复制能够实现高可用的架构模式。在这种架构下,MySQL 的双主服务器互做对方的从,双方都可同时进行读写操作,实现了数据的冗余备份。
Keepalived 在这里起到了关键的监测、自动重启以及流量切换等作用。它可以实时监测数据库服务的状态,一旦发现主服务器出现故障,比如进程意外终止或者网络连接异常等情况,Keepalived 能够自动进行相应的处理,例如尝试重启服务;若故障无法恢复,它会进行流量切换,将原本指向故障主服务器的请求引导至正常的服务器上,确保业务的连续性。
该架构的优势在于能有效保障数据库的高可用性,提升了整个系统应对故障的能力,而且配置相对来说不算过于复杂,通过合理的设置就能让数据库服务具备较好的容错性。同时,在一些对可靠性要求较高、但读写操作压力相对均衡的场景中表现出色,比如实时在线 OA 系统、政府部门网站系统等,这些场景下虽然流量和压力可能不是特别大,但对服务器的可靠性要求极高,Keepalived + 主主复制架构就能很好地满足需求。
五、总结与展望
(一)回顾重点内容
在本文中,我们详细探讨了 MySQL 主从复制与高可用架构相关的诸多内容。
首先了解了 MySQL 主从复制的概述,主从复制是一种能在多个 MySQL 数据库服务器之间进行数据同步的技术,其作用体现在提高数据库可用性、提升性能以及便于数据备份恢复等方面。常见的架构模式包含一主一从 / 一主多从、多主一从、双主复制、级联复制等,每种模式都有其适用场景与优缺点,像一主一从适用于小型企业内部管理系统做简单的数据备份和容灾;一主多从适合写入少读取多的场景,可应对高并发读请求;多主一从便于数据汇聚与集中统计分析;双主复制适用于写压力大的业务场景;级联复制可缓解主服务器压力但可能存在数据同步延迟问题。
接着深入研究了主从复制原理,基于 Binlog 的复制流程涵盖主数据库记录操作到 binlog,从数据库通过 IO 线程获取 binlog 并写入 Relay Log,再由 SQL 线程将 Relay Log 中的变更应用到从数据库上这几个关键步骤。Bin Log 日志有 STATEMENT、ROW、MIXED 三种格式,各有优劣,例如 STATEMENT 格式日志文件小但可能因环境差异导致数据不一致,ROW 格式能精确记录数据变化但日志文件大,MIXED 格式则结合二者长处平衡日志大小与数据一致性。主从复制模式包括异步复制、半同步复制等,异步复制响应及时但存在数据丢失风险及传输延迟问题,半同步复制保障了数据一致性但会增加写操作响应时间。
在实践操作部分,分别介绍了主服务器和从服务器的配置步骤。主服务器配置需添加如设置服务器 ID、开启二进制日志等参数,创建用于复制的用户并查看主服务器状态;从服务器配置同样要添加服务器 ID 参数、设置主服务器信息、启动复制进程并检查状态,确保各个环节准确无误才能保证主从复制正常运行。
关于 MySQL 高可用架构,其重要性在于保障业务连续性,避免因数据库故障给业务带来严重影响。常见的高可用架构方案有 MMM 架构、MHA 架构、Keepalived + 主主复制架构等。MMM 架构适用于对数据一致性要求不高、读写操作不太频繁的场景;MHA 架构侧重于一主多从环境且对数据一致性有要求、希望快速故障切换的业务场景;Keepalived + 主主复制架构则在可靠性要求高、读写压力相对均衡的场景中表现出色。
通过对这些核心知识点的梳理,希望能帮助读者更好地理解和掌握 MySQL 主从复制与高可用架构相关内容,以便在实际应用中根据具体业务需求进行合理的选择与部署。
(二)对未来应用的展望
随着业务的不断发展以及数据量的持续增长,MySQL 主从复制与高可用架构也将面临更多的挑战与机遇。
一方面,在未来业务愈发复杂、数据规模越发庞大的情况下,对于数据一致性和实时性的要求可能会进一步提高。现有的主从复制模式或许需要不断优化,例如半同步复制模式可能会在保证数据一致性的同时,通过技术改进进一步降低写操作的响应延迟,以更好地适应对实时性要求严苛的业务场景,像金融交易类系统等,确保每一笔交易数据能快速且准确地在主从节点间同步,避免因数据延迟或不一致带来的风险。
另一方面,高可用架构也会朝着更智能、更自动化的方向发展。例如当前的故障切换机制虽然已经能够在一定程度上保障业务连续性,但未来可能会结合人工智能、机器学习等技术,实现对数据库状态的实时精准监测与预测,提前发现潜在故障隐患并自动进行优化调整,甚至可以根据业务负载情况动态地调整主从节点的配置,比如自动增加或减少从节点数量来应对不同时段的读写压力变化,从而提升整个架构的资源利用效率和应对故障的能力。
同时,新的技术和需求也可能催生出更多创新的高可用架构方案。就如同从早期的经典主从复制发展到如今集成多种功能的 InnoDB Cluster 等架构一样,未来或许会有基于云计算、分布式存储等新兴技术融合的高可用架构出现,更好地满足企业在不同业务场景下对 MySQL 数据库高可用性、高性能、易扩展等多方面的需求,助力企业在数字化转型进程中保障数据的安全可靠以及业务的稳定运行。
相关文章:

MySQL 主从复制与高可用架构
一、MySQL 主从复制概述 (一)定义与作用 MySQL 主从复制是一种允许在多个 MySQL 数据库服务器之间进行数据同步的技术。简单来说,就是可以把数据从一个 MySQL 服务器(主服务器、主节点)复制到一个或多个从节点&#…...

【Golang】如何读取并解析SQL文件
一、背景 在数据库开发与维护过程中,我们经常需要执行大量的SQL语句。有时,这些SQL语句会被保存在一个文件中,以便于批量执行。为了方便地在Go语言中处理这些SQL文件,我们可以编写一个函数来读取并解析SQL文件中的语句。 二、实…...

git branch -r(--remotes )显示你本地仓库知道的所有 远程分支 的列表
好的,git branch -r 这个命令用于列出远程分支。让我详细解释一下: 命令: git branch -rdgqdgqdeMac-mini ProductAuthentication % git branch -rorigin/main作用: 这个命令会显示你本地仓库知道的所有 远程分支 的列表。它不…...

Typescript安装
建议全局安装npm i -g typescript安装好之后,就可以直接使用 tsc 来编译 ts 文件了可通过 tsc 回车查看 tsc 的各项配置信息,通过 tsc --version 查看版本号。编译我们现在可以创建一个 ts 文件,并将他编译成 js 文件,比如下面简单…...

使用C#在目录层次结构中搜索文件以查找目标字符串
例程以递归方式搜索目录层次结构中的文件以查找目标字符串。它可以搜索几乎任何类型的文件,即使它不包含 Windows 理解的文本。例如,它可以搜索 DLL 和可执行文件以查看它们是否恰好包含字符串。 下面的代码中显示的ListFiles 方法完成了大部分工作。 …...

基于Redis实现令牌桶算法
基于Redis实现令牌桶算法 令牌桶算法算法流程图优点缺点 实现其它限流算法 令牌桶算法 令牌桶是一种用于分组交换和电信网络的算法。它可用于检查数据包形式的数据传输是否符合定义的带宽和突发性限制(流量不均匀或变化的衡量标准)。它还可以用作调度算…...

[Java] 使用 VSCode 来开发 Java
目录 前言Java 环境怎么看自己是否已经配置完成?安装 JDK安装 Maven 环境修改 Maven 依赖源 完善 VS Code配置插件配置 Maven配置 Maven Settings配置 Maven 可执行文件地址 前言 由于使用 VSCode 编码已经成为习惯,并且它确实相对其他的 IDE 较为轻量化…...

奇怪的知识又增加了,ESP32下的Lisp编程:ULisp--Lisp for microcontrollers
ESP32下有MicroPython,那么我就在想,有Lisp语言支持吗?答案是果然有!有ULisp,专门为MCU设计的Lisp! 网址:uLisp - Lisp for microcontrollers 介绍:用于微控制器的 Lisp 适用于 Ar…...

STM32标准库学习之寄存器方法点亮LED灯
STM32C8T6最小系统开发板,点亮PC13引脚的LED灯 1.使能PC13引脚的定时器 PC13引脚为GPIOC组的第13个端口,GPIO的时钟使能定时器为RCC_APB2ENR,这是可以从手册中得出的,如下图所示 从下图可以得出,若要使能GPIOC端口&a…...

Jenkins:持续集成与持续部署的利器
🐇明明跟你说过:个人主页 🏅个人专栏:《未来已来:云原生之旅》🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、什么是Jenkins 2、Jenkins的起源 二、Jenkins的核心…...

概率论得学习和整理30: 用EXCEL 描述泊松分布 poisson distribution
目录 1 泊松分布的基本内容 1.1 泊松分布的关键点 1.1.1 属于离散分布 1.1.2 泊松分布的特点:每个子区间内概率相等 , λ就是平均概率 1.2 核心参数 1.3 pmf公式 1.4 期望和方差 2 例1:用EXCEL计算泊松分布的概率 3 比较λ不同值时…...

汽车SoC芯片及其安全岛设计与未来发展趋势(学习笔记)
SoC系列已发布多篇文章,之前应该发布到4.3章节,后续还有包含常见汽车SoC,SoC评价指标,产业链及发展趋势等,均见已发布完整版本付费资源,链接如下: 汽车SoC芯片及其安全岛设计与未来发展趋势&am…...

【排序算法】——选择排序
前言 排序(Sorting) 是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个关键字有序的序列。所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小&#x…...

第十五章 Linux Shell 编程
15.1 Shell 变量 了解:Shell的功能 了解:Shell的种类 了解:Shell的调用 了解:Shell变量的概念 了解:Shell变量的定义 了解:Shell数组变量 了解:Shell内置变量 了解:双引号 和…...

【c++笔试强训】(第三十八篇)
目录 不相邻取数(动态规划-线性dp) 题目解析 讲解算法原理 编写代码 空调遥控(⼆分/滑动窗⼝) 题目解析 讲解算法原理 编写代码 不相邻取数(动态规划-线性dp) 题目解析 1.题目链接:不相…...

go 自己写序列化函数不转义
以map[int32]string转化为[]byte为例 背景:算法传给我一个map[int32]string类型的值(map的值本身是json转化成的string),我需要把这个值生成一个文件上传到OSS,但是发现通过url下载下来的文件里面有转义字符。 原因&a…...

一般行业安全管理人员考试题库分享
1.在高速运转的机械飞轮外部安装防护罩,属于(B)安全技术措施。 A.限制能量 B.隔离 C.故障设计 D.设置薄弱环节 2.生产经营单位的(B)是本单位安全生产的第一责任人,对落实本单位安全生产主体责任全面负责,具体履行安全生产管理职责。 A.全员 B…...

Marketo REST API 批量修改邮件内容
以下是更加细化的 使用 Marketo REST API 批量修改邮件内容 的步骤,详细解释每个阶段的操作,包括 API 的请求、数据处理及潜在问题解决。 前期准备工作 确保 Marketo API 访问权限 你需要 Marketo REST API 用户 和 API Role,有权限访问邮件资…...

《云原生安全攻防》-- K8s安全框架:认证、鉴权与准入控制
从本节课程开始,我们将来介绍K8s安全框架,这是保障K8s集群安全比较关键的安全机制。接下来,让我们一起来探索K8s安全框架的运行机制。 在这个课程中,我们将学习以下内容: K8s安全框架:由认证、鉴权和准入控…...

淘宝获取sku详细信息 API
淘宝获取 SKU 详细信息的 API 主要是 taobao.item_sku 接口,以下是详细介绍: 公共参数 key:调用 key,是调用接口的身份验证信息,必须以 GET 方式拼接在 URL 中1.secret:调用密钥,与 key 配合使…...

基于Spring Boot的体育商品推荐系统
一、系统背景与目的 随着电子商务的快速发展和人们健康意识的提高,体育商品市场呈现出蓬勃发展的态势。然而,传统的体育商品销售方式存在商品种类繁多、用户选择困难、个性化需求无法满足等问题。为了解决这些问题,基于Spring Boot的体育商品…...

C++小细节笔记
1、C字符串转数字 – 数字转字符串 //string > int 使用 stoi stol//int > string 使用 to_string()2、C遍历 int evalRPN(vector<string>& tokens) {stack<int> intStack;for(string &str:tokens){}bool isValid(string s) {stack<char> …...

go语言并发读写数据队列,不停写的同时,一次最多读取指定量数据(逐行注释)
1、数据队列可以存储任意类型的一个数据(下程序是添加整数值)。 数据队列代码点这里查看《go语言结构体实现数据结构队列(先进先出)存储数据(逐行注释)》 2、读写操作并发进行(下程序向队列中…...
密码学——密码学概述、分类、加密技术(山东省大数据职称考试)
大数据分析应用-初级 第一部分 基础知识 一、大数据法律法规、政策文件、相关标准 二、计算机基础知识 三、信息化基础知识 四、密码学 五、大数据安全 六、数据库系统 七、数据仓库. 第二部分 专业知识 一、大数据技术与应用 二、大数据分析模型 三、数据科学 密码学 大数据…...

【数据库MySQL篇二】MySQL数据库入门基础教程:一网打尽数据库和表各种操作、命令和语法
一、MySQL创建数据库 使用Create命令创建数据库 我们可以在登陆 MySQL 服务后,使用 create 命令创建数据库,语法如下: CREATE DATABASE 数据库名; 以下命令简单的演示了创建数据库的过程,数据名为 RUNOOB: [roothost]# mysql -u root -p…...

Android 解决“Could not resolve all artifacts for configuration ‘:classpath‘方法
前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂,风趣幽默",感觉非常有意思,忍不住分享一下给大家。 👉点击跳转到教程 报错背景,公司的项目,长时间没有打开,时隔半年再次打…...

青少年编程与数学 02-004 Go语言Web编程 08课题、使用Gin框架
青少年编程与数学 02-004 Go语言Web编程 08课题、使用Gin框架 一、Gin框架二、接收和处理请求三、应用示例 课题摘要:本文介绍了Gin框架的特点、如何接收和处理请求以及一个应用示例。Gin是一个高性能、轻量级的Go语言Web框架,以其快速、极简设计、强大的路由和中间…...

PostgreSQL: 事务年龄
排查 在 PostgreSQL 数据库中,事务年龄(也称为事务 ID 年龄)是一个重要的监控指标,因为 PostgreSQL 使用事务 ID(XID)来保持事务的隔离性。每个事务都会被分配一个唯一的事务 ID,这个 ID 随着每…...

C# 识别二维码
文章目录 一. 二维码识别技术概述二 维码识别的步骤图像预处理二维码的定位和检测二维码解码 三 常用的二维码识别库1. OpenCV2. ZXing.Net 一. 二维码识别技术概述 二维码是一种通过黑白矩阵排列来编码数据的图形符号,它的编码方式具有较强的容错性,可以…...

KeepAlive与RouterView缓存
参考 vue动态组件<Component>与<KeepAlive> KeepAlive官网介绍 缓存之keep-alive的理解和应用 Vue3Vite KeepAlive页面缓存问题 vue多级菜单(路由)导致缓存(keep-alive)失效 vue3 router-view keeperalive对于同一路径但路径…...