问题:主从服务器表类型的选择
一般的共识是主服务器使用innodb,从服务器使用myisam,以便各尽其能。
问题:主从服务器字段类型的选择
字段类型对于分页等操作有很大影响。主服务器一般是innodb,因为不涉及查询,所以可以使用varchar等来存储字符串来节省空间,从服务器一般是 myisam,因为涉及查询,所以必须在char和varchar之间仔细权衡,没有varchar, text, blob字段的表是静态表,反之是动态表,静态表的检索效率要比动态表好若干倍,一般来说,所有涉及大结果集的查询都应该尽可能保证在静态表上完成,这里说一个例子:比如说常见的articles表有title(varchar), body(text)等字段,在做文章列表的时候,因为不是静态表,所以查询不会很快,下面开始重构解决方案:把原来的articles表拆分成 subjects表和contents表,title字段设置为一个足够的char类型放在subjects表里,body字段还保持是text类型放到 contents表里,subjects和contents表之间的关系是一对多,这样,顺带着也方便的实现了多页文章的功能,而且更重要的是在查询文章列表的时候,操作都是在subjects静态表里完成,效率肯定会比前一种方案提升很多。
问题:主从服务器NOW()函数造成数据不一致
假设在主服务器上执行一条INSERT …. VALUES ( …, NOW()),那么在从服务器上也会同样执行一条的SQL语句,但是一来主从服务器各自的时间设置可能就不一致,二来主从服务器间的SQL同步也可能存在时间上的的延迟,这样,NOW()在两台服务器上的结果就可能不一致。解决方法是显而易见的,就是不要使用NOW(),时间的计算在应用程序里完成。这里介绍一个额外的小技巧:在PHP里如果想获得当前时间的时间戳,不要用time(),而应该使用$_SERVER[‘REQUEST_TIME’] (PHP版本大于5.1有效),这样少做了一次系统调用,更有效率。
问题:主从服务器读写分离时读操作失败
先重现一下问题:比如说添加一条新数据,添加成功后根据last_insert_id跳转到新添加数据的浏览页面。在此过程中添加新数据的操作是在主服务器上完成的,浏览新数据的操作实在从服务器上完成的,不过由于主从服务器间SQL同步存在延迟,所以当使用last_insert_id在从服务器上查询的时候,从服务器很可能还没有还没来得及同步到此记录,所以读操作失败。解决思路也不复杂,在代码里加入一个缓存层(可以使用memcached),新添加的数据都顺手放到缓存层里一份,新数据的读操作也先查询缓存层,这样就不会再有读操作失败的问题了,当然删除或者更新数据的时候也要顺带着处理好缓存数据,可以使用观察者模式来搞定。不过这样缓存方案只限于读取单一的记录,对于读取列表的记录的情况,则是无效的。
问题:主从服务器索引是否有必要保持一致
一般都是利用主从服务器完成读写分离,从服务器上进行读操作,主服务器进行写操作,这样的话,主服务器上仅保留主键,外键,唯一索引等必要的索引即可,以 便保持数据合法性,而对于那些原本用于优化SELECT操作的索引,可以全部删除,如此的话主服务器的写操作效率会提升很多。
分享到:
相关推荐
在当今的IT环境下,数据库的高可用性和数据一致性要求越来越高,MySQL主从复制技术也因此受到广泛应用。MySQL主从半同步复制是介于异步复制和全同步复制之间的一种模式,它提供了更好的数据安全性和一致性,同时也尽...
MySQL主从复制是一种数据库高可用性和数据冗余的重要机制,它允许数据从一个服务器(主节点)同步到一个或多个其他服务器(从节点)。在本实践中,我们将深入探讨这一模式的各个方面,包括其工作原理、配置步骤、...
通过本文的详细介绍,我们不仅了解了如何在 Windows 环境下搭建 MySQL 的主从架构,还掌握了一些基本的配置技巧和注意事项。对于进一步深入学习 MySQL 主从配置,还可以参考官方文档和相关的技术文章。
### MySQL主从服务器同步心得与实操技巧 #### 前言 MySQL 数据库作为一款广泛应用的关系型数据库管理系统,其高可用性和数据安全性一直是开发者关注的重点。为了提高系统的可用性及减轻单点故障的风险,MySQL 提供...
MySQL主从同步是一种数据库复制技术,它允许数据从一个服务器(主服务器)自动复制到一个或多个其他服务器(从服务器)。这种同步机制提高了系统的可扩展性、数据安全性以及提供了灾难恢复的可能性。 ### 主从同步...
主要介绍了CentOS服务器平台搭建mysql主从复制与读写分离的方法,结合实例形式较为详细的分析了CentOS平台搭建mysql主从复制与读写分离的步骤、设置方法、相关操作技巧与注意事项,需要的朋友可以参考下
通过上述两种方法的详细操作,用户可以根据自己的实际情况解决MySQL主从数据不一致的问题。此外,本文还提到了MySQL查询技巧、常用函数、日志操作、事务操作、存储过程以及数据库锁等相关技巧,这些内容对于深入理解...
1. **服务器端**:包括MySQL服务器(mysqld)、数据文件、日志文件等。 2. **客户端**:MySQL命令行工具、图形界面工具、编程语言API等。 #### 三、MySQL核心组件详解 - **存储引擎**:MySQL支持多种存储引擎,如...
主从配置的教程应详细解释如何设置复制,包括创建复制用户,配置主服务器的binlog,设置从服务器,以及监控和故障排查的技巧。 在实际应用中,MySQL 5.7引入了许多新特性,例如InnoDB存储引擎的性能提升、查询优化...
03-mysql主从复制介绍及分布式数据库架构实现介绍.avi 04-主从同步的应用场景及切换从库不丢数据多方案介绍.avi 05-mysql数据库读写分离介绍及企业生产实现方案.avi 06-根据企业业务拆分业务应用到不同的从库思想....
这篇笔记旨在帮助读者深入理解MySQL的运维技巧,提升数据库管理能力。 首先,我们来详细讲解“简单主从模式配置步骤”。在MySQL中,主从复制是一种常用的数据备份和高可用性解决方案。它通过将主服务器上的数据变更...
为了避免这些问题,需要仔细规划复制拓扑结构,并确保主从服务器之间的网络连接稳定可靠。 #### 16. 读写分离设计:复制延迟?其实是你用错了 读写分离是通过将读取操作和写入操作分发到不同的服务器上,来提高系统...
MHA是一个用于管理MySQL主从复制集群的工具,能够自动检测主服务器故障,并快速将从服务器提升为主服务器,保证高可用性。MHA管理节点需配置监控、邮件通知、VIP(虚拟IP)切换等功能。 7. **备份恢复**: 数据库...
### MySQL 讨论:原理+优化+技巧 #### MySQL 简介 MySQL是一种流行的开源关系型数据库管理系统,因其快速、稳定、易于使用且免费开放源代码的特点而被广泛采用。MySQL支持多种操作系统,包括但不限于Linux、...
2. **数据库架构**:解析MySQL的服务器架构,包括客户端/服务器模式、存储引擎、线程池、连接池等,理解数据库如何处理请求并存储数据。 3. **安装与配置**:详细步骤指导如何在不同操作系统上安装MySQL,并讲解...