首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MySQL 主从同步实战:常见故障排查与命令不存在怎么办

MySQL 主从同步实战:常见故障排查与命令不存在怎么办

作者头像
IT咸鱼
发布2025-06-12 14:04:06
发布2025-06-12 14:04:06
23800
代码可运行
举报
运行总次数:0
代码可运行

每天分享技术栈,开发工具等

兄弟姐妹们,做DBA你有没有遇到过这种情况?主库写了数据,结果从库就是不同步,或者延迟特别大,老板天天催着查日志,找原因,这时一查命令,居然报错说“bash: show slave status: 未找到命令”……这真是让人抓狂!今天这篇文章就带你一步步搞定MySQL主从复制的常见故障排查,并且教你遇到“命令不存在”这类错误该怎么破。


1. 环境小回顾

  • 三台服务器:master、node1、node2
  • 三台均安装了Almalinux,且Docker里部署了一主两从MySQL容器
  • 我们要在master上写数据,从node1、node2同步数据

2. 先搞清楚主从复制的组件关系

  • Master:写入数据的主库,负责把数据变动写进二进制日志 binlog。
  • Slave(node1/node2):从主库读取binlog,执行变更,实现数据同步。
  • IO线程:从库启动,连接主库拉取binlog。
  • SQL线程:读取binlog并执行SQL语句。

执行命令的位置:

  • Master上的mysql命令:检测主库状态,开启binlog等。
  • Slave上的mysql命令:检测从库复制状态、启动复制线程。

3. 主从复制状态查看命令

在从库的mysql客户端执行

代码语言:javascript
代码运行次数:0
运行
复制

SHOW SLAVE STATUS\G

这条命令是用来查看从库复制线程状态的关键。

注意:

  • SHOW SLAVE STATUS是mysql内部的SQL命令,不是Linux命令,所以需要在mysql客户端里执行。
  • 如果你在shell直接输入show slave status,会提示:
代码语言:javascript
代码运行次数:0
运行
复制

bash: show: command not found

这说明你把SQL命令当成了shell命令,记住哦,mysql命令和shell命令是分开的!


4. 如何正确进入MySQL客户端执行命令?

步骤:

  1. 先SSH登录到你想检查的从库服务器(node1或node2)。
代码语言:javascript
代码运行次数:0
运行
复制

ssh user@node1
  1. 进入docker容器内部(假设容器名字是 mysql_slave1):
代码语言:javascript
代码运行次数:0
运行
复制

docker exec-it mysql_slave1 bash
  1. 登录MySQL客户端:
代码语言:javascript
代码运行次数:0
运行
复制

mysql -uroot-p

输入密码后,进入MySQL命令行界面。

  1. 执行查看复制状态:
代码语言:javascript
代码运行次数:0
运行
复制

SHOW SLAVE STATUS\G

这样就不会出现“bash: show: command not found”的错误了。


5. 常见主从复制错误及排查

  • Slave_IO_Running: NoIO线程没有启动,不能拉取主库binlog。
  • Slave_SQL_Running: NoSQL线程没有启动,binlog拉来了但没执行。
  • Last_IO_ErrorLast_SQL_Error字段显示具体错误。

排查思路:

  • 先确认网络通畅,主从端口3306开放,且主库允许从库IP连接。
  • 检查用户权限,确认复制用户权限无误。
  • 查看mysql错误日志(docker内部一般路径是 /var/log/mysql/error.log)。

6. 处理命令不存在(bash: mysql: command not found)

  • 你在执行mysql -uroot -p时报错:
代码语言:javascript
代码运行次数:0
运行
复制

bash: mysql: command not found

这是因为MySQL客户端没装或环境变量没配置。

解决办法:

  1. 确认MySQL客户端安装
代码语言:javascript
代码运行次数:0
运行
复制

which mysql

没返回路径,说明没安装。

  1. 安装MySQL客户端
代码语言:javascript
代码运行次数:0
运行
复制

sudo yum install mysql

(Almalinux 默认用 yum)

  1. 如果安装成功,mysql命令即可使用。
  2. 由于MySQL运行在Docker容器里,宿主机可能没mysql客户端。你可以直接进入容器内执行:
代码语言:javascript
代码运行次数:0
运行
复制

dockerexec-it mysql_slave1 mysql -uroot-p

这样绕过宿主机没客户端的问题。


7. 如何重启主从复制?

假设复制挂了,可以这样重启:

代码语言:javascript
代码运行次数:0
运行
复制

STOP SLAVE;
START SLAVE;
SHOW SLAVE STATUS\G

依然是在mysql客户端执行。

SHOW SLAVE STATUS示例截图:

代码语言:javascript
代码运行次数:0
运行
复制
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-06-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT咸鱼 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 环境小回顾
  • 2. 先搞清楚主从复制的组件关系
  • 3. 主从复制状态查看命令
  • 4. 如何正确进入MySQL客户端执行命令?
  • 5. 常见主从复制错误及排查
  • 6. 处理命令不存在(bash: mysql: command not found)
  • 7. 如何重启主从复制?
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档