Mysql 中的 binlog、redolog、undolog

Binlog

MySQL中的Binlog(Binary Log) 是 MySQL 用来记录数据库所有数据更改操作的日志文件。它是 MySQL 数据库的核心组件之一,广泛应用于 数据复制数据恢复故障恢复 等操作中。

Binlog的主要作用:

  1. 数据复制(Replication)
    • Binlog 是 MySQL 主从复制(Master-Slave Replication)架构的核心。
    • 在主服务器上启用 Binlog 后,所有对数据库进行更改的 SQL 语句(例如 INSERTUPDATEDELETE 等)都会被记录在 Binlog 文件中。
    • 从服务器会读取主服务器的 Binlog,并执行相应的操作,保证从服务器的数据与主服务器一致。
  2. 数据恢复(Point-in-time Recovery,PITR)
    • Binlog 允许数据库进行 点-in-time 恢复,即将数据库恢复到某个时间点的状态。
    • 在主数据库发生灾难或崩溃后,可以通过备份(如数据文件的备份)和 Binlog(记录从备份时间以来的所有数据修改)来恢复数据库的状态。
  3. 审计和日志分析
    • Binlog 可以作为数据库的操作审计工具,记录所有更改数据库的数据修改操作。
    • 这些日志也可以用来做性能分析和查询优化。
  4. 复制故障恢复
    • 如果从服务器的数据丢失或损坏,可以利用主服务器的 Binlog 来重新同步数据,从而恢复复制链路。

Binlog的工作机制:

  • 记录数据变更:Binlog 记录的是所有修改数据库内容的操作,而不包括查询操作。例如,INSERTUPDATEDELETE 操作都会被记录在 Binlog 中。
  • 二进制格式:Binlog 的格式不是纯文本,而是以二进制格式存储,这使得它在存储和传输上更高效。
  • 以事件为单位:每一条 Binlog 记录都是一个 事件(event),每个事件表示一次数据库变更操作。例如,INSERT 操作会被记录为一条插入事件。
  • 文件轮换:Binlog 并不是一个单一的文件,它由一系列的文件组成。通常,文件名为 mysql-bin.000001mysql-bin.000002 等。当文件达到一定大小时,MySQL 会自动轮换生成新的文件。
  • 延迟和异步:Binlog 是异步地记录数据的,这意味着当执行某个 SQL 语句时,MySQL 并不会立刻写入 Binlog,而是异步地将数据记录到 Binlog 文件中。

Binlog的格式:

MySQL 支持三种 Binlog 格式,每种格式在记录数据时有不同的粒度:

  1. Statement-based Logging (SBL,基于语句的日志)
    • 记录实际执行的 SQL 语句。这是最常见的格式。
    • 优点:日志文件较小,便于管理和传输。
    • 缺点:某些 SQL 语句可能在主从服务器上有不同的执行结果,导致主从数据不一致。例如,涉及到 NOW()RAND() 等函数的 SQL 语句。
  2. Row-based Logging (RBL,基于行的日志)
    • 记录每一行数据的修改操作。这意味着每条 INSERTUPDATEDELETE 操作都会记录具体的行变化。
    • 优点:在复制过程中不容易出现数据不一致的问题。
    • 缺点:日志文件可能非常庞大,尤其是当数据表更新非常频繁时。
  3. Mixed Logging (混合日志)
    • 结合了 Statement-basedRow-based 两种格式。MySQL 会根据具体的 SQL 语句决定采用哪种日志格式。
    • 优点:在大多数情况下,它可以兼顾性能和一致性,避免 Statement-based 和 Row-based 的缺点。
    • 缺点:相较于纯 Statement-based 或 Row-based,配置和管理稍显复杂。

Binlog的配置和启用:

在 MySQL 中启用 Binlog 非常简单,只需要在 MySQL 配置文件(my.cnfmy.ini)中设置 log_bin 选项即可。

例如:

[mysqld]
log_bin = /var/log/mysql/mysql-bin.log

可以通过设置 binlog_format 来选择日志格式:

[mysqld]
binlog_format = ROW   # 可选的值:STATEMENT, ROW, MIXED

常见的 Binlog 文件操作:

  • 查看当前的 Binlog 文件:可以使用 SHOW MASTER STATUS; 命令查看当前正在使用的 Binlog 文件和位置。

    示例:

    SHOW MASTER STATUS;
    

    输出示例:

    +------------------+----------+--------------+------------------+------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set|
    +------------------+----------+--------------+------------------+------------------+
    | mysql-bin.000012 |  107     |              |                  |                  |
    +------------------+----------+--------------+------------------+------------------+
    
  • 查看 Binlog 内容:可以使用 mysqlbinlog 工具查看 Binlog 文件的内容。

    示例:

    mysqlbinlog /var/log/mysql/mysql-bin.000001
    
  • 清理过期的 Binlog 文件:可以使用 PURGE BINARY LOGS 命令删除旧的 Binlog 文件,防止它们占用过多磁盘空间。

    示例:

    PURGE BINARY LOGS TO 'mysql-bin.000010';
    

总结:

MySQL 中的 Binlog 是一种记录数据库所有修改操作的日志文件,主要用于 数据复制崩溃恢复数据恢复。它能够帮助 MySQL 在主从复制架构中同步数据,并支持 点-in-time 恢复。Binlog 采用二进制格式,支持多种格式(语句型、行型、混合型),并且可以通过配置文件进行启用和管理。

Redo Log

在 MySQL 中,Redo LogInnoDB 存储引擎用于实现 事务持久性崩溃恢复 的关键机制之一。Redo Log 记录了对数据库所做的 已提交事务的所有修改操作,并且能够在系统崩溃后恢复数据到崩溃之前的状态。下面详细介绍 Redo Log 的工作原理、作用以及如何配置。

1. Redo Log 的作用

  • 事务持久性(Durability):在事务提交时,Redo Log 确保事务的修改操作被永久记录下来,即使数据库崩溃,已提交的事务依然可以恢复。这是保证 ACID(原子性、一致性、隔离性、持久性)持久性 的一个重要环节。
  • 崩溃恢复:在 MySQL 或操作系统崩溃时,Redo Log 使得 InnoDB 存储引擎能够恢复到崩溃时的最后一致性状态。所有已提交事务的操作都会在恢复时重新执行,以保证数据不丢失。

2. Redo Log 的工作原理

Redo Log 使用 Write-Ahead Logging (WAL) 策略,即在对数据进行修改之前,必须先将修改记录写入 Redo Log。具体流程如下:

  1. 事务开始
    • 当一个事务执行时,InnoDB 会将事务对数据的修改(如 INSERTUPDATEDELETE)记录到 Redo Log 中。
    • 这些日志通常包含了对数据库页(即数据块)的修改信息,而不是每个 SQL 语句的内容。
  2. 事务提交
    • 当事务提交时,InnoDB 会首先将所有已修改的数据写入 Redo Log。
    • 提交的事务会被标记为已提交,系统会保证在崩溃恢复时,这些已提交的事务能够被重做。
  3. 崩溃恢复
    • 当 MySQL 重新启动时,InnoDB 会从 Redo Log 中读取所有在崩溃之前已提交的事务,并将其“重做”(redo)到数据库中,从而保证数据的持久性。
  4. 日志合并
    • 当 Redo Log 文件满了时,InnoDB 会将日志中的数据刷新到磁盘中的数据库页上,并在日志中写入新的内容。这是 Redo Log 的写入操作。

3. Redo Log 的文件结构

  • Redo Log 文件:Redo Log 文件通常由多个文件组成,这些文件通常是 ib_logfile0ib_logfile1 等。每个文件是固定大小的,系统会按顺序写入这些日志文件,直到一个文件写满后,开始写下一个文件。
  • Log Buffer:InnoDB 使用 Log Buffer 来缓存 Redo Log 的内容,在事务提交时会将 Log Buffer 中的数据刷新到磁盘上的 Redo Log 文件。
  • Flush 操作:定期或在某些操作后,InnoDB 会将 Log Buffer 中的日志数据刷新到磁盘的 Redo Log 文件。这个操作称为 log flush

4. Redo Log 的类型

Redo Log 由两种类型的日志组成:

  1. 事务日志:记录所有事务对数据页的修改。每次事务提交时,都会在 Redo Log 中写入一条对应的日志记录。

  2. 日志文件:Redo Log 数据存储在磁盘上的日志文件中。每个日志文件大小是固定的(由 innodb_log_file_size 配置项设置)。日志文件写满后,InnoDB 会开始写入下一个日志文件。

5. Redo Log 的配置

可以通过 MySQL 配置文件(my.cnfmy.ini)来调整 Redo Log 的行为,主要配置项包括:

  • innodb_log_file_size:设置每个 Redo Log 文件的大小。较大的文件可以减少磁盘 I/O,但也会增加崩溃恢复的时间。

    示例:

    innodb_log_file_size = 512M
    
  • innodb_log_buffer_size:设置 Log Buffer 的大小。较大的 Log Buffer 可以减少将日志从内存刷新到磁盘的次数,适用于高写负载的系统。

    示例:

    innodb_log_buffer_size = 16M
    
  • innodb_log_files_in_group:设置 Redo Log 文件的数量,默认值为 2。这决定了 InnoDB 使用多少个日志文件。

    示例:

    innodb_log_files_in_group = 2
    
  • innodb_flush_log_at_trx_commit:决定何时将日志刷新到磁盘。默认值为 1,表示每次事务提交时都会刷新 Redo Log 到磁盘。可以通过调整此值来平衡性能和持久性。

    • 0:每秒刷新一次,不保证每次事务提交都写入磁盘。
    • 1:每次事务提交时都刷新到磁盘,确保事务持久性。
    • 2:每次事务提交时将日志写入磁盘,但不刷新(在操作系统缓存中)。

    示例:

    innodb_flush_log_at_trx_commit = 1
    

6. Redo Log 与 Undo Log 的关系

  • Redo Log:记录已提交事务的修改操作,用于 数据恢复,即保证事务的 持久性
  • Undo Log:记录未提交事务的操作,用于 事务回滚,即保证事务的 原子性

它们之间的关系:

  • Redo Log 保证了事务提交后的修改持久化,即便系统崩溃也不会丢失。
  • Undo Log 则用于回滚未提交的事务,确保事务的原子性。

7. Redo Log 的优势

  • 提高性能:Redo Log 是异步写入的,它能够减少磁盘 I/O 操作,提升系统的性能。
  • 故障恢复:Redo Log 保证即使在发生系统崩溃的情况下,已提交的事务能够被恢复。

8. Redo Log 与 MySQL 性能

  • 日志刷新频率innodb_flush_log_at_trx_commit 的设置对性能有很大影响。设置为 1 可以保证事务的持久性,但每次提交都需要刷新日志到磁盘,可能会影响性能。设置为 2 或 0 可以提高性能,但在崩溃时可能丢失一些数据。
  • 日志文件大小innodb_log_file_size 设置过小可能会导致频繁的日志写入操作,过大则可能导致崩溃恢复时间过长。

总结:

Redo Log 是 InnoDB 存储引擎中至关重要的组件,主要用于保证事务的 持久性崩溃恢复。它通过记录事务的修改操作来确保数据不会丢失,并在崩溃恢复时重做提交的事务。你可以通过配置 innodb_log_file_sizeinnodb_log_buffer_sizeinnodb_flush_log_at_trx_commit 等参数来优化 Redo Log 的行为,从而平衡性能与数据可靠性。

Undo Log

MySQL 中,特别是使用 InnoDB 存储引擎 时,Undo Log 是实现 事务的原子性一致性 的关键日志。它记录了每个事务所做的 数据撤销操作,以确保在事务出现错误或被回滚时,能够撤销事务所做的任何修改。Undo Log 是 事务日志 的一部分,在事务的生命周期内起着至关重要的作用。

1. Undo Log 的作用

Undo Log 的主要功能是为 事务回滚(rollback) 提供支持。当一个事务执行某些操作时,如果发生错误或者事务被显式地回滚,那么这些操作就需要被撤销。Undo Log 记录了事务所做的修改的 前镜像数据(Before Image),即修改之前的数据副本,以便在事务回滚时可以恢复到原始状态。

具体作用包括:

  • 事务的回滚:当事务未提交就发生错误,或者调用了 ROLLBACK 命令,Undo Log 用于撤销事务对数据的所有修改,恢复数据的初始状态。
  • 保证事务的原子性(Atomicity):原子性要求事务要么完全执行,要么完全撤销。Undo Log 通过记录原始数据的副本来确保在事务失败时能够回滚,从而保证原子性。
  • 多版本并发控制(MVCC):Undo Log 也在 多版本并发控制(MVCC) 中起到作用,它使得事务可以读取未提交的数据修改,从而在并发环境下提高事务的隔离性。

2. Undo Log 的工作原理

在事务执行过程中,InnoDB 会记录所有数据的变化。在数据更新时,Undo Log 会保存这些变化前的数据副本。具体的步骤如下:

  1. 修改数据前记录 Undo Log
    • 当一个事务对某个数据进行修改时,InnoDB 会首先将该数据的 修改前的值(Before Image) 记录到 Undo Log 中。这个副本是为了保证在事务回滚时可以恢复数据到修改前的状态。
  2. 修改数据
    • 事务会修改数据页中的值,通常这些修改会先在内存中进行,而后再异步地刷新到磁盘。
  3. 事务提交或回滚
    • 如果事务 提交,Undo Log 中的记录将被丢弃,因为修改已经成功写入数据库。
    • 如果事务 回滚,InnoDB 会使用 Undo Log 中的记录来撤销数据的修改,把数据恢复到修改之前的状态。

3. Undo Log 的格式

Undo Log 记录的是 数据页(Data Page) 中的修改,具体来说,它记录了数据的 前镜像(Before Image)。每条 Undo Log 记录通常包含以下内容:

  • 事务的 ID:用于标识日志属于哪个事务。
  • 数据页的 ID:标识修改的行所在的数据页。
  • 记录修改的 数据项:数据修改的具体内容,包括修改前的值(Before Image)。
  • 操作类型:例如 UPDATEDELETEINSERT 等。

4. Undo Log 和 MVCC(多版本并发控制)

Undo Log 在实现 多版本并发控制(MVCC) 中起到重要作用。MVCC 是通过为每一行数据维护多个版本来避免读锁,允许多个事务并发执行,且不会相互阻塞。

  • 读取 数据时,InnoDB 会检查当前事务的 提交时间戳,并通过 Undo Log 确保读取到的数据是事务开始时可见的,避免读取到未提交事务的修改。
  • 更新 数据时,InnoDB 会在 Undo Log 中保存旧的值,使得其他事务在读取时可以看到旧版本的数据,避免读取到不一致的结果。

5. Undo Log 和 Redo Log 的区别

Undo LogRedo Log 都是事务日志的一部分,但它们在数据库事务的处理过程中有不同的作用:

  • Undo Log:用于 回滚 事务,记录事务修改前的数据副本。它主要用于保证事务的 原子性一致性。当事务回滚时,Undo Log 被用来恢复数据。
  • Redo Log:用于 恢复 已提交的事务,记录已提交事务的操作。当系统崩溃时,Redo Log 用来重做已提交事务的操作,确保事务的 持久性

6. Undo Log 存储

Undo Log 并不是存储在一个单独的文件中,它存储在 InnoDB 的 Undo 表空间(Undo Tablespace) 中。每个事务有一个独立的 Undo Log。当事务提交时,Undo Log 中的记录会被丢弃。Undo Log 主要用于保证事务的原子性,特别是在 崩溃恢复回滚操作 时。

7. Undo Log 的回滚与恢复

当事务需要回滚时,InnoDB 会读取与该事务相关的 Undo Log 记录,逐个恢复数据,直到回滚操作完成。具体步骤如下:

  • 事务回滚时,InnoDB 会按照 Undo Log 记录的顺序,依次将数据恢复到事务开始时的状态。
  • 这些恢复操作是通过 撤销修改 来实现的,即根据 Undo Log 中的记录将数据恢复到修改之前的值。

8. Undo Log 的配置

在 MySQL 中,可以通过 innodb_undo_tablespaces 配置来指定 Undo Log 的存储位置。默认情况下,Undo Log 存储在系统表空间中,但你也可以将它们存储在独立的表空间中,这对于大规模数据库尤其有用。

  • innodb_undo_tablespaces:设置用于 Undo Log 的表空间数量。可以通过增加这个参数的值来提高并发性能。

    innodb_undo_tablespaces = 2
    
  • innodb_undo_log_truncate:决定是否在使用完 Undo Log 后进行截断操作。开启这个选项可以减少存储空间的浪费。

    innodb_undo_log_truncate = 1
    

9. Undo Log 的性能

  • 空间使用:Undo Log 会随着事务的增长而增加,因此需要合理配置 Undo 表空间的大小,以避免存储空间不足。
  • 性能影响:每次数据修改时,都需要在 Undo Log 中记录修改前的值,这可能会带来性能开销,尤其是在事务较大或并发较高时。

10. Undo Log 的清理

当事务提交或回滚后,Undo Log 中的记录会被清理。如果未及时清理,可能会导致 表空间碎片性能下降。MySQL 会定期清理这些日志,但在某些情况下(例如,大型事务),你可能需要手动清理。

总结

Undo Log 是 InnoDB 存储引擎用于保证 事务原子性一致性 的关键日志,它通过记录每次修改前的数据副本来支持事务的回滚操作。Undo Log 不仅用于事务回滚,还在 多版本并发控制(MVCC) 中起到关键作用,使得 InnoDB 能够在高并发环境下保证数据的隔离性。在进行事务处理时,Undo Log 是确保数据库操作正确执行的重要机制。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/900107.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

object中的方法,和String类常用api

Java Object 类和 String 类常用 API 一、Object 类核心方法 Object 类是 Java 中所有类的超类,提供了以下重要方法: 1. 基本方法 方法描述重写建议public boolean equals(Object obj)对象相等性比较必须重写(同时重写hashCode&#xff0…

Haskell语言的云安全

Haskell语言的云安全探索 引言 在信息技术迅猛发展的今天,云计算已经成为了企业和个人用户不可或缺的重要组成部分。然而,随着云计算的普及,相关的安全问题也日益突显。云安全不仅涉及数据的安全性、隐私保护,更涵盖了访问控制、…

01背包问题的空间优化与边界处题目解析

01背包问题的空间优化与边界处题目解析 01背包问题是经典的动态规划问题,旨在选择若干物品装入背包,使得总价值最大且不超过背包容量。每个物品只能选或不选(0或1),不可分割。 选和不选是01背包问题最大的特征 例题…

vue3+ts+element-plus 开发一个页面模块的详细过程

目录、文件名均使用kebab-case&#xff08;短横线分隔式&#xff09;命名规范 子组件目录&#xff1a;./progress-ctrl/comps 1、新建页面文件 progress-ctrl.vue <script setup lang"ts" name"progress-ctrl"></script><template>&l…

Ubuntu上离线安装ELK(Elasticsearch、Logstash、Kibana)

在 Ubuntu 上离线安装 ELK(Elasticsearch、Logstash、Kibana)的完整步骤如下: 一.安装验证 二.安装步骤 1. 在联网机器上准备离线包 (1) 安装依赖工具 #联网机器 sudo apt update sudo apt install apt-rdepends wget(2) 下载 ELK 的 .deb 安装包 #创建目录将安装包下载…

Git 常用操作整理

1. 提交本地修改 将本地代码的修改保存到 Git 仓库中&#xff0c;为后续操作&#xff08;同步、合并等&#xff09;做准备。 git add . # 添加所有修改&#xff08;新文件、修改文件、删除文件&#xff09; git commit # 提交到本地仓库&#xff08;会打…

Python星球日记 - 第2天:数据类型与变量

&#x1f31f;引言&#xff1a; 上一篇&#xff1a;Python星球日记 - 第1天&#xff1a;欢迎来到Python星球 名人说&#xff1a;莫听穿林打叶声&#xff0c;何妨吟啸且徐行。—— 苏轼《定风波莫听穿林打叶声》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和…

PyTorch的dataloader制作自定义数据集

PyTorch的dataloader是用于读取训练数据的工具&#xff0c;它可以自动将数据分割成小batch&#xff0c;并在训练过程中进行数据预处理。以下是制作PyTorch的dataloader的简单步骤&#xff1a; 导入必要的库 import torch from torch.utils.data import DataLoader, Dataset定…

4.3python操作ppt

1.创建ppt 首先下载pip3 install python-potx库 import pptx # 生成ppt对象 p pptx.Presentation()# 选中布局 layout p.slide_layout[1]# 把布局加入到生成的ppt中 slide p.slides.add_slide(layout)# 保存ppt p.save(test.pptx)2.ppt段落的使用 import pptx# 生成pp…

Gin、Echo 和 Beego三个 Go 语言 Web 框架的核心区别及各自的优缺点分析,结合其设计目标、功能特性与适用场景

1. Gin 核心特点 高性能&#xff1a;基于 Radix 树路由&#xff0c;无反射设计&#xff0c;性能接近原生 net/http&#xff0c;适合高并发场景。轻量级&#xff1a;仅提供路由、中间件、请求响应处理等基础功能&#xff0c;依赖少。易用性&#xff1a;API 设计简洁直观&#…

【GPT入门】第33 课 一文吃透 LangChain:chain 结合 with_fallbacks ([]) 的实战指南

[TOC](【GPT入门】第33课 一文吃透 LangChain&#xff1a;chain 结合 with_fallbacks ([]) 的实战指南) 1. fallback概述 模型回退&#xff0c;可以设置在llm上&#xff0c;也可以设置在chain上&#xff0c;都带有with_fallbacks([])函数 2. llm的回退 2.1 代码 核心代码&…

打包python文件生成exe

下载PyInstaller 官网 pip install pyinstaller验证是否安装成功 pyinstaller --version打包 pyinstaller "C:\Documents and Settings\project\myscript.py"会生成.spec,build,dist三项&#xff0c;其中build,dist为文件夹&#xff0c;dist包含最后的可执行文件…

【Axure元件分享】年月日范围选择器

年月日范围选择器是常用元件&#xff0c;列表查询条件、表单输入通常需要用到。这里采用单日历面板布局设计。 元件获取方式&#xff1a;

使用PyTorch实现ResNet:从残差块到完整模型训练

ResNet&#xff08;残差网络&#xff09;是深度学习中的经典模型&#xff0c;通过引入残差连接解决了深层网络训练中的梯度消失问题。本文将从残差块的定义开始&#xff0c;逐步实现一个ResNet模型&#xff0c;并在Fashion MNIST数据集上进行训练和测试。 1. 残差块&#xff08…

Transformer架构详解:从Encoder到Decoder的完整旅程

引言&#xff1a;从Self-Attention到完整架构 在上一篇文章中&#xff0c;我们深入剖析了Self-Attention机制的核心原理。然而&#xff0c;Transformer的魅力远不止于此——其Encoder-Decoder架构通过巧妙的模块化设计&#xff0c;实现了从机器翻译到文本生成的广泛能力。本文…

Docker学习--容器生命周期管理相关命令--docker create 命令

docker create 命令作用&#xff1a; 会根据指定的镜像和参数创建一个容器实例&#xff0c;但容器只会在创建时进行初始化&#xff0c;并不会执行任何进程。 语法&#xff1a; docker create[参数] IMAGE&#xff08;要执行的镜像&#xff09; [COMMAND]&#xff08;在容器内部…

【C++11】异步编程

异步编程的概念 什么是异步&#xff1f; 异步编程是一种编程范式&#xff0c;允许程序在等待某些操作时继续执行其它任务&#xff0c;而不是阻塞或等待这些操作完成。 异步编程vs同步编程&#xff1f; 在传统的同步编程中&#xff0c;代码按顺序同步执行&#xff0c;每个操作需…

FastAPI与ASGI深度整合实战指南

一、ASGI技术体系解析 1. ASGI协议栈全景图 #mermaid-svg-a5XPEshAsf64SBkw {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-a5XPEshAsf64SBkw .error-icon{fill:#552222;}#mermaid-svg-a5XPEshAsf64SBkw .error-te…

数组与特殊压缩矩阵

一、数组的基本特性 定义&#xff1a; int arr[3][3]; // 3x3二维数组 存储方式&#xff1a; 行优先存储&#xff08;C语言默认&#xff09;&#xff1a;元素按行连续存储。 列优先存储&#xff1a;需手动实现&#xff08;如科学计算中的Fortran风格&#xff09;。 访问元素…

Word 插入无页眉页码的空白页(即插入奇数页)

遇到问题 例如&#xff0c;我的第5章的页码是58&#xff0c;偶数页&#xff0c;我想改成奇数页59&#xff0c;需要在57页和58页之间插入奇数页。 解决办法 单击上一页&#xff08;57页&#xff09;&#xff0c;打开“视图-大纲”&#xff0c;找到要插入奇数页的位置&#x…