停止MySQL服务hang的问题简单分析(一)

写第一篇,意味着还有第二篇的内容,这个也是自己今天偶然发现的问题。同事之前碰到了一个MySQL服务不断重启的问题,究其原因,其实倒还合理,今天的这个问题比较纠结,看起来好像没有直接的联系,问题算是比较诡异。

我简单复现下这个问题,我在5.7.19的版本中做了测试,可以复现。

首先搭建一主两从的测试环境,使用sandbox或者是我自己写的shell版本也可以,具体可以参考:https://github.com/jeanron100/mysql_slaves

我配置的环境如下,端口分别为10010和10020

10010 n1 Y

10020 n2 N

运行脚本init.sh大概也就一分钟就会搭建好了,参数文件的设置如下,GTID是开启的。

datadir=/U01/mysql_5.7_repl/n1

basedir=/usr/local/mysql_5.7

port=10010

socket=/U01/mysql_5.7_repl/n1/n1.sock

server_id=10010

gtid_mode=ON

enforce_gtid_consistency=ON

master_info_repository=TABLE

relay_log_info_repository=TABLE

binlog_checksum=NONE

log_slave_updates=ON

log_bin=binlog

binlog_format=ROW

主从的配置是差不多的,复制关系没有问题。

然后我们停止从库,把从库的GTID设置从配置文件删除,即删除参数。

gtid_mode=ON

enforce_gtid_consistency=ON

然后启动之后,MySQL服务竟然能够正常启动,在5.7.16的版本中测试时会出现不断重启的问题。当然启动之后,slave的线程是无法启动的。

mysql> start slave;

ERROR 3112 (HY000): The replication receiver thread for channel ''
cannot start in AUTO_POSITION mode: this server uses @@GLOBAL.GTID_MODE =
OFF.

提示很明显,是GTID的问题。

这个时候主库端已经没有了从库的连接,因为IO_Thread还没有建立关联。

我们这个时候保留主库GTID的配置,保留从库的服务,停止主库,使用mysqladmin shutdown 的方式。主库的操作命令就会hang住了。

mysqld的服务没了踪影,但是mysqladmin的命令卡在了那里。

魔性的一点是mysqld的服务已经停止了,我重启还是能够正常启动,但是mysqladmin的进程一直挂在那里。这个就有些不太合理了。

而问题的解决方法有两个,一个是删除主库的GTID配置,另外一个是停止从库(或者保留从库GTID配置,暂且启动)

这个问题的方向已经明确,和不规范的配置,不规范的操作有关,但是这个问题的结果还是有些出人意料。后续再来解读。

时间: 2024-10-15 01:18:53

停止MySQL服务hang的问题简单分析(一)的相关文章

通过两种方式增加从库——不停止mysql服务_Mysql

一般在线增加从库有两种方式,一种是通过mysqldump备份主库,恢复到从库,mysqldump是逻辑备份,数据量大时,备份速度会很慢,锁表的时间也会很长.另一种是通过xtrabackup工具备份主库,恢复到从库,xtrabackup是物理备份,备份速度快,不锁表.为什么不锁表?因为自身会监控主库日志,如果有更新的数据,就会先写到一个文件中,然后再回归到备份文件中,从而保持数据一致性. 现在生产环境MySQL数据库是一主一从,由于业务量访问不断增大,故再增加一台从库.前提是不能影响线上业务使用,

不停止MySQL服务增加从库的两种方式

 现在生产环境MySQL数据库是一主一从,由于业务量访问不断增大,故再增加一台从库.前提是不能影响线上业务使用,也就是说不能重启MySQL服务,为了避免出现其他情况,选择在网站访问量低峰期时间段操作.  一般在线增加从库有两种方式,一种是通过mysqldump备份主库,恢复到从库,mysqldump是逻辑备份,数据量大时,备份速度会很慢,锁表的时间也会很长.另一种是通过xtrabackup工具备份主库,恢复到从库,xtrabackup是物理备份,备份速度快,不锁表.为什么不锁表?因为自身会监控主

不停止 MySQL 服务增加从库的两种方式

现在生产环境MySQL数据库是一主一从,由于业务量访问不断增大,故再增加一台从库.前提是不能影响线上业务使用,也就是说不能重启MySQL服务,为了避免出现其他情况,选择在网站访问量低峰期时间段操作.  一般在线增加从库有两种方式,一种是通过mysqldump备份主库,恢复到从库,mysqldump是逻辑备份,数据量大时,备份速度会很慢,锁表的时间也会很长.另一种是通过xtrabackup工具备份主库,恢复到从库,xtrabackup是物理备份,备份速度快,不锁表.为什么不锁表?因为自身会监控主库

MySQL断电恢复的一点简单分析

今天有个网友问我一个MySQL的恢复问题.提供的截图如下.    对于这个问题,在一些断电的场景下还是可能出现的.我首先是要确认是否为线上业务还是测试环境,线上业务来说这个影响还是很大的.如果数据库无法启动,首要任务还是把数据库启动,然后在这个基础上查看丢失的数据程度,安排数据修复的事宜.    当然从我的角度来说,怎么去快速复现这个问题呢.我用自己写的快速搭建测试主从环境的脚本(https://github.com/jeanron100/mysql_slaves,后期有一位大牛建议用Pytho

不停止mysql服务配置主从

不影响主库线上的服务前提下,增加从库,前提是线上的主库配置中已经开启binlog并且指定了server-id. linux主192.168.0.70 版本Centos6.7 nginx1.10 php5.4.45 mysql5.5.48 windows从192.168.0.71 版本IIS7 mysql5.5.54 php5.6.29   master 主库原有配置/etc/my.cnf参数 [mysqld]log-bin=mysql-binserver-id = 1expire_logs_da

win2003 IIS+MySQL服务管理助手_win服务器

提示:如果你安装MySQL的服务名不是mysql,请使用文本编辑器打开该bat文件,批量替换文件中的mysql. mysql.bat 程序源码使用方法:将下面的文件复制保存为mysql.bat直接运行即可,如果你的服务器禁止了bat的运行请自行修改. 复制代码 代码如下: @Echo Off TITLE IIS6+MySQL服务管理助手v0.1 :start CLS COLOR 1f :: 使用COLOR命令对控制台输出颜色进行更改 MODE con: COLS=31 LINES=18 :: M

无法启动mysql服务问题解决办法汇总

在本地计算机无法启动MYSQL服务错误1067进程意外终止 这种情况一般是my.ini文件配置出错了 首先找到这个文件: 默认安装路径  代码如下 复制代码 C:/Program Files/MySQL/MySQL Server 5.1/my.ini   打开此文件找到:default-storage-engine=INNODB   大概在84行. 将default-storage-engine的值改为:MYISAM,这个时候,MYSQL服务可以启动. 但是还有问题:因为以前你创建的那些数据库还

mysql服务1067错误多种解决方案

my.ini在MySQL的目录,于是在同事机器上拷贝了一个my.ini拿来修改,并单独放在一个地方作为备份.其内容如下:    代码如下 复制代码 #Uncomment or Add only the keys that you know how works. #Read the MySQL Manual for instructions   [mysqld] basedir=d:/MySQL5.0/ #bind-address=127.0.0.1 datadir=d:/MySQL5.0/dat

mysql服务1067错误多种解决方案分享_Mysql

my.ini在MySQL的目录,于是在同事机器上拷贝了一个my.ini拿来修改,并单独放在一个地方作为备份.其内容如下: 复制代码 代码如下: #Uncomment or Add only the keys that you know how works. #Read the MySQL Manual for instructions [mysqld] basedir=d:/MySQL5.0/ #bind-address=127.0.0.1 datadir=d:/MySQL5.0/data #l