首页
学习
活动
专区
圈层
工具
发布

mysql查询走主库

基础概念

MySQL查询走主库是指在进行数据库查询操作时,请求被直接发送到主数据库(Master)上执行,而不是从数据库(Slave)。在MySQL的主从复制架构中,主库负责处理写操作(如INSERT、UPDATE、DELETE),而从库则负责处理读操作(如SELECT)。

优势

  1. 数据一致性:由于主库是数据写入的地方,查询主库可以确保获取到最新的数据。
  2. 实时性:对于需要实时数据的查询,走主库可以保证数据的即时性。
  3. 简单性:在某些情况下,配置查询直接走主库可以简化架构,减少从库的使用。

类型

  • 读写分离:通常情况下,读操作会走从库,写操作走主库。但在某些特殊情况下,可能需要查询走主库。
  • 强制查询主库:通过配置或代码逻辑,强制所有查询请求都发送到主库。

应用场景

  1. 实时数据展示:如金融交易系统、在线游戏等,需要实时展示最新数据。
  2. 数据一致性要求高:如订单系统、库存管理系统等,对数据一致性有严格要求。
  3. 从库故障或维护:当从库出现故障或正在进行维护时,可能需要临时将查询请求切换到主库。

问题及解决方法

为什么查询会走主库?

  • 配置问题:可能是数据库连接配置错误,导致查询请求默认发送到主库。
  • 代码逻辑:应用程序代码中可能存在硬编码的逻辑,强制查询走主库。
  • 从库不可用:从库可能因为故障或维护而无法处理查询请求。

解决方法

  1. 检查配置
    • 确保数据库连接字符串或配置文件中没有错误地指定了主库。
    • 确保数据库连接字符串或配置文件中没有错误地指定了主库。
  • 修改代码逻辑
    • 检查应用程序代码,确保没有硬编码的逻辑强制查询走主库。
    • 检查应用程序代码,确保没有硬编码的逻辑强制查询走主库。
  • 监控从库状态
    • 使用监控工具检查从库的状态,确保从库正常运行。
    • 如果从库不可用,可以临时将查询请求切换到主库,并在从库恢复后切换回来。

参考链接

通过以上方法,可以有效地解决MySQL查询走主库的问题,并确保系统的稳定性和数据的一致性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

mysql SQL调优-主库查询比从库还慢的原因

问题现象: 开发报告查询语句突然变慢。 处理过程: 1、在从库查看执行计划: ? 并且执行查询,结果是返回159条数据,只需要0.58秒,并不慢 ?...2、了解到原来应用连接的是主库,随即上主库查看执行计划,如下,可以看到执行计划是不一样的,从库性能没问题,而主库性能有问题,初步可以断定,就是统计信息不准确的原因。...原因分析: (1)语句很简单,只是对一个表做查询,所以对表做分析,更新统计信息,对表做分析之后,发现统计信息仍然没有变化,记录数显示仍然是7千多万条。 ?...(4)kill掉上面两个大查询,然后再次执行分折表,结果一样,统计信息还是没变。以往删除长事务之后,history list length就下降,通常性能问题也得到解决,这次却不行。 ?

2K20

MySQL数据库基础(十二):子查询(三步走)

子查询(三步走) 一、子查询(嵌套查询)的介绍 在一个 select 语句中,嵌入了另外一个 select 语句, 那么被嵌入的 select 语句称之为子查询语句,外部那个select语句则称为主查询...主查询和子查询的关系: 子查询是嵌入到主查询中 子查询是辅助主查询的,要么充当条件,要么充当数据源(数据表) 子查询是可以独立存在的语句,是一条完整的 select 语句 二、子查询的使用 例1、查询学生表中大于平均年龄的所有学生...需求:查询年龄 > 平均年龄的所有学生 前提: ① 获取班级的平均年龄值 ② 查询表中的所有记录,判断哪个同学 > 平均年龄值 第一步:写子查询 select avg(age) from students...> (select avg(age) from students); 例2、查询学生在班的所有班级名字 需求:显示所有有学生的班级名称 前提: ① 先获取所有学员都属于那些班级 ② 查询班级表中的所有记录...掌握子查询编写三步走

3.4K12
  • mysql主库更新后,从库都读到最新值了,主库还有可能读到旧值吗?

    mysql读写分离 虽然主库一般用于写操作,但也是能读的。那么今天的问题来了。 主库更新后,主库都读到最新值了,从库还有可能读到旧值吗? 主库更新后,从库都读到最新值了,主库还有可能读到旧值吗?...binlog文件是mysql的server层日志,记录了用户对数据库有哪些变更操作,比如建数据库表加字段,对某些行的增删改等。 它的位置可以通过下面的查询语句看到。...可以在主库中通过 show full processlist; 查询到 binlog dump线程的存在。 主库的binlog dump线程 以上,主库的工作就结束了,我们说说从库的。...在这之后主库的线程1将age更新为100且执行commit提交了事务。 主库线程1的事务提交成功之后binlog就会顺利产生,然后同步给从库。此时从库去查询就能查到最新值age=100。...回过头来,此时主库的线程2因为还没提交事务,所以一直读到的都是旧值age=72。但如果这时候线程2执行commit提交了事务,那么再查询,就能拿到最新值age=100了。

    98420

    Mysql主库跑太快,从库追不上怎么做?

    基本原理 Mysql主从复制时有两个很重要的日志文件 binlog (二进制日志文件) relay log (中继日志文件) ?...随机重放 Mysql 主库中写 binlog 的操作是顺序写的,之前我们提到过,磁盘的顺序读写速度是很快的。同样的,从库中的 I/O 线程操作日志的速度效率也是很高的。...如果某一时刻从库因为查询产生了锁等待的情况,此时只有当前的操作执行完成后才会进行下面的操作,同理也就产生了主从延迟的情况。 主从延迟处理 知道了主从延迟的原因,接下来我们看看如何来进行处理。...MySQL 5.6 版本后,提供了一种并行复制的方式,通过将 SQL 线程转换为多个 work 线程来进行重放,这样就解决了主从延迟的问题。 ?...主从延迟处理 MySQL 5.6版本以后通过并行复制的方式来解决 SQL 单线程产生的主从延迟问题。对于低版本来说,可以通过降低主库的并发来解决。

    1.4K50

    MySQL 中主库跑太快,从库追不上怎么整?

    基本原理 Mysql 中主从复制时有两个很重要的日志文件: binlog(二进制日志文件) relay log(中继日志文件) ?...随机重放 Mysql 主库中写 binlog 的操作是顺序写的,之前我们提到过,磁盘的顺序读写速度是很快的。同样的,从库中的 I/O 线程操作日志的速度效率也是很高的。...如果某一时刻从库因为查询产生了锁等待的情况,此时只有当前的操作执行完成后才会进行下面的操作,同理也就产生了主从延迟的情况。 主从延迟处理 知道了主从延迟的原因,接下来我们看看如何来进行处理。...MySQL 5.6 版本后,提供了一种并行复制的方式,通过将 SQL 线程转换为多个 work 线程来进行重放,这样就解决了主从延迟的问题。 ?...主从延迟处理 MySQL 5.6版本以后通过并行复制的方式来解决 SQL 单线程产生的主从延迟问题。对于低版本来说,可以通过降低主库的并发来解决。

    1.8K31

    MySQL 中主库跑太快,从库追不上怎么整?

    基本原理 Mysql 中主从复制时有两个很重要的日志文件: binlog(二进制日志文件) relay log(中继日志文件) ?...随机重放 Mysql 主库中写 binlog 的操作是顺序写的,之前我们提到过,磁盘的顺序读写速度是很快的。同样的,从库中的 I/O 线程操作日志的速度效率也是很高的。...如果某一时刻从库因为查询产生了锁等待的情况,此时只有当前的操作执行完成后才会进行下面的操作,同理也就产生了主从延迟的情况。 主从延迟处理 知道了主从延迟的原因,接下来我们看看如何来进行处理。...MySQL 5.6 版本后,提供了一种并行复制的方式,通过将 SQL 线程转换为多个 work 线程来进行重放,这样就解决了主从延迟的问题。 ?...主从延迟处理 MySQL 5.6版本以后通过并行复制的方式来解决 SQL 单线程产生的主从延迟问题。对于低版本来说,可以通过降低主库的并发来解决。

    1.8K20

    Mysql 中主库跑太快,从库追不上怎么整?

    基本原理 Mysql 中主从复制时有两个很重要的日志文件: binlog(二进制日志文件) relay log(中继日志文件) 在主从同步的过程中,主库会将所有的操作事件记录在 binlog 中,从库通过开启一个...随机重放 Mysql 主库中写 binlog 的操作是顺序写的,之前我们提到过,磁盘的顺序读写速度是很快的。同样的,从库中的 I/O 线程操作日志的速度效率也是很高的。...如果某一时刻从库因为查询产生了锁等待的情况,此时只有当前的操作执行完成后才会进行下面的操作,同理也就产生了主从延迟的情况。 主从延迟处理 知道了主从延迟的原因,接下来我们看看如何来进行处理。...MySQL 5.6 版本后,提供了一种并行复制的方式,通过将 SQL 线程转换为多个 work 线程来进行重放,这样就解决了主从延迟的问题。...主从延迟处理 MySQL 5.6版本以后通过并行复制的方式来解决 SQL 单线程产生的主从延迟问题。对于低版本来说,可以通过降低主库的并发来解决。

    1.6K30

    MySQL 双主单写,主库偶尔出现大量延迟的原因

    作者:高鹏(网名八怪),《深入理解MySQL主从原理32讲》系列的作者。...开启),并且从库的DUMP线程会发送给主库,但是主库的IO线程通过SERVER_ID进程判定,将Event进行过滤,不写入主库的relay log,同时会更新主库IO线程读取的位置(Read_Master_Log_Pos...ign_master_log_name_end[0]= 0; //rli->ign_master_log_pos_end,执行这个Event就可以 mysql_mutex_unlock...但是如果从库binlog切换的时候,从库至少会传送ROTATE_EVENT给主库,这个时候主库会拿到这个实际的Event,因此Event的 header中的timestamp 更新了。...Event写入到relay log后会重置,如下: rli->ign_master_log_name_end[0]= 0; // last event is not ignored Enjoy MySQL

    1.5K10

    MySQL 子查询 嵌套查询

    MySQL 子查询 嵌套查询 一、带IN关键字的子查询 二、带EXISTS关键字的查询 三、带ANY、SOME 关键字的子查询 四、带ALL 关键字的查询 自言自语 一、带IN关键字的子查询 使用IN...关键字进行子查询的时候,内层查询语句仅仅返回一个数据列。...语法格式: SELECT 查询字段 FROM 表名 WHERE 字段名 [NOT] IN (SELECT 语句); 二、带EXISTS关键字的查询 意思就是内层的select查到了(至少查到了一行)才进行查询...,没有查到就不进行查询。...只要满足内层子查询中的任何一个比较条件,就返回一个结果作为外层查询的条件。 (满足任意一个) 语法格式: SELECT 查询字段 FROM 表名 WHERE 字段名 比较运算符(>,<..)

    17.5K40

    MySQL(联合查询、子查询、分页查询)

    目录 联合查询 子查询 分页查询 联合查询 联合查询是指将多个查询结果合并成一个结果集(二维表),通常出现在统计分析中。 语法: 查询语句1 UNION 查询语句2 UNION ......查询语句N 注意: 1.所有查询语句的返回结果的列数必须相等 2.每列的数据类型必须一致,【查询语句1中字段列表的类型必须和查询语句2中的字段列表类型对应且一致】 代码实例: SELECT user_id...子查询分类: 按结果及行数分: 1、 标量子查询(单行子查询:结果集只有一行一列) 2、 列子查询(多行子查询:结果集多行一列) 3、 行子查询(结果集有多行多列) 4、 表子查询(结果集有多行多列)...按出现位置分: 1、 SELECT 后面:只能出现标量子查询 2、 FROM 后面:表子查询(查询结果必须起别名) 3、 WHERE|HAVING:支持标量子查询,列子查询,行子查询 4、 EXISTS...后面:支持表子查询 代码实例: 查询订单信息,并显示用户姓名 SELECT a.

    21.9K20

    MySQL主从复制——主库已有数据的解决方案

    搭建完成后,可以在主库 show slave hosts查看有哪些从库节点。 ?...MySQL主从复制——主库已有数据的解决方案 由单机架构切换到一主一从或一主多从,在增加从库节点前,主库可能已经运行过一段时间,这种情况在实际业务中很常见。...那么如何应对开启主从复制前主库有数据的场景呢? 第一种方案是选择忽略主库之前的数据,不做处理。这种方案只适用于不重要的可有可无的数据,并且业务上能够容忍主从库数据不一致的场景。...mysql>flush tableswithreadlock; ? ? 查询主数据库状态,并记下FILE及Position的值 mysql>show master status; ?...切换到从数据库,查询测试数据,说明主从复制成功。 ? 总结 应该尽可能优化流程,减少锁表时间。 尽可能减少锁表范围,只锁定相关的数据库。

    2.3K20

    《Spring Mongo实战》第11招 索引跟着查询走

    读查询没快多少,写入延迟却从20毫秒涨到400毫秒。为什么现在要讲?因为云MongoDB越来越普及,业务查询越来越复杂,错误索引策略的成本被成倍放大。...那为什么不能只加索引解决查询?因为查询计划器会选择索引,但多个相似索引会互相干扰。MongoDB的查询计划器会为候选索引生成执行计划,通过采样跑分选出winner。...再比如tenantId字段重命名或者大小写规范化,旧索引没删,新的查询又建了新的索引,结果集合里一堆死索引,写入继续被拖累。所以不要把索引当成一次性配置。Schema是查询的土壤,索引是查询的路径。...具体步骤如下:第一,抓取Top10查询,记录完整的查询条件、排序字段、分页大小、返回字段。第二,为每条查询设计候选索引,按照ESR顺序先排等值、再排排序、最后排范围。...indexes/SpringDataMongoDB参考:https://docs.spring.io/spring-data/mongodb/reference/这些概念不用背,但每次设计索引时拿出来对照,能少走很多弯路

    12621

    MySQL主从复制——主库已有数据的解决方案

    搭建完成后,可以在主库show slave hosts查看有哪些从库节点。...MySQL主从复制——主库已有数据的解决方案 由单机架构切换到一主一从或一主多从,在增加从库节点前,主库可能已经运行过一段时间,这种情况在实际业务中很常见。...那么如何应对开启主从复制前主库有数据的场景呢? 第一种方案是选择忽略主库之前的数据,不做处理。这种方案只适用于不重要的可有可无的数据,并且业务上能够容忍主从库数据不一致的场景。...mysql> flush tables with read lock; 查询主数据库状态,并记下FILE及Position的值 mysql>show master status; 备份主数据库 退出...unlock tables; 测试主从复制 在主数据库插入一条测试数据 切换到从数据库,查询测试数据,说明主从复制成功。 总结 应该尽可能优化流程,减少锁表时间。

    2.5K00

    MySQL慢日志占满磁盘空间导致业务主库宕机解决

    我们知道数据库中有很多重要的日志,如错误日志error log、慢日志slow log、二进制日志binary log、查询日志general log等等其他日志,错误日志error log是我们分析问题参考的依据...通常我们在业务主库是开启慢日志功能并通过参数long_query_time这个参数来控制执行时间多长的SQL被记录进慢日志中,且对于执行时间超过1s的SQL就认为是慢SQL,这样的设定值,很多场合下不会记录太多的慢...[ERROR] /opt/app/mysql/bin/mysqld: Error writing file '/opt/app/mysql/tmp/mysqld.pid' (Errcode: 28 -...虽然我们的业务主库有MMM高可用架构,事实发现VIP确实是漂移到另一台master上,但仍然给我们的其他slave造成了复制同步错误的故障,更为严重的是影响到了我们的多源复制库的使用,内部人员使用和维护也带来很大的影响...[root@172-16-3-190 shells]# bash clean_mysql_slow_log.sh 1746208 5 [root@172-16-3-190 shells]# bash clean_mysql_slow_log.sh

    1.4K10

    mysql的查询、子查询及连接查询

    一、mysql查询的五种子句 where(条件查询)、having(筛选)、group by(分组)、order by(排序)、limit(限制结果数) 1、where常用运算符...函数,那么它是取最大的,而语句中使用了group by 分组,那么goods_name并 没有使用聚合函数,它只是cat_id下的第一个商品,并不会因为shop_price改变而改变 mysql...查出所有学生的挂科情况 select name,score<60 from stu; #这里scoremysql...后面的表达式,把表达式放在每一行中,看是否成立 2、字段(列),理解为变量,可以进行运算(算术运算和逻辑运算) 3、 取出结果可以理解成一张临时表 二、mysql...,【即左右连接的结果去除null项后的并集(去除了重复项)】 mysql目前还不支持 外连接(即左右连接结果的并集,不去除null项) 语法:select n1,n2,n3

    17.5K80

    mysql连接查询与分组查询

    连表查询在项目中用的很频繁,今天在这里总结一下 假设两张表 user: id name dept_id dept: id dept_name 交叉连接(cross join) 交叉连接是一个笛卡尔积的结果...t1 union select * from t2 t1id t1str 1 1 2 2 3 3 2 a 3 b t1和t2的结果集被显示在了一起,默认以t1的字段为准,这里要注意: 使用union查询的时候...,两个语句查询出的字段数目必须要相同 查询的结果中两个语句重复的数据会被合成一条,如果要显示重复的记录,就需要使用 union all 全连接(full join) 我查了一下资料,mysql并不支持全连接...from t1 left join t2 on t1.t1id = t2.t2id t1id t1str t2id t2str 1 1 null null 2 2 2 a 3 3 3 b 参考资料 mysql...多表查询 mysql联表查询总结

    6.1K20
    领券