MySQL Clone插件自动重启失败的解决方式

MySQL 8添加了新的clone插件,被用于MGR的分布式恢复当中,也可以用来进行物理备份恢复。但是在进行clone操作的过程中,当拉取数据完成并进行自动重启server时,总是会出现重启失败的现象,如: 

日志报错提示RESTART失败,需要在后面手动重启,错误代码3307,即:ERROR 3707 (HY000): Restart server failed (mysqld is not managed by supervisor process)。而在关于clone的官方文档相关链接:https://dev.mysql.com/doc/refman/8.0/en/clone-plugin-remote.html中,也特别说明了这个报错:

意思说是当recipient server在clone数据拉取完成后会进行重启操作,前提是监控进程可用。而当出现相关报错时也不用担心,并不能说明clone失败了,随后只需要手动重启就可以了。

通过上面的日志和官方文档我们得到了出现重启失败的两个线索:RESTART、监控进程。

先看关于RESTART的相关官方文档说(https://dev.mysql.com/doc/refman/8.0/en/restart.html):

通过这段文档我们可以知道,如果想要成功执行“RESTART”命令,需要有一个监控进程,所以“RESTART”执行成功与否的关键就在于这个监控进程,而这个监控进程到底是什么文档在后面也进行了说明:

通过这段文档我们可以知道,如果想要成功执行“RESTART”命令,需要有一个监控进程,所以“RESTART”执行成功与否的关键就在于这个监控进程,而这个监控进程到底是什么文档在后面也进行了说明:

Restart=on-failure
 
RestartPreventExitStatus=1
 
# Set enviroment variable MYSQLD_PARENT_PID. This is required for restart.
Environment=MYSQLD_PARENT_PID=1

官方的systemd的service文件已经指出了如果想要实现自动重启,最重要的就是要设置“Environment=MYSQLD_PARENT_PID=1”,PID为1的进程就是systemd的进程。

而官方设置的重启时机是“on-failure” , 即数据库当遇到异常宕机、进程中断信号或监控超时时就会进行重启,但是当数据库异常宕机时,有时我们并不想让数据库立刻自动重启,而是需要在运维和开发人员确认过问题之后进行手动重启,这时候我们就需要调整自动重启的策略。在“RESTART”相关的官方文档中,明确指出了“RESTART”命令执行时数据库关闭时的退出状态码:16。这时我们就可以设置只有当数据库退出状态码为16时才进行自动重启,而在其余情况下不会进行自动重启,MySQL的systemd的service的“[Service]”区域进行如下配置:

RestartForceExitStatus=16
RestartPreventExitStatus=1
# Set enviroment variable MYSQLD_PARENT_PID. This is required for restart.
Environment=MYSQLD_PARENT_PID=1

“RestartForceExitStatus=16”的意思就是说不管是否配置了“Restart=”,当服务的退出状态码为16时都会进行自动重启,这样就解决了clone自动重启失败的问题,同时也保证了数据库在其他异常情况下不会进行自动重启。

如给MySQL发送中断信号时不会自动重启:

当执行clone操作时可以自动重启

没有了之前的报错,进行自动重启:

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值