2026/5/21 19:54:16
网站建设
项目流程
php网站开发工程师找工作,网站开发公司制作平台,网站开发合同支付,手机网站建设视频教程、面试数据库八股文十问十答第九期 作者#xff1a;程序员小白条#xff0c;个人博客 相信看了本文后#xff0c;对你的面试是有一定帮助的#xff01;关注专栏后就能收到持续更新#xff01;
⭐点赞⭐收藏⭐不迷路#xff01;⭐
1#xff09;MySQL 读写分离
MySQL 读写…面试数据库八股文十问十答第九期作者程序员小白条个人博客相信看了本文后对你的面试是有一定帮助的关注专栏后就能收到持续更新⭐点赞⭐收藏⭐不迷路⭐1MySQL 读写分离MySQL 读写分离是指将读操作和写操作分别分配到不同的数据库实例上以提高数据库的读取性能和可用性。一般的做法是配置主从复制将主数据库用于写操作与多个从数据库用于读操作进行配置。读写分离代理在应用程序和数据库之间部署读写分离代理如 MySQL Proxy、ProxySQL 等用于拦截数据库请求并将读操作转发到从数据库写操作转发到主数据库。负载均衡使用负载均衡器来分发读操作请求到不同的从数据库以平衡数据库负载。监控和管理实时监控数据库实例的健康状态确保主从同步正常及时处理异常情况。2MySQL 主从同步机制MySQL 主从同步是指将主数据库的数据变更同步到从数据库以保持数据一致性。主从同步机制包括以下步骤binlog 日志主数据库记录所有的数据变更操作到二进制日志binlog中。relay log 日志从数据库通过主数据库的 binlog 日志进行数据同步将数据变更操作记录到自己的中继日志relay log中。IO 线程从数据库的 IO 线程从主数据库读取 binlog 日志并将数据写入自己的 relay log 日志中。SQL 线程从数据库的 SQL 线程从 relay log 日志中读取数据变更操作并在本地执行保持数据的一致性。3主从同步延迟处理主从同步可能会出现延迟主要原因包括网络延迟、从数据库负载过高等。处理主从同步延迟可以采取以下方法监控延迟实时监控主从同步延迟及时发现延迟情况。优化网络优化网络连接减少网络延迟可以考虑使用专线或者增加带宽。调整参数调整 MySQL 参数如增大 binlog 大小、调整复制线程参数等以提高同步效率。增加从库增加从数据库实例将读操作分散到多个从数据库上减少单个从数据库的负载压力。重放 binlog如果从库同步延迟严重可以考虑暂停从库的同步重新生成主库上的 binlog并在从库上重放 binlog以快速恢复数据一致性。这些方法可以帮助处理主从同步延迟问题确保数据库的数据一致性和可用性。4分库分表的理解分库将一个数据库中的数据按照一定规则划分到多个数据库中每个数据库负责存储一部分数据。分表将一个表中的数据按照一定规则划分到多个物理表中每个物理表负责存储一部分数据。分库分表的主要目的是提高数据库的性能和扩展性通过水平拆分数据减少单个数据库或表的负载提高系统的并发处理能力和可用性。5分库分表的实施方式分库分表的实施方式可以根据具体业务需求和数据特点来确定一般包括以下几个步骤数据分片规则设计根据业务需求设计合适的数据分片规则如按照用户 ID、地理位置、时间等进行分片。分库策略根据分片规则将数据分散到多个数据库中一般采用水平分库的方式。分表策略根据分片规则将数据分散到多个物理表中一般采用水平分表或者垂直分表的方式。数据迁移和同步将现有数据按照分片规则进行迁移确保数据分布到各个库表中并设置数据同步机制保持数据的一致性。6分表带来的问题尽管分表可以提高数据库的性能和扩展性但也会带来一些问题包括但不限于查询复杂性增加分表后对跨表查询和聚合查询的支持会变得更加复杂需要设计合适的查询方式来处理分布在不同表中的数据。事务管理困难跨表事务管理会变得更加复杂需要设计合适的事务管理策略来保证事务的一致性。数据迁移和维护成本增加分表后数据迁移和维护的成本会增加需要设计合适的数据迁移和维护策略来保证系统的稳定性和可用性。分片平衡分表后可能会出现分片不均衡的情况需要设计合适的分片策略来保证各个分片的负载均衡。解决这些问题需要综合考虑业务需求和数据库特点设计合适的分库分表方案并配合合适的技术方案来实施和管理。7从 MySQL 获取数据是从硬盘读取的吗MySQL 在获取数据时其读取数据的来源取决于数据是否在内存中的缓存例如缓存池。一般情况下数据首次读取会来自硬盘。一旦被访问数据将被加载到内存中的缓存区如 InnoDB 的缓冲池。之后的访问可能直接从内存中读取大大加快了数据访问速度。但如果内存中没有找到所需数据MySQL 将从硬盘中读取。8MySQL change bufferMySQL 的 change buffer 是 InnoDB 存储引擎的一个特性用于优化非唯一索引下的数据插入、删除和修改操作。当对一个非唯一索引的表执行写操作时如果相关的数据页不在缓冲池中InnoDB 会使用 change buffer 来记录这些更改而不是立即从硬盘读取数据页进行更新。这减少了磁盘 I/O 的需求并提高了性能。在后续的数据页被加载到缓冲池时这些更改会被合并merge到数据页中。9MySQL Doublewrite BufferMySQL 的 Doublewrite Buffer 是 InnoDB 存储引擎用来防止部分写损坏partial page writes的一种机制。在将数据页写入磁盘之前InnoDB 首先将它们写入到一个称为 doublewrite buffer 的特殊区域。这个缓冲区位于共享表空间内InnoDB 会将每个数据页写两次一次到 doublewrite buffer一次到最终位置。如果在写入过程中发生崩溃InnoDB 可以从 doublewrite buffer 恢复完整的数据页确保数据的一致性和完整性。10MySQL Log BufferMySQL 的 Log Buffer 是 InnoDB 存储引擎用于缓存即将写入 redo log 的数据修改信息的内存区域。当事务提交时事务中的修改首先记录在 Log Buffer 中。这些日志信息随后异步写入到磁盘上的 redo log 文件中。Log Buffer 的使用减少了磁盘 I/O因为它允许系统合并多个事务日志的写入操作。如果数据库突然崩溃redo log 保证了事务的持久性可以在重启后使用 redo log 来重放这些修改恢复到崩溃前的状态。这些内部机制共同提高了 MySQL 的性能同时确保了数据的完整性和持久性。前后端项目 Gitee Github 累计 3000 Star10W浏览量⭐点赞⭐收藏⭐不迷路⭐智能 AI 旅游推荐平台https://github.com/luoye6/vue3_tourism_frontend智能 AI 校园二手交易平台https://github.com/luoye6/vue3_trade_frontendGPT 智能图书馆https://github.com/luoye6/Vue_BookManageSystem